coveo.analytics 2.22.3 → 2.23.1
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":"coveoua.browser.js","sources":["../src/events.ts","../src/detector.ts","../src/hook/addDefaultValues.ts","../src/cookieutils.ts","../src/storage.ts","../src/history.ts","../src/hook/enhanceViewEvent.ts","../src/client/crypto.ts","../src/client/utils.ts","../src/client/measurementProtocolMapping/serviceMeasurementProtocolMapper.ts","../src/client/measurementProtocolMapping/commerceMeasurementProtocolMapper.ts","../src/client/measurementProtocolMapping/baseMeasurementProtocolMapper.ts","../src/client/measurementProtocolMapper.ts","../src/client/analyticsBeaconClient.ts","../src/client/analyticsRequestClient.ts","../bundle/browser-fetch.ts","../src/client/analyticsFetchClient.ts","../src/client/runtimeEnvironment.ts","../src/donottrack.ts","../src/client/analytics.ts","../src/insight/insightEvents.ts","../src/searchPage/searchPageEvents.ts","../src/react-native/react-native-utils.ts","../src/client/token.ts","../src/client/location.ts","../src/plugins/BasePlugin.ts","../src/plugins/ec.ts","../src/plugins/svc.ts","../src/coveoua/plugins.ts","../src/coveoua/simpleanalytics.ts","../src/client/noopAnalytics.ts","../src/formatting/format-array-for-coveo-custom-data.ts","../src/formatting/format-omnibox-metadata.ts","../src/searchPage/searchPageClient.ts","../src/caseAssist/caseAssistActions.ts","../src/caseAssist/caseAssistClient.ts","../src/insight/insightClient.ts","../src/coveoua/browser.ts"],"sourcesContent":["export type IRequestPayload = Record<string, any>;\n\nexport enum EventType {\n search = 'search',\n click = 'click',\n custom = 'custom',\n view = 'view',\n collect = 'collect',\n}\n\nexport interface SearchDocument {\n documentUri: string;\n documentUriHash: string;\n}\n\nexport type SendEventArguments = [EventType, ...any[]];\n\nexport type VariableArgumentsPayload =\n | []\n | [any]\n | [string, any]\n | [string, string, any]\n | [string, string, string, any]\n | [string, string, string, string, any];\n\nexport interface EventBaseRequest {\n language?: string;\n userAgent?: string;\n customData?: Record<string, any>;\n anonymous?: boolean;\n username?: string;\n userDisplayName?: any;\n splitTestRunName?: string;\n splitTestRunVersion?: string;\n clientId?: string;\n originContext?: string;\n originLevel1?: string;\n originLevel2?: string;\n originLevel3?: string;\n}\n\nexport interface FacetStateRequest {\n field: string;\n id: string;\n value: string;\n valuePosition: number;\n displayValue: string;\n facetType: 'specific' | 'dateRange' | 'numericalRange' | 'hierarchical';\n state: 'selected' | 'idle';\n facetPosition: number;\n title: string;\n start?: string;\n end?: string;\n endInclusive?: boolean;\n}\n\nexport interface SearchEventRequest extends EventBaseRequest {\n searchQueryUid: string;\n queryText: string;\n actionCause: string;\n responseTime: number;\n advancedQuery?: string;\n numberOfResults?: number;\n contextual?: boolean;\n results?: SearchDocument[];\n queryPipeline?: string;\n userGroups?: string[];\n facetState?: FacetStateRequest[];\n}\n\nexport interface DocumentInformation {\n documentUri: string;\n documentUriHash: string;\n collectionName: string;\n sourceName: string;\n documentPosition: number;\n actionCause: string;\n\n searchQueryUid: string;\n documentTitle: string;\n documentUrl: string;\n documentAuthor: string;\n queryPipeline: string;\n rankingModifier: string;\n}\n\nexport interface ClickEventRequest extends EventBaseRequest, DocumentInformation {}\n\nexport interface CustomEventRequest extends EventBaseRequest {\n eventType: string;\n eventValue: string;\n lastSearchQueryUid?: string;\n}\n\nexport interface ViewEventRequest extends EventBaseRequest {\n location?: string;\n referrer?: string;\n title?: string;\n contentIdKey: string;\n contentIdValue: string;\n contentType?: string;\n}\n\nexport interface DefaultEventResponse {\n visitId: string;\n visitorId: string;\n}\n\nexport interface SearchEventResponse extends DefaultEventResponse {}\nexport interface ClickEventResponse extends DefaultEventResponse {}\nexport interface CustomEventResponse extends DefaultEventResponse {}\nexport interface ViewEventResponse extends DefaultEventResponse {}\n\nexport type AnyEventResponse = SearchEventResponse | ClickEventResponse | CustomEventResponse | ViewEventResponse;\n\nexport interface VisitResponse {\n id: string;\n visitorId: string;\n}\nexport interface HealthResponse {\n status: string;\n}\n","export function hasWindow(): boolean {\n return typeof window !== 'undefined';\n}\n\nexport function hasNavigator(): boolean {\n return typeof navigator !== 'undefined';\n}\n\nexport function hasDocument(): boolean {\n return typeof document !== 'undefined';\n}\n\nexport function hasLocalStorage(): boolean {\n try {\n return typeof localStorage !== 'undefined';\n } catch (error) {\n return false;\n }\n}\n\nexport function hasSessionStorage(): boolean {\n try {\n return typeof sessionStorage !== 'undefined';\n } catch (error) {\n return false;\n }\n}\n\nexport function hasCookieStorage(): boolean {\n return hasNavigator() && navigator.cookieEnabled;\n}\n\nexport function hasCrypto(): boolean {\n return typeof crypto !== 'undefined';\n}\n\nexport function hasCryptoRandomValues(): boolean {\n return hasCrypto() && typeof crypto.getRandomValues !== 'undefined';\n}\n\nexport function hasLocation(): boolean {\n return typeof location !== 'undefined';\n}\n","import {AnalyticsClientSendEventHook} from '../client/analytics';\nimport {hasDocument, hasNavigator} from '../detector';\nimport {EventType} from '../events';\n\nconst eventTypesForDefaultValues: string[] = [EventType.click, EventType.custom, EventType.search, EventType.view];\n\nexport const addDefaultValues: AnalyticsClientSendEventHook = (eventType, payload) => {\n return eventTypesForDefaultValues.indexOf(eventType) !== -1\n ? {\n language: hasDocument() ? document.documentElement.lang : 'unknown',\n userAgent: hasNavigator() ? navigator.userAgent : 'unknown',\n ...payload,\n }\n : payload;\n};\n","interface CookieDetails {\n name: string;\n value: string;\n expires: string;\n domain: string;\n}\n\n// Code originally taken from : https://developers.livechatinc.com/blog/setting-cookies-to-subdomains-in-javascript/\nexport class Cookie {\n static set(name: string, value: string, expiration?: number) {\n var domain: string, domainParts: string[], date: any, expires: string, host: string;\n\n if (expiration) {\n date = new Date();\n date.setTime(date.getTime() + expiration);\n expires = '; expires=' + date.toGMTString();\n } else {\n expires = '';\n }\n\n host = window.location.hostname;\n if (host.indexOf('.') === -1) {\n // no \".\" in a domain - it's localhost or something similar\n document.cookie = name + '=' + value + expires + '; path=/';\n } else {\n // Remember the cookie on all subdomains.\n //\n // Start with trying to set cookie to the top domain.\n // (example: if user is on foo.com, try to set\n // cookie to domain \".com\")\n //\n // If the cookie will not be set, it means \".com\"\n // is a top level domain and we need to\n // set the cookie to \".foo.com\"\n domainParts = host.split('.');\n domainParts.shift();\n domain = '.' + domainParts.join('.');\n\n writeCookie({name, value, expires, domain});\n\n // check if cookie was successfuly set to the given domain\n // (otherwise it was a Top-Level Domain)\n if (Cookie.get(name) == null || Cookie.get(name) != value) {\n // append \".\" to current domain\n domain = '.' + host;\n writeCookie({name, value, expires, domain});\n }\n }\n }\n\n static get(name: string) {\n var cookiePrefix = name + '=';\n var cookieArray = document.cookie.split(';');\n for (var i = 0; i < cookieArray.length; i++) {\n var cookie = cookieArray[i];\n cookie = cookie.replace(/^\\s+/, '');\n\n if (cookie.indexOf(cookiePrefix) == 0) {\n return cookie.substring(cookiePrefix.length, cookie.length);\n }\n }\n return null;\n }\n\n static erase(name: string) {\n Cookie.set(name, '', -1);\n }\n}\n\nfunction writeCookie(details: CookieDetails) {\n const {name, value, expires, domain} = details;\n document.cookie = `${name}=${value}${expires}; path=/; domain=${domain}; SameSite=Lax`;\n}\n","import * as detector from './detector';\nimport {Cookie} from './cookieutils';\n\nexport let preferredStorage: WebStorage | null = null;\n\nexport interface WebStorage {\n getItem(key: string): string | null | Promise<string | null>;\n removeItem(key: string): void;\n setItem(key: string, data: string): void | Promise<void>;\n}\n\nexport function getAvailableStorage(): WebStorage {\n if (preferredStorage) {\n return preferredStorage;\n }\n if (detector.hasLocalStorage()) {\n return localStorage;\n }\n if (detector.hasCookieStorage()) {\n return new CookieStorage();\n }\n if (detector.hasSessionStorage()) {\n return sessionStorage;\n }\n return new NullStorage();\n}\n\nexport class CookieStorage implements WebStorage {\n static prefix = 'coveo_';\n getItem(key: string): string | null {\n return Cookie.get(`${CookieStorage.prefix}${key}`);\n }\n removeItem(key: string) {\n Cookie.erase(`${CookieStorage.prefix}${key}`);\n }\n setItem(key: string, data: string): void {\n Cookie.set(`${CookieStorage.prefix}${key}`, data);\n }\n}\n\nexport class CookieAndLocalStorage implements WebStorage {\n private cookieStorage = new CookieStorage();\n\n getItem(key: string): string | null {\n return localStorage.getItem(key) || this.cookieStorage.getItem(key);\n }\n\n removeItem(key: string): void {\n this.cookieStorage.removeItem(key);\n localStorage.removeItem(key);\n }\n\n setItem(key: string, data: string): void {\n localStorage.setItem(key, data);\n this.cookieStorage.setItem(key, data);\n }\n}\n\nexport class NullStorage implements WebStorage {\n getItem(key: string): string | null {\n return null;\n }\n removeItem(key: string) {\n /**/\n }\n setItem(key: string, data: string): void {\n /**/\n }\n}\n","import {getAvailableStorage, WebStorage} from './storage';\n\nexport const STORE_KEY: string = '__coveo.analytics.history';\nexport const MAX_NUMBER_OF_HISTORY_ELEMENTS: number = 20;\nexport const MIN_THRESHOLD_FOR_DUPLICATE_VALUE: number = 1000 * 60;\nexport const MAX_VALUE_SIZE = 75;\n\nexport class HistoryStore {\n private store: WebStorage;\n constructor(store?: WebStorage) {\n this.store = store || getAvailableStorage();\n }\n\n /**\n * @deprecated Synchronous method is deprecated, use addElementAsync instead. This method will NOT work with react-native.\n */\n addElement(elem: HistoryElement) {\n elem.internalTime = new Date().getTime();\n elem = this.cropQueryElement(this.stripEmptyQuery(elem));\n let currentHistory = this.getHistoryWithInternalTime();\n if (currentHistory != null) {\n if (this.isValidEntry(elem)) {\n this.setHistory([elem].concat(currentHistory));\n }\n } else {\n this.setHistory([elem]);\n }\n }\n\n async addElementAsync(elem: HistoryElement) {\n elem.internalTime = new Date().getTime();\n elem = this.cropQueryElement(this.stripEmptyQuery(elem));\n let currentHistory = await this.getHistoryWithInternalTimeAsync();\n if (currentHistory != null) {\n if (this.isValidEntry(elem)) {\n this.setHistory([elem].concat(currentHistory));\n }\n } else {\n this.setHistory([elem]);\n }\n }\n\n /**\n * @deprecated Synchronous method is deprecated, use getHistoryAsync instead. This method will NOT work with react-native.\n */\n getHistory(): HistoryElement[] {\n const history = this.getHistoryWithInternalTime();\n return this.stripEmptyQueries(this.stripInternalTime(history));\n }\n\n async getHistoryAsync(): Promise<HistoryElement[]> {\n const history = await this.getHistoryWithInternalTimeAsync();\n return this.stripEmptyQueries(this.stripInternalTime(history));\n }\n\n private getHistoryWithInternalTime(): HistoryElement[] {\n try {\n const elements = this.store.getItem(STORE_KEY);\n if (elements && typeof elements === 'string') {\n return JSON.parse(elements) as HistoryElement[];\n } else {\n return [];\n }\n } catch (e) {\n // When using the Storage APIs (localStorage/sessionStorage)\n // Safari says that those APIs are available but throws when making\n // a call to them.\n return [];\n }\n }\n\n private async getHistoryWithInternalTimeAsync(): Promise<HistoryElement[]> {\n try {\n const elements = await this.store.getItem(STORE_KEY);\n if (elements) {\n return JSON.parse(elements) as HistoryElement[];\n } else {\n return [];\n }\n } catch (e) {\n // When using the Storage APIs (localStorage/sessionStorage)\n // Safari says that those APIs are available but throws when making\n // a call to them.\n return [];\n }\n }\n\n setHistory(history: HistoryElement[]) {\n try {\n this.store.setItem(STORE_KEY, JSON.stringify(history.slice(0, MAX_NUMBER_OF_HISTORY_ELEMENTS)));\n } catch (e) {\n /* refer to this.getHistory() */\n }\n }\n\n clear() {\n try {\n this.store.removeItem(STORE_KEY);\n } catch (e) {\n /* refer to this.getHistory() */\n }\n }\n\n getMostRecentElement(): HistoryElement | null {\n let currentHistory = this.getHistoryWithInternalTime();\n if (currentHistory != null) {\n const sorted = currentHistory.sort((first: HistoryElement, second: HistoryElement) => {\n // Internal time might not be set for all history element (on upgrade).\n // Ensure to return the most recent element for which we have a value for internalTime.\n return (second.internalTime || 0) - (first.internalTime || 0);\n });\n return sorted[0];\n }\n return null;\n }\n\n private cropQueryElement(part: HistoryElement) {\n if (part.name && part.value && part.name.toLowerCase() === 'query') {\n part.value = part.value.slice(0, MAX_VALUE_SIZE);\n }\n\n return part;\n }\n\n private isValidEntry(elem: HistoryElement): boolean {\n let lastEntry = this.getMostRecentElement();\n\n if (lastEntry && lastEntry.value == elem.value) {\n return (elem.internalTime || 0) - (lastEntry.internalTime || 0) > MIN_THRESHOLD_FOR_DUPLICATE_VALUE;\n }\n return true;\n }\n\n private stripInternalTime(history: HistoryElement[]): HistoryElement[] {\n return history.map((part) => {\n const {name, time, value} = part;\n return {name, time, value};\n });\n }\n\n private stripEmptyQuery(part: HistoryElement) {\n const {name, time, value} = part;\n if (name && typeof value === 'string' && name.toLowerCase() === 'query' && value.trim() === '') {\n return {name, time};\n }\n\n return part;\n }\n\n private stripEmptyQueries(history: HistoryElement[]): HistoryElement[] {\n return history.map((part) => this.stripEmptyQuery(part));\n }\n}\n\nexport interface HistoryElement {\n name: string;\n value?: string;\n time: string;\n internalTime?: number;\n}\n\nexport interface HistoryViewElement extends HistoryElement {\n title?: string;\n}\n\nexport default HistoryStore;\n","import {AnalyticsClientSendEventHook} from '../client/analytics';\nimport {ViewEventRequest, EventType} from '../events';\nimport {HistoryStore, STORE_KEY} from '../history';\n\nexport const enhanceViewEvent: AnalyticsClientSendEventHook = async (eventType, payload) => {\n if (eventType === EventType.view) {\n await addPageViewToHistory(payload.contentIdValue);\n return {\n location: window.location.toString(),\n referrer: document.referrer,\n title: document.title,\n ...payload,\n } as ViewEventRequest;\n }\n\n return payload;\n};\n\nconst addPageViewToHistory = async (pageViewValue: string) => {\n const store = new HistoryStore();\n const historyElement = {\n name: 'PageView',\n value: pageViewValue,\n time: JSON.stringify(new Date()),\n };\n await store.addElementAsync(historyElement);\n};\n","import {hasCryptoRandomValues} from '../detector';\n\nexport const uuidv4 = (a?: number | string): string => {\n if (!!a) {\n return (Number(a) ^ (getRandomValues(new Uint8Array(1))[0] % 16 >> (Number(a) / 4))).toString(16);\n }\n return (`${1e7}` + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, uuidv4);\n};\n\nconst getRandomValues = (rnds: Uint8Array) => {\n if (hasCryptoRandomValues()) {\n return crypto.getRandomValues(rnds);\n }\n for (var i = 0, r = 0; i < rnds.length; i++) {\n if ((i & 0x03) === 0) {\n r = Math.random() * 0x100000000;\n }\n rnds[i] = (r >>> ((i & 0x03) << 3)) & 0xff;\n }\n return rnds;\n};\n","// Object.keys returns `string[]` this adds types\n// see https://github.com/microsoft/TypeScript/pull/12253#issuecomment-393954723\nexport const keysOf = Object.keys as <T>(o: T) => Extract<keyof T, string>[];\n","import {Ticket} from '../../plugins/svc';\nimport {keysOf} from '../utils';\n\nconst ticketKeysMapping: {[key in keyof Ticket]: string} = {\n id: 'svc_ticket_id',\n subject: 'svc_ticket_subject',\n description: 'svc_ticket_description',\n category: 'svc_ticket_category',\n productId: 'svc_ticket_product_id',\n custom: 'svc_ticket_custom',\n};\nconst ticketKeysMappingValues = keysOf(ticketKeysMapping).map((key) => ticketKeysMapping[key]);\nconst ticketSubKeysMatchGroup = [...ticketKeysMappingValues].join('|');\nconst ticketKeyRegex = new RegExp(`^(${ticketSubKeysMatchGroup}$)`);\n\nexport const serviceActionsKeysMapping: {[name: string]: string} = {\n svcAction: 'svc_action',\n svcActionData: 'svc_action_data',\n};\n\nexport const convertTicketToMeasurementProtocol = (ticket: Ticket) => {\n return keysOf(ticket)\n .filter((key) => ticket[key] !== undefined)\n .reduce((mappedTicket, key) => {\n const newKey = ticketKeysMapping[key] || key;\n return {\n ...mappedTicket,\n [newKey]: ticket[key],\n };\n }, {});\n};\n\nconst isTicketKey = (key: string) => ticketKeyRegex.test(key);\n\nexport const isServiceKey = [isTicketKey];\n","import {Product, ImpressionList, BaseImpression} from '../../plugins/ec';\nimport {keysOf} from '../utils';\n\n// Based off: https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#enhanced-ecomm\nconst productKeysMapping: {[key in keyof Product]: string} = {\n id: 'id',\n name: 'nm',\n brand: 'br',\n category: 'ca',\n variant: 'va',\n price: 'pr',\n quantity: 'qt',\n coupon: 'cc',\n position: 'ps',\n // Below are keys that were extended for Coveo\n group: 'group',\n};\n\nconst impressionKeysMapping: {[key in keyof BaseImpression]: string} = {\n id: 'id',\n name: 'nm',\n brand: 'br',\n category: 'ca',\n variant: 'va',\n position: 'ps',\n price: 'pr',\n // Below are keys that were extended for Coveo\n group: 'group',\n};\n\nconst productActionsKeysMapping: {[name: string]: string} = {\n action: 'pa',\n list: 'pal',\n listSource: 'pls',\n};\n\nconst transactionActionsKeysMapping: {[name: string]: string} = {\n id: 'ti',\n revenue: 'tr',\n tax: 'tt',\n shipping: 'ts',\n coupon: 'tcc',\n affiliation: 'ta',\n step: 'cos',\n option: 'col',\n};\n\n// These extension keys do not have direct mappings, we are sending them as-is, thus only requiring an array.\nconst coveoCommerceExtensionKeys: string[] = [\n 'loyaltyCardId',\n 'loyaltyTier',\n 'thirdPartyPersona',\n 'companyName',\n 'favoriteStore',\n 'storeName',\n 'userIndustry',\n 'userRole',\n 'userDepartment',\n 'businessUnit',\n];\n\nconst quoteActionsKeysMapping: {[name: string]: string} = {\n id: 'quoteId',\n affiliation: 'quoteAffiliation',\n};\n\nconst reviewActionsKeysMapping: {[name: string]: string} = {\n id: 'reviewId',\n rating: 'reviewRating',\n comment: 'reviewComment',\n};\n\nexport const commerceActionKeysMappingPerAction: Record<string, {[name: string]: string}> = {\n add: productActionsKeysMapping,\n bookmark_add: productActionsKeysMapping,\n bookmark_remove: productActionsKeysMapping,\n click: productActionsKeysMapping,\n checkout: productActionsKeysMapping,\n checkout_option: productActionsKeysMapping,\n detail: productActionsKeysMapping,\n impression: productActionsKeysMapping,\n remove: productActionsKeysMapping,\n refund: {\n ...productActionsKeysMapping,\n ...transactionActionsKeysMapping,\n },\n purchase: {\n ...productActionsKeysMapping,\n ...transactionActionsKeysMapping,\n },\n quickview: productActionsKeysMapping,\n quote: {\n ...productActionsKeysMapping,\n ...quoteActionsKeysMapping,\n },\n review: {\n ...productActionsKeysMapping,\n ...reviewActionsKeysMapping,\n },\n};\n\nexport const convertProductToMeasurementProtocol = (product: Product, index: number) => {\n return keysOf(product).reduce((mappedProduct, key) => {\n const newKey = `pr${index + 1}${productKeysMapping[key] || key}`;\n return {\n ...mappedProduct,\n [newKey]: product[key],\n };\n }, {});\n};\n\nexport const convertImpressionListToMeasurementProtocol = (\n impressionList: ImpressionList,\n listIndex: number,\n prefix: string\n) => {\n const payload: {[name: string]: any} = impressionList.impressions.reduce(\n (mappedImpressions, impression, productIndex) => {\n return {\n ...mappedImpressions,\n ...convertImpressionToMeasurementProtocol(impression, listIndex, productIndex, prefix),\n };\n },\n {}\n );\n\n if (impressionList.listName) {\n const listNameKey = `il${listIndex + 1}nm`;\n payload[listNameKey] = impressionList.listName;\n }\n return payload;\n};\n\nconst convertImpressionToMeasurementProtocol = (\n impression: BaseImpression,\n listIndex: number,\n productIndex: number,\n prefix: string\n) => {\n return keysOf(impression).reduce((mappedImpression, key) => {\n const newKey = `il${listIndex + 1}${prefix}${productIndex + 1}${impressionKeysMapping[key] || key}`;\n return {\n ...mappedImpression,\n [newKey]: impression[key],\n };\n }, {});\n};\n\nconst productKeysMappingValues = keysOf(productKeysMapping).map((key) => productKeysMapping[key]);\nconst impressionKeysMappingValues = keysOf(impressionKeysMapping).map((key) => impressionKeysMapping[key]);\nconst productActionsKeysMappingValues = keysOf(productActionsKeysMapping).map((key) => productActionsKeysMapping[key]);\nconst transactionActionsKeysMappingValues = keysOf(transactionActionsKeysMapping).map(\n (key) => transactionActionsKeysMapping[key]\n);\nconst reviewKeysMappingValues = keysOf(reviewActionsKeysMapping).map((key) => reviewActionsKeysMapping[key]);\nconst quoteKeysMappingValues = keysOf(quoteActionsKeysMapping).map((key) => quoteActionsKeysMapping[key]);\n\nconst productSubKeysMatchGroup = [...productKeysMappingValues, 'custom'].join('|');\nconst impressionSubKeysMatchGroup = [...impressionKeysMappingValues, 'custom'].join('|');\nconst productPrefixMatchGroup = '(pr[0-9]+)';\nconst impressionPrefixMatchGroup = '(il[0-9]+pi[0-9]+)';\nconst productKeyRegex = new RegExp(`^${productPrefixMatchGroup}(${productSubKeysMatchGroup})$`);\nconst impressionKeyRegex = new RegExp(`^(${impressionPrefixMatchGroup}(${impressionSubKeysMatchGroup}))|(il[0-9]+nm)$`);\nconst productActionsKeyRegex = new RegExp(`^(${productActionsKeysMappingValues.join('|')})$`);\nconst transactionActionsKeyRegex = new RegExp(`^(${transactionActionsKeysMappingValues.join('|')})$`);\nconst customProductKeyRegex = new RegExp(`^${productPrefixMatchGroup}custom$`);\nconst customImpressionKeyRegex = new RegExp(`^${impressionPrefixMatchGroup}custom$`);\nconst coveoCommerceExtensionKeysRegex = new RegExp(\n `^(${[...coveoCommerceExtensionKeys, ...reviewKeysMappingValues, ...quoteKeysMappingValues].join('|')})$`\n);\n\nconst isProductKey = (key: string) => productKeyRegex.test(key);\nconst isImpressionKey = (key: string) => impressionKeyRegex.test(key);\nconst isProductActionsKey = (key: string) => productActionsKeyRegex.test(key);\nconst isTransactionActionsKeyRegex = (key: string) => transactionActionsKeyRegex.test(key);\nconst isCoveoCommerceExtensionKey = (key: string) => coveoCommerceExtensionKeysRegex.test(key);\n\nexport const isCommerceKey = [\n isImpressionKey,\n isProductKey,\n isProductActionsKey,\n isTransactionActionsKeyRegex,\n isCoveoCommerceExtensionKey,\n];\nexport const isCustomCommerceKey = [customProductKeyRegex, customImpressionKeyRegex];\n","import {BasePlugin} from '../../plugins/BasePlugin';\n\ntype DefaultContextInformation = ReturnType<typeof BasePlugin.prototype.getDefaultContextInformation> &\n ReturnType<typeof BasePlugin.prototype.getLocationInformation>;\n\nconst globalParamKeysMapping: {[name: string]: string} = {\n anonymizeIp: 'aip',\n};\n\nconst eventKeysMapping: {[name: string]: string} = {\n eventCategory: 'ec',\n eventAction: 'ea',\n eventLabel: 'el',\n eventValue: 'ev',\n page: 'dp',\n visitorId: 'cid',\n clientId: 'cid',\n userId: 'uid',\n currencyCode: 'cu',\n};\n\nconst contextInformationMapping: {[key in keyof DefaultContextInformation]: string} = {\n hitType: 't',\n pageViewId: 'pid',\n encoding: 'de',\n location: 'dl',\n referrer: 'dr',\n screenColor: 'sd',\n screenResolution: 'sr',\n title: 'dt',\n userAgent: 'ua',\n language: 'ul',\n eventId: 'z',\n time: 'tm',\n};\n\n/* Those are extension keys that are supported by the Coveo collect protocol (but not Google's protocol). They will be forwarded as-is. */\nconst coveoExtensionsKeys = [\n 'contentId',\n 'contentIdKey',\n 'contentType',\n 'searchHub',\n 'tab',\n 'searchUid',\n 'permanentId',\n 'contentLocale',\n];\n\nexport const baseMeasurementProtocolKeysMapping: {[name: string]: string} = {\n ...globalParamKeysMapping,\n ...eventKeysMapping,\n ...contextInformationMapping,\n ...coveoExtensionsKeys.reduce(\n (all, key) => ({\n ...all,\n [key]: key,\n }),\n {}\n ),\n};\n","import {isServiceKey, serviceActionsKeysMapping} from './measurementProtocolMapping/serviceMeasurementProtocolMapper';\nimport {\n commerceActionKeysMappingPerAction,\n isCommerceKey,\n isCustomCommerceKey,\n} from './measurementProtocolMapping/commerceMeasurementProtocolMapper';\nimport {keysOf} from './utils';\nimport {baseMeasurementProtocolKeysMapping} from './measurementProtocolMapping/baseMeasurementProtocolMapper';\n\nconst measurementProtocolKeysMapping: {[name: string]: string} = {\n ...baseMeasurementProtocolKeysMapping,\n ...serviceActionsKeysMapping,\n};\n\nexport const convertKeysToMeasurementProtocol = (params: any) => {\n const keysMappingForAction = (!!params.action && commerceActionKeysMappingPerAction[params.action]) || {};\n return keysOf(params).reduce((mappedKeys, key) => {\n const newKey = keysMappingForAction[key] || measurementProtocolKeysMapping[key] || key;\n return {\n ...mappedKeys,\n [newKey]: params[key],\n };\n }, {});\n};\n\nconst measurementProtocolKeysMappingValues = keysOf(measurementProtocolKeysMapping).map(\n (key) => measurementProtocolKeysMapping[key]\n);\n\nconst isKnownMeasurementProtocolKey = (key: string) => measurementProtocolKeysMappingValues.indexOf(key) !== -1;\nconst isCustomKey = (key: string) => key === 'custom';\n\nexport const isMeasurementProtocolKey = (key: string): boolean => {\n return [...isCommerceKey, ...isServiceKey, isKnownMeasurementProtocolKey, isCustomKey].some((test) => test(key));\n};\n\nexport const convertCustomMeasurementProtocolKeys = (data: {[name: string]: string | {[name: string]: string}}) => {\n return keysOf(data).reduce((all, current) => {\n const match = getFirstCustomMeasurementProtocolKeyMatch(current);\n if (match) {\n return {\n ...all,\n ...convertCustomObject(match, data[current] as {[name: string]: string}),\n };\n } else {\n return {\n ...all,\n [current]: data[current],\n };\n }\n }, {});\n};\n\nconst getFirstCustomMeasurementProtocolKeyMatch = (key: string): string | undefined => {\n let matchedKey: string | undefined = undefined;\n [...isCustomCommerceKey].every((regex) => {\n matchedKey = regex.exec(key)?.[1];\n return !Boolean(matchedKey);\n });\n return matchedKey;\n};\n\nconst convertCustomObject = (prefix: string, customData: {[name: string]: string}) => {\n return keysOf(customData).reduce(\n (allCustom, currentCustomKey) => ({\n ...allCustom,\n [`${prefix}${currentCustomKey}`]: customData[currentCustomKey],\n }),\n {}\n );\n};\n","import {AnalyticsRequestClient, IAnalyticsRequestOptions, IAnalyticsClientOptions} from './analyticsRequestClient';\nimport {EventType, IRequestPayload} from '../events';\n\nexport class AnalyticsBeaconClient implements AnalyticsRequestClient {\n constructor(private opts: IAnalyticsClientOptions) {}\n\n public async sendEvent(eventType: EventType, payload: IRequestPayload): Promise<void> {\n if (!navigator.sendBeacon) {\n throw new Error(\n `navigator.sendBeacon is not supported in this browser. Consider adding a polyfill like \"sendbeacon-polyfill\".`\n );\n }\n\n const {baseUrl, preprocessRequest} = this.opts;\n const parsedRequestData = this.encodeForEventType(eventType, payload);\n const paramsFragments = await this.getQueryParamsForEventType(eventType);\n const defaultOptions: IAnalyticsRequestOptions = {\n url: `${baseUrl}/analytics/${eventType}?${paramsFragments}`,\n body: new Blob([parsedRequestData], {\n type: 'application/x-www-form-urlencoded',\n }),\n };\n const {url, body}: IAnalyticsRequestOptions = {\n ...defaultOptions,\n ...(preprocessRequest ? await preprocessRequest(defaultOptions, 'analyticsBeacon') : {}),\n };\n\n // tslint:disable-next-line: no-console\n console.log(`Sending beacon for \"${eventType}\" with: `, JSON.stringify(payload));\n navigator.sendBeacon(url, body as any); // https://github.com/microsoft/TypeScript/issues/38715\n return;\n }\n\n public deleteHttpCookieVisitorId() {\n return Promise.resolve();\n }\n\n private encodeForEventType(eventType: EventType, payload: IRequestPayload): string {\n return this.isEventTypeLegacy(eventType)\n ? this.encodeForLegacyType(eventType, payload)\n : this.encodeForFormUrlEncoded({\n access_token: this.opts.token,\n ...payload,\n });\n }\n\n private async getQueryParamsForEventType(eventType: EventType): Promise<string> {\n const {token, visitorIdProvider} = this.opts;\n const visitorId = await visitorIdProvider.getCurrentVisitorId();\n return [\n token && this.isEventTypeLegacy(eventType) ? `access_token=${token}` : '',\n visitorId ? `visitorId=${visitorId}` : '',\n 'discardVisitInfo=true',\n ]\n .filter((p) => !!p)\n .join('&');\n }\n\n private isEventTypeLegacy(eventType: EventType) {\n return [EventType.click, EventType.custom, EventType.search, EventType.view].indexOf(eventType) !== -1;\n }\n\n private encodeForLegacyType(eventType: EventType, payload: IRequestPayload): string {\n return `${eventType}Event=${encodeURIComponent(JSON.stringify(payload))}`;\n }\n\n private encodeForFormUrlEncoded(payload: IRequestPayload): string {\n return Object.keys(payload)\n .filter((key) => !!payload[key])\n .map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(this.encodeValue(payload[key]))}`)\n .join('&');\n }\n\n private encodeValue(value: any) {\n return typeof value === 'number' || typeof value === 'string' || typeof value === 'boolean'\n ? value\n : JSON.stringify(value);\n }\n}\n","import {AnyEventResponse, EventType, IRequestPayload} from '../events';\n\nexport interface VisitorIdProvider {\n getCurrentVisitorId: () => Promise<string>;\n setCurrentVisitorId: (visitorId: string) => void;\n}\n\nexport interface AnalyticsRequestClient {\n sendEvent(eventType: string, payload: IRequestPayload): Promise<AnyEventResponse | void>;\n deleteHttpCookieVisitorId: () => Promise<void>;\n}\n\nexport interface IAnalyticsClientOptions {\n baseUrl: string;\n token?: string;\n visitorIdProvider: VisitorIdProvider;\n preprocessRequest?: PreprocessAnalyticsRequest;\n}\n\nexport type AnalyticsClientOrigin = 'analyticsFetch' | 'analyticsBeacon';\n\nexport type PreprocessAnalyticsRequest = (\n request: IAnalyticsRequestOptions,\n clientOrigin: AnalyticsClientOrigin\n) => IAnalyticsRequestOptions | Promise<IAnalyticsRequestOptions>;\n\nexport interface IAnalyticsRequestOptions extends RequestInit {\n url: string;\n}\n\nexport class NoopAnalyticsClient implements AnalyticsRequestClient {\n public async sendEvent(_: EventType, __: IRequestPayload): Promise<void> {\n return Promise.resolve();\n }\n\n public async deleteHttpCookieVisitorId() {\n return Promise.resolve();\n }\n}\n","// This file is to prevent including a fetch polyfill from the \"cross-fetch\" dependency when building for a browser target.\n// Major browsers today provide fetch on the window object, so including a polyfill would needlessly increase the size of the bundle.\nexport const fetch = window.fetch;\n","import {AnalyticsRequestClient, IAnalyticsRequestOptions, IAnalyticsClientOptions} from './analyticsRequestClient';\nimport {AnyEventResponse, EventType, IRequestPayload} from '../events';\nimport {fetch} from 'cross-fetch';\n\nexport class AnalyticsFetchClient implements AnalyticsRequestClient {\n constructor(private opts: IAnalyticsClientOptions) {}\n\n public async sendEvent(eventType: EventType, payload: IRequestPayload): Promise<AnyEventResponse> {\n const {baseUrl, visitorIdProvider, preprocessRequest} = this.opts;\n\n const visitorIdParam = this.shouldAppendVisitorId(eventType) ? await this.getVisitorIdParam() : '';\n const defaultOptions: IAnalyticsRequestOptions = {\n url: `${baseUrl}/analytics/${eventType}${visitorIdParam}`,\n credentials: 'include',\n mode: 'cors',\n headers: this.getHeaders(),\n method: 'POST',\n body: JSON.stringify(payload),\n };\n const {url, ...fetchData}: IAnalyticsRequestOptions = {\n ...defaultOptions,\n ...(preprocessRequest ? await preprocessRequest(defaultOptions, 'analyticsFetch') : {}),\n };\n\n const response = await fetch(url, fetchData);\n if (response.ok) {\n const visit = (await response.json()) as AnyEventResponse;\n\n if (visit.visitorId) {\n visitorIdProvider.setCurrentVisitorId(visit.visitorId);\n }\n\n return visit;\n } else {\n try {\n response.json();\n } catch {\n /* If you don't parse the response, it won't appear in the network tab. */\n }\n console.error(`An error has occured when sending the \"${eventType}\" event.`, response, payload);\n throw new Error(\n `An error has occurred when sending the \"${eventType}\" event. Check the console logs for more details.`\n );\n }\n }\n\n public async deleteHttpCookieVisitorId() {\n const {baseUrl} = this.opts;\n const url = `${baseUrl}/analytics/visit`;\n await fetch(url, {headers: this.getHeaders(), method: 'DELETE'});\n }\n\n private shouldAppendVisitorId(eventType: EventType) {\n return [EventType.click, EventType.custom, EventType.search, EventType.view].indexOf(eventType) !== -1;\n }\n\n private async getVisitorIdParam() {\n const {visitorIdProvider} = this.opts;\n const visitorId = await visitorIdProvider.getCurrentVisitorId();\n return visitorId ? `?visitor=${visitorId}` : '';\n }\n\n private getHeaders(): Record<string, string> {\n const {token} = this.opts;\n return {\n ...(token ? {Authorization: `Bearer ${token}`} : {}),\n 'Content-Type': `application/json`,\n };\n }\n}\n","import {WebStorage, NullStorage, CookieAndLocalStorage} from '../storage';\nimport {AnalyticsBeaconClient} from './analyticsBeaconClient';\nimport {hasLocalStorage, hasCookieStorage} from '../detector';\nimport {AnalyticsRequestClient, IAnalyticsClientOptions, NoopAnalyticsClient} from './analyticsRequestClient';\nimport {AnalyticsFetchClient} from './analyticsFetchClient';\nimport {BufferedRequest} from './analytics';\n\nexport interface IRuntimeEnvironment {\n storage: WebStorage;\n client: AnalyticsRequestClient;\n}\n\nexport class BrowserRuntime implements IRuntimeEnvironment {\n public storage: WebStorage;\n public client: AnalyticsFetchClient;\n private beaconClient: AnalyticsBeaconClient;\n\n constructor(clientOptions: IAnalyticsClientOptions, getUnprocessedRequests: () => Array<BufferedRequest>) {\n if (hasLocalStorage() && hasCookieStorage()) {\n this.storage = new CookieAndLocalStorage();\n } else if (hasLocalStorage()) {\n this.storage = localStorage;\n } else {\n console.warn('BrowserRuntime detected no valid storage available.', this);\n this.storage = new NullStorage();\n }\n this.client = new AnalyticsFetchClient(clientOptions);\n this.beaconClient = new AnalyticsBeaconClient(clientOptions);\n window.addEventListener('beforeunload', () => {\n const requests = getUnprocessedRequests();\n for (let {eventType, payload} of requests) {\n this.beaconClient.sendEvent(eventType, payload);\n }\n });\n }\n}\n\nexport class NodeJSRuntime implements IRuntimeEnvironment {\n public storage: WebStorage;\n public client: AnalyticsFetchClient;\n\n constructor(clientOptions: IAnalyticsClientOptions, storage?: WebStorage) {\n this.storage = storage || new NullStorage();\n this.client = new AnalyticsFetchClient(clientOptions);\n }\n}\n\nexport class NoopRuntime implements IRuntimeEnvironment {\n public storage = new NullStorage();\n public client = new NoopAnalyticsClient();\n}\n","// Read the Mozilla Do Not Track Field Guide\n// (https://developer.mozilla.org/en-US/docs/Web/Security/Do_not_track_field_guide),\n// for information on how to use the donottrack\n// gathering data of actions of an user as long as it is not associated to the\n// identity of that user, doNotTrack is not enabled here.\n\nimport {hasNavigator} from './detector';\n\nconst doNotTrackValues = ['1', 1, 'yes', true];\n\nexport function doNotTrack(): boolean {\n return (\n hasNavigator() &&\n [\n (<any>navigator).globalPrivacyControl,\n (<any>navigator).doNotTrack,\n (<any>navigator).msDoNotTrack,\n (<any>window).doNotTrack,\n ].some((value) => doNotTrackValues.indexOf(value) !== -1)\n );\n}\n\nexport default doNotTrack;\n","import {\n AnyEventResponse,\n ClickEventRequest,\n ClickEventResponse,\n CustomEventRequest,\n CustomEventResponse,\n EventType,\n HealthResponse,\n SearchEventRequest,\n SearchEventResponse,\n ViewEventRequest,\n ViewEventResponse,\n VisitResponse,\n IRequestPayload,\n VariableArgumentsPayload,\n} from '../events';\nimport {IAnalyticsClientOptions, PreprocessAnalyticsRequest, VisitorIdProvider} from './analyticsRequestClient';\nimport {hasWindow, hasDocument} from '../detector';\nimport {addDefaultValues} from '../hook/addDefaultValues';\nimport {enhanceViewEvent} from '../hook/enhanceViewEvent';\nimport {uuidv4} from './crypto';\nimport {\n convertKeysToMeasurementProtocol,\n isMeasurementProtocolKey,\n convertCustomMeasurementProtocolKeys,\n} from './measurementProtocolMapper';\nimport {IRuntimeEnvironment, BrowserRuntime, NodeJSRuntime, NoopRuntime} from './runtimeEnvironment';\nimport HistoryStore from '../history';\nimport {isApiKey} from './token';\nimport {isReactNative, ReactNativeRuntimeWarning} from '../react-native/react-native-utils';\nimport {doNotTrack} from '../donottrack';\nimport {NullStorage} from '../storage';\n\nexport const Version = 'v15';\n\nexport const Endpoints = {\n default: 'https://analytics.cloud.coveo.com/rest/ua',\n production: 'https://analytics.cloud.coveo.com/rest/ua',\n hipaa: 'https://analyticshipaa.cloud.coveo.com/rest/ua',\n};\n\nexport interface ClientOptions {\n token?: string;\n endpoint: string;\n version: string;\n runtimeEnvironment?: IRuntimeEnvironment;\n beforeSendHooks: AnalyticsClientSendEventHook[];\n afterSendHooks: AnalyticsClientSendEventHook[];\n preprocessRequest?: PreprocessAnalyticsRequest;\n}\n\nexport type AnalyticsClientSendEventHook = <TResult>(eventType: string, payload: any) => TResult | Promise<TResult>;\nexport type EventTypeConfig = {\n newEventType: EventType;\n variableLengthArgumentsNames?: string[];\n addVisitorIdParameter?: boolean;\n addClientIdParameter?: boolean;\n usesMeasurementProtocol?: boolean;\n};\n\nexport interface AnalyticsClient {\n getPayload(eventType: string, ...payload: VariableArgumentsPayload): Promise<any>;\n getParameters(eventType: string, ...payload: VariableArgumentsPayload): Promise<any>;\n sendEvent(eventType: string, ...payload: VariableArgumentsPayload): Promise<AnyEventResponse | void>;\n sendSearchEvent(request: SearchEventRequest): Promise<SearchEventResponse | void>;\n sendClickEvent(request: ClickEventRequest): Promise<ClickEventResponse | void>;\n sendCustomEvent(request: CustomEventRequest): Promise<CustomEventResponse | void>;\n sendViewEvent(request: ViewEventRequest): Promise<ViewEventResponse | void>;\n getVisit(): Promise<VisitResponse>;\n getHealth(): Promise<HealthResponse>;\n registerBeforeSendEventHook(hook: AnalyticsClientSendEventHook): void;\n registerAfterSendEventHook(hook: AnalyticsClientSendEventHook): void;\n addEventTypeMapping(eventType: string, eventConfig: EventTypeConfig): void;\n runtime: IRuntimeEnvironment;\n /**\n * @deprecated\n */\n readonly currentVisitorId: string;\n getCurrentVisitorId?(): Promise<string>; // TODO: v3 make required\n}\n\nexport interface BufferedRequest {\n eventType: EventType;\n payload: any;\n}\n\ntype ProcessPayloadStep = (currentPayload: any) => any;\ntype AsyncProcessPayloadStep = (currentPayload: any) => Promise<any>;\n\nexport function buildBaseUrl(endpoint = Endpoints.default, apiVersion = Version) {\n const endpointIsCoveoProxy = endpoint.indexOf('.cloud.coveo.com') !== -1;\n return `${endpoint}${endpointIsCoveoProxy ? '' : '/rest'}/${apiVersion}`;\n}\n\nexport class CoveoAnalyticsClient implements AnalyticsClient, VisitorIdProvider {\n private get defaultOptions(): ClientOptions {\n return {\n endpoint: Endpoints.default,\n token: '',\n version: Version,\n beforeSendHooks: [],\n afterSendHooks: [],\n };\n }\n\n public runtime: IRuntimeEnvironment;\n private visitorId: string;\n private bufferedRequests: BufferedRequest[];\n private beforeSendHooks: AnalyticsClientSendEventHook[];\n private afterSendHooks: AnalyticsClientSendEventHook[];\n private eventTypeMapping: {[name: string]: EventTypeConfig};\n private options: ClientOptions;\n\n constructor(opts: Partial<ClientOptions>) {\n if (!opts) {\n throw new Error('You have to pass options to this constructor');\n }\n\n this.options = {\n ...this.defaultOptions,\n ...opts,\n };\n\n this.visitorId = '';\n this.bufferedRequests = [];\n this.beforeSendHooks = [enhanceViewEvent, addDefaultValues].concat(this.options.beforeSendHooks);\n this.afterSendHooks = this.options.afterSendHooks;\n this.eventTypeMapping = {};\n\n const clientsOptions: IAnalyticsClientOptions = {\n baseUrl: this.baseUrl,\n token: this.options.token,\n visitorIdProvider: this,\n preprocessRequest: this.options.preprocessRequest,\n };\n\n this.runtime = this.options.runtimeEnvironment || this.initRuntime(clientsOptions);\n if (doNotTrack()) {\n this.clear();\n this.runtime.storage = new NullStorage();\n }\n }\n\n private initRuntime(clientsOptions: IAnalyticsClientOptions) {\n if (hasWindow() && hasDocument()) {\n return new BrowserRuntime(clientsOptions, () => {\n const copy = [...this.bufferedRequests];\n this.bufferedRequests = [];\n return copy;\n });\n } else if (isReactNative()) {\n console.warn(ReactNativeRuntimeWarning);\n }\n return new NodeJSRuntime(clientsOptions);\n }\n\n private get storage() {\n return this.runtime.storage;\n }\n\n private async determineVisitorId() {\n try {\n return (await this.storage.getItem('visitorId')) || uuidv4();\n } catch (err) {\n console.log(\n 'Could not get visitor ID from the current runtime environment storage. Using a random ID instead.',\n err\n );\n return uuidv4();\n }\n }\n\n async getCurrentVisitorId() {\n if (!this.visitorId) {\n const id = await this.determineVisitorId();\n await this.setCurrentVisitorId(id);\n }\n return this.visitorId;\n }\n\n async setCurrentVisitorId(visitorId: string) {\n this.visitorId = visitorId;\n await this.storage.setItem('visitorId', visitorId);\n }\n\n async getParameters(eventType: EventType | string, ...payload: VariableArgumentsPayload) {\n return await this.resolveParameters(eventType, ...payload);\n }\n\n async getPayload(eventType: EventType | string, ...payload: VariableArgumentsPayload) {\n const parametersToSend = await this.resolveParameters(eventType, ...payload);\n return await this.resolvePayloadForParameters(eventType, parametersToSend);\n }\n\n /**\n * @deprecated Synchronous method is deprecated, use getCurrentVisitorId instead. This method will NOT work with react-native.\n */\n get currentVisitorId() {\n const visitorId = this.visitorId || this.storage.getItem('visitorId');\n if (typeof visitorId !== 'string') {\n this.setCurrentVisitorId(uuidv4());\n }\n return this.visitorId;\n }\n\n /**\n * @deprecated Synchronous method is deprecated, use setCurrentVisitorId instead. This method will NOT work with react-native.\n */\n set currentVisitorId(visitorId: string) {\n this.visitorId = visitorId;\n this.storage.setItem('visitorId', visitorId);\n }\n\n async resolveParameters(eventType: EventType | string, ...payload: VariableArgumentsPayload) {\n const {\n variableLengthArgumentsNames = [],\n addVisitorIdParameter = false,\n usesMeasurementProtocol = false,\n addClientIdParameter = false,\n } = this.eventTypeMapping[eventType] || {};\n\n const processVariableArgumentNamesStep: ProcessPayloadStep = (currentPayload) =>\n variableLengthArgumentsNames.length > 0\n ? this.parseVariableArgumentsPayload(variableLengthArgumentsNames, currentPayload)\n : currentPayload[0];\n const addVisitorIdStep: AsyncProcessPayloadStep = async (currentPayload) => ({\n ...currentPayload,\n visitorId: addVisitorIdParameter ? await this.getCurrentVisitorId() : '',\n });\n const addClientIdStep: AsyncProcessPayloadStep = async (currentPayload) => {\n if (addClientIdParameter) {\n return {\n ...currentPayload,\n clientId: await this.getCurrentVisitorId(),\n };\n }\n return currentPayload;\n };\n const setAnonymousUserStep: ProcessPayloadStep = (currentPayload) =>\n usesMeasurementProtocol ? this.ensureAnonymousUserWhenUsingApiKey(currentPayload) : currentPayload;\n const processBeforeSendHooksStep: AsyncProcessPayloadStep = (currentPayload) =>\n this.beforeSendHooks.reduce(async (promisePayload, current) => {\n const payload = await promisePayload;\n return await current(eventType, payload);\n }, currentPayload);\n\n const parametersToSend = await [\n processVariableArgumentNamesStep,\n addVisitorIdStep,\n addClientIdStep,\n setAnonymousUserStep,\n processBeforeSendHooksStep,\n ].reduce(async (payloadPromise, step) => {\n const payload = await payloadPromise;\n return await step(payload);\n }, Promise.resolve(payload));\n\n return parametersToSend;\n }\n\n async resolvePayloadForParameters(eventType: EventType | string, parameters: any) {\n const {usesMeasurementProtocol = false} = this.eventTypeMapping[eventType] || {};\n\n const cleanPayloadStep: ProcessPayloadStep = (currentPayload) =>\n this.removeEmptyPayloadValues(currentPayload, eventType);\n const validateParams: ProcessPayloadStep = (currentPayload) => this.validateParams(currentPayload);\n const processMeasurementProtocolConversionStep: ProcessPayloadStep = (currentPayload) =>\n usesMeasurementProtocol ? convertKeysToMeasurementProtocol(currentPayload) : currentPayload;\n const removeUnknownParameters: ProcessPayloadStep = (currentPayload) =>\n usesMeasurementProtocol ? this.removeUnknownParameters(currentPayload) : currentPayload;\n const processCustomParameters: ProcessPayloadStep = (currentPayload) =>\n usesMeasurementProtocol ? this.processCustomParameters(currentPayload) : currentPayload;\n\n const payloadToSend = await [\n cleanPayloadStep,\n validateParams,\n processMeasurementProtocolConversionStep,\n removeUnknownParameters,\n processCustomParameters,\n ].reduce(async (payloadPromise, step) => {\n const payload = await payloadPromise;\n return await step(payload);\n }, Promise.resolve(parameters));\n\n return payloadToSend;\n }\n\n async sendEvent(\n eventType: EventType | string,\n ...payload: VariableArgumentsPayload\n ): Promise<AnyEventResponse | void> {\n const {newEventType: eventTypeToSend = eventType as EventType} = this.eventTypeMapping[eventType] || {};\n\n const parametersToSend = await this.resolveParameters(eventType, ...payload);\n const payloadToSend = await this.resolvePayloadForParameters(eventType, parametersToSend);\n\n this.bufferedRequests.push({\n eventType: eventTypeToSend,\n payload: payloadToSend,\n });\n\n await Promise.all(this.afterSendHooks.map((hook) => hook(eventType, parametersToSend)));\n\n await this.deferExecution();\n\n return await this.sendFromBufferWithFetch();\n }\n\n private deferExecution(): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, 0));\n }\n\n private async sendFromBufferWithFetch(): Promise<AnyEventResponse | void> {\n const popped = this.bufferedRequests.shift();\n if (popped) {\n const {eventType, payload} = popped;\n return this.runtime.client.sendEvent(eventType, payload);\n }\n }\n\n public clear() {\n this.storage.removeItem('visitorId');\n const store = new HistoryStore();\n store.clear();\n }\n\n public deleteHttpOnlyVisitorId() {\n this.runtime.client.deleteHttpCookieVisitorId();\n }\n\n async sendSearchEvent(request: SearchEventRequest): Promise<SearchEventResponse | void> {\n return this.sendEvent(EventType.search, request);\n }\n\n async sendClickEvent(request: ClickEventRequest): Promise<ClickEventResponse | void> {\n return this.sendEvent(EventType.click, request);\n }\n\n async sendCustomEvent(request: CustomEventRequest): Promise<CustomEventResponse | void> {\n return this.sendEvent(EventType.custom, request);\n }\n\n async sendViewEvent(request: ViewEventRequest): Promise<ViewEventResponse | void> {\n return this.sendEvent(EventType.view, request);\n }\n\n async getVisit(): Promise<VisitResponse> {\n // deepcode ignore Ssrf: url is supplied by script owner\n const response = await fetch(`${this.baseUrl}/analytics/visit`);\n const visit = (await response.json()) as VisitResponse;\n this.visitorId = visit.visitorId;\n return visit;\n }\n\n async getHealth(): Promise<HealthResponse> {\n // deepcode ignore Ssrf: url is supplied by script owner\n const response = await fetch(`${this.baseUrl}/analytics/monitoring/health`);\n return (await response.json()) as HealthResponse;\n }\n\n registerBeforeSendEventHook(hook: AnalyticsClientSendEventHook): void {\n this.beforeSendHooks.push(hook);\n }\n\n registerAfterSendEventHook(hook: AnalyticsClientSendEventHook): void {\n this.afterSendHooks.push(hook);\n }\n\n addEventTypeMapping(eventType: string, eventConfig: EventTypeConfig): void {\n this.eventTypeMapping[eventType] = eventConfig;\n }\n\n private parseVariableArgumentsPayload(fieldsOrder: string[], payload: VariableArgumentsPayload) {\n const parsedArguments: {[name: string]: any} = {};\n for (let i = 0, length = payload.length; i < length; i++) {\n const currentArgument = payload[i];\n if (typeof currentArgument === 'string') {\n parsedArguments[fieldsOrder[i]] = currentArgument;\n } else if (typeof currentArgument === 'object') {\n // If the argument is an object, it is considered the last argument of the chain. Its values should be returned as-is.\n return {\n ...parsedArguments,\n ...currentArgument,\n };\n }\n }\n return parsedArguments;\n }\n\n private isKeyAllowedEmpty(evtType: string, key: string) {\n const keysThatCanBeEmpty: Record<string, string[]> = {\n [EventType.search]: ['queryText'],\n };\n\n const match = keysThatCanBeEmpty[evtType] || [];\n return match.indexOf(key) !== -1;\n }\n\n private removeEmptyPayloadValues(payload: IRequestPayload, eventType: string): IRequestPayload {\n const isNotEmptyValue = (value: any) => typeof value !== 'undefined' && value !== null && value !== '';\n return Object.keys(payload)\n .filter((key) => this.isKeyAllowedEmpty(eventType, key) || isNotEmptyValue(payload[key]))\n .reduce(\n (newPayload, key) => ({\n ...newPayload,\n [key]: payload[key],\n }),\n {}\n );\n }\n\n private removeUnknownParameters(payload: IRequestPayload): IRequestPayload {\n const newPayload = Object.keys(payload)\n .filter((key) => {\n if (isMeasurementProtocolKey(key)) {\n return true;\n } else {\n console.log(key, 'is not processed by coveoua');\n }\n })\n .reduce(\n (newPayload, key) => ({\n ...newPayload,\n [key]: payload[key],\n }),\n {}\n );\n return newPayload;\n }\n\n private processCustomParameters(payload: IRequestPayload): IRequestPayload {\n const {custom, ...rest} = payload;\n\n const lowercasedCustom = this.lowercaseKeys(custom);\n\n const newPayload = convertCustomMeasurementProtocolKeys(rest);\n\n return {\n ...lowercasedCustom,\n ...newPayload,\n };\n }\n\n private lowercaseKeys(custom: any) {\n const keys = Object.keys(custom || {});\n\n return keys.reduce(\n (all, key) => ({\n ...all,\n [key.toLowerCase()]: custom[key],\n }),\n {}\n );\n }\n\n private validateParams(payload: IRequestPayload): IRequestPayload {\n const {anonymizeIp, ...rest} = payload;\n if (anonymizeIp !== undefined) {\n if (['0', 'false', 'undefined', 'null', '{}', '[]', ''].indexOf(`${anonymizeIp}`.toLowerCase()) == -1) {\n rest['anonymizeIp'] = 1;\n }\n }\n return rest;\n }\n\n private ensureAnonymousUserWhenUsingApiKey(payload: IRequestPayload): IRequestPayload {\n const {userId, ...rest} = payload;\n if (isApiKey(this.options.token) && !userId) {\n rest['userId'] = 'anonymous';\n return rest;\n } else {\n return payload;\n }\n }\n\n private get baseUrl(): string {\n return buildBaseUrl(this.options.endpoint, this.options.version);\n }\n}\n\nexport default CoveoAnalyticsClient;\n","import {\n CategoryFacetMetadata,\n FacetBaseMeta,\n FacetMetadata,\n FacetRangeMetadata,\n FacetSortMeta,\n InterfaceChangeMetadata,\n PagerMetadata,\n QueryErrorMeta,\n ResultsSortMetadata,\n StaticFilterToggleValueMetadata,\n} from '../searchPage/searchPageEvents';\n\nexport enum InsightEvents {\n /**\n * Identifies the search event that gets logged when the query context is updated as a result of updating one of the case context fields.\n */\n contextChanged = 'contextChanged',\n /**\n * Identifies the event that gets logged when the user opens the full search page from the insight panel.\n */\n expandToFullUI = 'expandToFullUI',\n}\n\nexport interface CaseMetadata {\n caseId?: string;\n caseNumber?: string;\n caseContext?: Record<string, string>;\n}\n\nexport interface ExpandToFullUIMetadata extends CaseMetadata {\n fullSearchComponentName: string;\n triggeredBy: string;\n}\n\nexport interface InsightInterfaceChangeMetadata extends InterfaceChangeMetadata, CaseMetadata {}\n\nexport interface InsightFacetMetadata extends FacetMetadata, CaseMetadata {}\n\nexport interface InsightStaticFilterToggleValueMetadata extends StaticFilterToggleValueMetadata, CaseMetadata {}\n\nexport interface InsightFacetRangeMetadata extends FacetRangeMetadata, CaseMetadata {}\n\nexport interface InsightCategoryFacetMetadata extends CategoryFacetMetadata, CaseMetadata {}\n\nexport interface InsightFacetSortMeta extends FacetSortMeta, CaseMetadata {}\n\nexport interface InsightFacetBaseMeta extends FacetBaseMeta, CaseMetadata {}\n\nexport interface InsightQueryErrorMeta extends QueryErrorMeta, CaseMetadata {}\n\nexport interface InsightPagerMetadata extends PagerMetadata, CaseMetadata {}\n\nexport interface InsightResultsSortMetadata extends ResultsSortMetadata, CaseMetadata {}\n","import {DocumentInformation, FacetStateRequest} from '../events';\nimport {InsightEvents} from '../insight/insightEvents';\n\nexport enum SearchPageEvents {\n /**\n * Identifies the search event that gets logged when the initial query is performed as a result of loading a search interface.\n */\n interfaceLoad = 'interfaceLoad',\n /**\n * Identifies the search event that gets logged when a new tab is selected in the search interface.\n */\n interfaceChange = 'interfaceChange',\n /**\n * Identifies the search event that gets logged when `enableAutoCorrection: true` and the query is automatically corrected.\n */\n didyoumeanAutomatic = 'didyoumeanAutomatic',\n /**\n * Identifies the search event that gets logged when the query suggestion with the corrected term is selected and successfully updates the query.\n */\n didyoumeanClick = 'didyoumeanClick',\n /**\n * Identifies the search event that gets logged when a sorting method is selected.\n */\n resultsSort = 'resultsSort',\n /**\n * Identifies the search event that gets logged when a submit button is selected on a search box.\n */\n searchboxSubmit = 'searchboxSubmit',\n /**\n * Identifies the search event that gets logged when a clear button is selected on a search box.\n */\n searchboxClear = 'searchboxClear',\n /**\n * The search-as-you-type event that gets logged when a query is automatically generated, and results are displayed while a user is entering text in the search box before they voluntarily submit the query.\n */\n searchboxAsYouType = 'searchboxAsYouType',\n /**\n * The event that gets logged when a breadcrumb facet is selected and the query is updated.\n */\n breadcrumbFacet = 'breadcrumbFacet',\n /**\n * Identifies the search event that gets logged when the event to clear the current breadcrumbs is triggered.\n */\n breadcrumbResetAll = 'breadcrumbResetAll',\n /**\n * Identifies the click event that gets logged when the Quick View element is selected and a Quick View modal of the document is displayed.\n */\n documentQuickview = 'documentQuickview',\n /**\n * Identifies the click event that gets logged when a user clicks on a search result to open an item.\n */\n documentOpen = 'documentOpen',\n /**\n * Identifies the search event that gets logged when a user clicks a query suggestion based on the usage analytics recorded queries.\n */\n omniboxAnalytics = 'omniboxAnalytics',\n /**\n * Identifies the search event that gets logged when a suggested search query is selected from a standalone searchbox.\n */\n omniboxFromLink = 'omniboxFromLink',\n /**\n * Identifies the search event that gets logged when the search page loads with a query, such as when a user clicks a link pointing to a search results page with a query or enters a query in a standalone search box that points to a search page.\n */\n searchFromLink = 'searchFromLink',\n /**\n * Identifies the custom event that gets logged when a user action triggers a notification set in the effective query pipeline on the search page.\n */\n triggerNotify = 'notify',\n /**\n * Identifies the custom event that gets logged when a user action executes a JavaScript function set in the effective query pipeline on the search page.\n */\n triggerExecute = 'execute',\n /**\n * Identifies the custom event that gets logged when a user action triggers a new query set in the effective query pipeline on the search page.\n */\n triggerQuery = 'query',\n /**\n * Identifies the custom event that gets logged when a user undoes a query set in the effective query pipeline on the search page.\n */\n undoTriggerQuery = 'undoQuery',\n /**\n * Identifies the custom event that gets logged when a user action redirects them to a URL set in the effective query pipeline on the search page.\n */\n triggerRedirect = 'redirect',\n /**\n * Identifies the custom event that gets logged when the Results per page component is selected.\n */\n pagerResize = 'pagerResize',\n /**\n * Identifies the custom event that gets logged when a page number is selected and more items are loaded.\n */\n pagerNumber = 'pagerNumber',\n /**\n * Identifies the custom event that gets logged when the Next Page link is selected and more items are loaded.\n */\n pagerNext = 'pagerNext',\n /**\n * Identifies the custom event that gets logged when the Previous Page link is selected and more items are loaded.\n */\n pagerPrevious = 'pagerPrevious',\n /**\n * Identifies the custom event that gets logged when the user scrolls to the bottom of the item page and more results are loaded.\n */\n pagerScrolling = 'pagerScrolling',\n /**\n * Identifies the search event that gets logged when the clearing all selected values of a static filter.\n */\n staticFilterClearAll = 'staticFilterClearAll',\n /**\n * Identifies the search event that gets logged when a static filter check box is selected and the query is updated.\n */\n staticFilterSelect = 'staticFilterSelect',\n /**\n * Identifies the search event that gets logged when a static filter check box is deselected and the query is updated.\n */\n staticFilterDeselect = 'staticFilterDeselect',\n /**\n * Identifies the search event that gets logged when the Clear Facet button is selected.\n */\n facetClearAll = 'facetClearAll',\n /**\n * Identifies the custom event that gets logged when a query is being typed into the facet search box.\n */\n facetSearch = 'facetSearch',\n /**\n * Identifies the search event that gets logged when a facet check box is selected and the query is updated.\n */\n facetSelect = 'facetSelect',\n /**\n * Identifies the search event that gets logged when all filters on a facet are selected.\n */\n facetSelectAll = 'facetSelectAll',\n /**\n * Identifies the search event that gets logged when a facet check box is deselected and the query is updated.\n */\n facetDeselect = 'facetDeselect',\n /**\n * Identifies the search event that gets logged when a user clicks a facet value to filter out results containing the facet value.\n */\n facetExclude = 'facetExclude',\n /**\n * Identifies the search event that gets logged when a user clicks a facet value to not filter out results containing the facet value.\n */\n facetUnexclude = 'facetUnexclude',\n /**\n * Identifies the search event that gets logged when the sort criteria on a facet is updated.\n */\n facetUpdateSort = 'facetUpdateSort',\n /**\n * The custom event that gets logged when an end-user expands a facet to see additional values.\n */\n facetShowMore = 'showMoreFacetResults',\n /**\n * The custom event that gets logged when an end-user collapses a facet to see less values.\n */\n facetShowLess = 'showLessFacetResults',\n /**\n * Identifies the custom event that gets logged when a user query encounters an error during execution.\n */\n queryError = 'query',\n /**\n * Identifies the search and custom event that gets logged when a user clicks the Go Back link after an error page.\n */\n queryErrorBack = 'errorBack',\n /**\n * Identifies the search and custom event that gets logged when a user clears the query box after an error page.\n */\n queryErrorClear = 'errorClearQuery',\n /**\n * Identifies the search and custom event that gets logged when a user clicks the Retry link after an error page.\n */\n queryErrorRetry = 'errorRetry',\n /**\n * Identifies the custom event that gets logged when a user performs a query that returns recommendations in the Recommendations panel.\n */\n recommendation = 'recommendation',\n /**\n * Identifies the search event that gets logged when a user action (that is not a query) reloads the Recommendations panel with new recommendations.\n */\n recommendationInterfaceLoad = 'recommendationInterfaceLoad',\n /**\n * Identifies the click event that gets logged when a user clicks a recommendation in the Recommendations panel.\n */\n recommendationOpen = 'recommendationOpen',\n /**\n * Identifies the custom event that gets logged when a user identifies a smart snippet answer as relevant.\n */\n likeSmartSnippet = 'likeSmartSnippet',\n /**\n * Identifies the custom event that gets logged when a user identifies a smart snippet answer as irrelevant.\n */\n dislikeSmartSnippet = 'dislikeSmartSnippet',\n /**\n * Identifies the custom event that gets logged when a user expand a smart snippet answer.\n */\n expandSmartSnippet = 'expandSmartSnippet',\n /**\n * Identifies the custom event that gets logged when a user collapse a smart snippet answer.\n */\n collapseSmartSnippet = 'collapseSmartSnippet',\n /**\n * Identifies the custom event that gets logged when a user open a smart snippet explanation modal for feedback.\n */\n openSmartSnippetFeedbackModal = 'openSmartSnippetFeedbackModal',\n /**\n * Identifies the custom event that gets logged when a user close a smart snippet explanation modal for feedback.\n */\n closeSmartSnippetFeedbackModal = 'closeSmartSnippetFeedbackModal',\n /**\n * Identifies the custom event that gets logged when a user sends an explanation for a smart snippet irrelevant answer.\n */\n sendSmartSnippetReason = 'sendSmartSnippetReason',\n /**\n * Identifies the custom event that gets logged when a snippet suggestion for a related question is expanded.\n */\n expandSmartSnippetSuggestion = 'expandSmartSnippetSuggestion',\n /**\n * Identifies the custom event that gets logged when a snippet suggestion for a related question is collapsed.\n */\n collapseSmartSnippetSuggestion = 'collapseSmartSnippetSuggestion',\n /**\n * Identifies the custom event that gets logged when the user presses \"show more\" on a snippet suggestion for a related question.\n *\n * @deprecated\n */\n showMoreSmartSnippetSuggestion = 'showMoreSmartSnippetSuggestion',\n /**\n * Identifies the custom event that gets logged when the user presses \"show less\" on a snippet suggestion for a related question.\n *\n * @deprecated\n */\n showLessSmartSnippetSuggestion = 'showLessSmartSnippetSuggestion',\n /**\n * Identifies the custom event that gets logged when a user clicks on the source of an answer in a smart snippet.\n */\n openSmartSnippetSource = 'openSmartSnippetSource',\n /**\n * Identifies the custom event that gets logged when a user clicks on the source of a snippet suggestion for a related question.\n */\n openSmartSnippetSuggestionSource = 'openSmartSnippetSuggestionSource',\n /**\n * Identifies the custom event that gets logged when a user clicks on a link in the answer of a smart snippet.\n */\n openSmartSnippetInlineLink = 'openSmartSnippetInlineLink',\n /**\n * Identifies the custom event that gets logged when a user clicks on a link in the snippet suggestion for a related question.\n */\n openSmartSnippetSuggestionInlineLink = 'openSmartSnippetSuggestionInlineLink',\n /**\n * Identifies the search event that gets logged when a recent queries list item gets clicked.\n */\n recentQueryClick = 'recentQueriesClick',\n /**\n * Identifies the custom event that gets logged when a recent queries list gets cleared.\n */\n clearRecentQueries = 'clearRecentQueries',\n /**\n * Identifies the custom event that gets logged when a recently clicked results list item gets clicked.\n */\n recentResultClick = 'recentResultClick',\n /**\n * Identifies the custom event that gets logged when a recently clicked results list gets cleared.\n */\n clearRecentResults = 'clearRecentResults',\n /**\n * Identifies the search event that gets logged when a user clicks the Cancel last action link when no results are returned following their last action.\n */\n noResultsBack = 'noResultsBack',\n /**\n * Identifies the click event that gets logged when a user clicks the Show More link under a search result that support the folding component.\n */\n showMoreFoldedResults = 'showMoreFoldedResults',\n /**\n * Identifies the custom event that gets logged when a user clicks the Show Less link under a search result that support the folding component.\n */\n showLessFoldedResults = 'showLessFoldedResults',\n}\n\nexport const CustomEventsTypes: Partial<Record<SearchPageEvents | InsightEvents, string>> = {\n [SearchPageEvents.triggerNotify]: 'queryPipelineTriggers',\n [SearchPageEvents.triggerExecute]: 'queryPipelineTriggers',\n [SearchPageEvents.triggerQuery]: 'queryPipelineTriggers',\n [SearchPageEvents.triggerRedirect]: 'queryPipelineTriggers',\n [SearchPageEvents.queryError]: 'errors',\n [SearchPageEvents.queryErrorBack]: 'errors',\n [SearchPageEvents.queryErrorClear]: 'errors',\n [SearchPageEvents.queryErrorRetry]: 'errors',\n [SearchPageEvents.pagerNext]: 'getMoreResults',\n [SearchPageEvents.pagerPrevious]: 'getMoreResults',\n [SearchPageEvents.pagerNumber]: 'getMoreResults',\n [SearchPageEvents.pagerResize]: 'getMoreResults',\n [SearchPageEvents.pagerScrolling]: 'getMoreResults',\n [SearchPageEvents.facetSearch]: 'facet',\n [SearchPageEvents.facetShowLess]: 'facet',\n [SearchPageEvents.facetShowMore]: 'facet',\n [SearchPageEvents.recommendation]: 'recommendation',\n [SearchPageEvents.likeSmartSnippet]: 'smartSnippet',\n [SearchPageEvents.dislikeSmartSnippet]: 'smartSnippet',\n [SearchPageEvents.expandSmartSnippet]: 'smartSnippet',\n [SearchPageEvents.collapseSmartSnippet]: 'smartSnippet',\n [SearchPageEvents.openSmartSnippetFeedbackModal]: 'smartSnippet',\n [SearchPageEvents.closeSmartSnippetFeedbackModal]: 'smartSnippet',\n [SearchPageEvents.sendSmartSnippetReason]: 'smartSnippet',\n [SearchPageEvents.expandSmartSnippetSuggestion]: 'smartSnippetSuggestions',\n [SearchPageEvents.collapseSmartSnippetSuggestion]: 'smartSnippetSuggestions',\n [SearchPageEvents.showMoreSmartSnippetSuggestion]: 'smartSnippetSuggestions',\n [SearchPageEvents.showLessSmartSnippetSuggestion]: 'smartSnippetSuggestions',\n [SearchPageEvents.clearRecentQueries]: 'recentQueries',\n [SearchPageEvents.recentResultClick]: 'recentlyClickedDocuments',\n [SearchPageEvents.clearRecentResults]: 'recentlyClickedDocuments',\n [SearchPageEvents.showLessFoldedResults]: 'folding',\n [InsightEvents.expandToFullUI]: 'interface',\n};\n\nexport interface StaticFilterMetadata {\n staticFilterId: string;\n}\n\nexport interface StaticFilterToggleValueMetadata extends StaticFilterMetadata {\n staticFilterValue: StaticFilterValueMetadata;\n}\n\ninterface StaticFilterValueMetadata {\n caption: string;\n expression: string;\n}\n\nexport interface FacetMetadata {\n facetId: string;\n facetField: string;\n facetValue: string;\n facetTitle: string;\n}\n\nexport type FacetStateMetadata = FacetStateRequest;\nexport interface FacetRangeMetadata extends Omit<FacetMetadata, 'facetValue'> {\n facetRangeStart: string;\n facetRangeEnd: string;\n facetRangeEndInclusive: boolean;\n}\n\nexport interface CategoryFacetMetadata {\n categoryFacetId: string;\n categoryFacetField: string;\n categoryFacetPath: string[];\n categoryFacetTitle: string;\n}\n\nexport interface OmniboxSuggestionsMetadata {\n suggestionRanking: number;\n partialQueries: string | string[];\n suggestions: string | string[];\n partialQuery: string;\n querySuggestResponseId: string;\n}\n\nexport interface DocumentIdentifier {\n contentIDKey: string;\n contentIDValue: string;\n}\n\nexport interface InterfaceChangeMetadata {\n interfaceChangeTo: string;\n}\n\nexport interface ResultsSortMetadata {\n resultsSortBy: string;\n}\n\nexport interface TriggerNotifyMetadata {\n notification: string;\n}\n\nexport interface TriggerExecuteMetadata {\n executed: string;\n}\n\nexport interface UndoTriggerRedirectMetadata {\n undoneQuery: string;\n}\n\nexport interface TriggerRedirectMetadata {\n redirectedTo: string;\n}\n\nexport interface PagerResizeMetadata {\n currentResultsPerPage: number;\n}\n\nexport interface PagerMetadata {\n pagerNumber: number;\n}\n\nexport interface FacetBaseMeta {\n facetId: string;\n facetField: string;\n facetTitle: string;\n}\n\nexport interface FacetMetadata extends FacetBaseMeta {\n facetValue: string;\n}\n\nexport interface FacetRangeMetadata extends FacetBaseMeta {\n facetRangeStart: string;\n facetRangeEnd: string;\n}\n\nexport interface FacetSortMeta extends FacetBaseMeta {\n criteria: string;\n}\n\nexport interface QueryErrorMeta {\n query: string;\n aq: string;\n cq: string;\n dq: string;\n errorType: string;\n errorMessage: string;\n}\n\nexport type SmartSnippetFeedbackReason = 'does_not_answer' | 'partially_answers' | 'was_not_a_question' | 'other';\n\nexport interface SmartSnippetSuggestionMeta {\n question: string;\n answerSnippet: string;\n documentId: SmartSnippetDocumentIdentifier;\n}\n\nexport interface SmartSnippetLinkMeta {\n linkText: string;\n linkURL: string;\n}\n\nexport interface SmartSnippetDocumentIdentifier {\n contentIdKey: string;\n contentIdValue: string;\n}\n\nexport type PartialDocumentInformation = Omit<DocumentInformation, 'actionCause' | 'searchQueryUid'>;\n","export const ReactNativeRuntimeWarning = `\n We've detected you're using React Native but have not provided the corresponding runtime, \n for an optimal experience please use the \"coveo.analytics/react-native\" subpackage.\n Follow the Readme on how to set it up: https://github.com/coveo/coveo.analytics.js#using-react-native\n `;\n\nexport function isReactNative() {\n return typeof navigator != 'undefined' && navigator.product == 'ReactNative';\n}\n","const API_KEY_PREFIX = 'xx';\n\nexport const isApiKey = (token?: string) => token?.startsWith(API_KEY_PREFIX) || false;\n","export const getFormattedLocation = (location: Location) =>\n `${location.protocol}//${location.hostname}${\n location.pathname.indexOf('/') === 0 ? location.pathname : `/${location.pathname}`\n }${location.search}`;\n","import {AnalyticsClient} from '../client/analytics';\nimport {uuidv4} from '../client/crypto';\nimport {getFormattedLocation} from '../client/location';\nimport {UAPluginOptions} from '../coveoua/plugins';\n\ntype PluginWithId = {\n readonly Id: string;\n};\n\nexport type PluginClass = typeof BasePlugin & PluginWithId;\n\nexport const BasePluginEventTypes = {\n pageview: 'pageview',\n event: 'event',\n};\n\nexport type PluginOptions = {client: AnalyticsClient; uuidGenerator?: typeof uuidv4};\n\nexport abstract class BasePlugin {\n protected client: AnalyticsClient;\n protected uuidGenerator: typeof uuidv4;\n protected action?: string;\n protected actionData: {[name: string]: string} = {};\n private pageViewId: string;\n private nextPageViewId: string;\n private hasSentFirstPageView?: boolean;\n private currentLocation: string;\n private lastReferrer: string;\n\n constructor({client, uuidGenerator = uuidv4}: PluginOptions) {\n this.client = client;\n this.uuidGenerator = uuidGenerator;\n this.pageViewId = uuidGenerator();\n this.nextPageViewId = this.pageViewId;\n this.currentLocation = getFormattedLocation(window.location);\n this.lastReferrer = document.referrer;\n\n this.addHooks();\n }\n\n protected abstract addHooks(): void;\n protected abstract clearPluginData(): void;\n\n public setAction(action: string, options?: any) {\n this.action = action;\n this.actionData = options;\n }\n\n public clearData() {\n this.clearPluginData();\n this.action = undefined;\n this.actionData = {};\n }\n\n public getLocationInformation(eventType: string, payload: any) {\n return {\n hitType: eventType,\n ...this.getNextValues(eventType, payload),\n };\n }\n\n public updateLocationInformation(eventType: string, payload: any) {\n this.updateLocationForNextPageView(eventType, payload);\n }\n\n public getDefaultContextInformation(eventType: string) {\n const documentContext = {\n title: document.title,\n encoding: document.characterSet,\n };\n const screenContext = {\n screenResolution: `${screen.width}x${screen.height}`,\n screenColor: `${screen.colorDepth}-bit`,\n };\n const navigatorContext = {\n language: navigator.language,\n userAgent: navigator.userAgent,\n };\n const eventContext = {\n time: Date.now().toString(),\n eventId: this.uuidGenerator(),\n };\n return {\n ...eventContext,\n ...screenContext,\n ...navigatorContext,\n ...documentContext,\n };\n }\n\n private updateLocationForNextPageView(eventType: string, payload: any) {\n const {pageViewId, referrer, location} = this.getNextValues(eventType, payload);\n\n this.lastReferrer = referrer;\n this.pageViewId = pageViewId;\n this.currentLocation = location;\n\n if (eventType === BasePluginEventTypes.pageview) {\n this.nextPageViewId = this.uuidGenerator();\n this.hasSentFirstPageView = true;\n }\n }\n\n /*\n When calling getPayload or getParameters, we need to return what would be sent by the API without updating our internal reference. \n For instance, if you getPayload(\"pageview\"), we want to return the same payload as if you did coveoua(\"send\", \"pageview\").\n */\n private getNextValues(eventType: string, payload: any) {\n /*\n When sending a pageview, we need to generate a new pageview ID.\n For instance, with the following sequence: 1. pageview, 2. event, 3. pageview, 4. event, 1 and 2 will have the pageviewid, whereas 3 and 4 will have a different pageviewid.\n We pre-generate the \"nextPageViewId\" in case you send the following sequence: 1. pageview, 2. event, 3. getPayload, 4. pageview. This ensures that 3 and 4 have the same pageviewid.\n We applied the same logic to the referrer and the location.\n */\n return {\n pageViewId: eventType === BasePluginEventTypes.pageview ? this.nextPageViewId : this.pageViewId,\n referrer:\n eventType === BasePluginEventTypes.pageview && this.hasSentFirstPageView\n ? this.currentLocation\n : this.lastReferrer,\n location:\n eventType === BasePluginEventTypes.pageview\n ? this.getCurrentLocationFromPayload(payload)\n : this.currentLocation,\n };\n }\n\n private getCurrentLocationFromPayload(payload: any) {\n if (!!payload.page) {\n const removeStartingSlash = (page: string) => page.replace(/^\\/?(.*)$/, '/$1');\n const extractHostnamePart = (location: string) => location.split('/').slice(0, 3).join('/');\n return `${extractHostnamePart(this.currentLocation)}${removeStartingSlash(payload.page)}`;\n } else {\n return getFormattedLocation(window.location);\n }\n }\n}\n","import {EventType} from '../events';\nimport {uuidv4} from '../client/crypto';\nimport {\n convertProductToMeasurementProtocol,\n convertImpressionListToMeasurementProtocol,\n} from '../client/measurementProtocolMapping/commerceMeasurementProtocolMapper';\nimport {BasePlugin, BasePluginEventTypes, PluginClass, PluginOptions} from './BasePlugin';\n\nexport const ECPluginEventTypes = {\n ...BasePluginEventTypes,\n};\n\nconst allECEventTypes = Object.keys(ECPluginEventTypes).map(\n (key) => ECPluginEventTypes[key as keyof typeof ECPluginEventTypes]\n);\n\n// From https://stackoverflow.com/a/49725198/497731\ntype RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> &\n {\n [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;\n }[Keys];\n\nexport type CustomValues = {\n [key: string]: string | number | boolean;\n};\n\nexport interface CoveoExtensionProperties {\n group?: string;\n}\n\nexport interface ProductProperties extends CoveoExtensionProperties {\n id?: string;\n name?: string;\n brand?: string;\n category?: string;\n variant?: string;\n price?: number;\n quantity?: number;\n coupon?: string;\n position?: number;\n custom?: CustomValues;\n}\n\nexport type Product = RequireAtLeastOne<ProductProperties, 'id' | 'name'>;\n\nexport interface ImpressionProperties extends CoveoExtensionProperties {\n id?: string;\n name?: string;\n list?: string;\n brand?: string;\n category?: string;\n variant?: string;\n position?: number;\n price?: number;\n custom?: CustomValues;\n}\n\nexport type Impression = RequireAtLeastOne<ImpressionProperties, 'id' | 'name'>;\nexport type BaseImpression = Omit<Impression, 'list'>;\nexport interface ImpressionList {\n listName?: string;\n impressions: BaseImpression[];\n}\n\nexport class ECPlugin extends BasePlugin {\n public static readonly Id = 'ec';\n private products: Product[] = [];\n private impressions: Impression[] = [];\n\n constructor({client, uuidGenerator = uuidv4}: PluginOptions) {\n super({client, uuidGenerator});\n }\n\n protected addHooks(): void {\n this.addHooksForPageView();\n this.addHooksForEvent();\n this.addHooksForECEvents();\n }\n\n addProduct(product: Product) {\n this.products.push(product);\n }\n\n addImpression(impression: Impression) {\n this.impressions.push(impression);\n }\n\n protected clearPluginData() {\n this.products = [];\n this.impressions = [];\n }\n\n private addHooksForECEvents() {\n this.client.registerBeforeSendEventHook((eventType, ...[payload]) => {\n return allECEventTypes.indexOf(eventType) !== -1 ? this.addECDataToPayload(eventType, payload) : payload;\n });\n this.client.registerAfterSendEventHook((eventType, ...[payload]) => {\n if (allECEventTypes.indexOf(eventType) !== -1) {\n this.updateLocationInformation(eventType, payload);\n }\n return payload;\n });\n }\n\n private addHooksForPageView() {\n this.client.addEventTypeMapping(ECPluginEventTypes.pageview, {\n newEventType: EventType.collect,\n variableLengthArgumentsNames: ['page'],\n addVisitorIdParameter: true,\n usesMeasurementProtocol: true,\n });\n }\n\n private addHooksForEvent() {\n this.client.addEventTypeMapping(ECPluginEventTypes.event, {\n newEventType: EventType.collect,\n variableLengthArgumentsNames: ['eventCategory', 'eventAction', 'eventLabel', 'eventValue'],\n addVisitorIdParameter: true,\n usesMeasurementProtocol: true,\n });\n }\n\n private addECDataToPayload(eventType: string, payload: any) {\n const ecPayload = {\n ...this.getLocationInformation(eventType, payload),\n ...this.getDefaultContextInformation(eventType),\n ...(this.action ? {action: this.action} : {}),\n ...(this.actionData || {}),\n };\n\n const productPayload = this.getProductPayload();\n const impressionPayload = this.getImpressionPayload();\n\n this.clearData();\n\n return {\n ...impressionPayload,\n ...productPayload,\n ...ecPayload,\n ...payload,\n };\n }\n\n private getProductPayload() {\n return this.products\n .map((product) => this.assureProductValidity(product))\n .reduce((newPayload, product, index) => {\n return {\n ...newPayload,\n ...convertProductToMeasurementProtocol(product, index),\n };\n }, {});\n }\n\n private getImpressionPayload() {\n const impressionsByList = this.getImpressionsByList();\n return impressionsByList\n .map(\n ({impressions, ...rest}) =>\n ({\n ...rest,\n impressions: impressions.map((baseImpression) =>\n this.assureBaseImpressionValidity(baseImpression)\n ),\n } as ImpressionList)\n )\n .reduce((newPayload, impressionList, index) => {\n return {\n ...newPayload,\n ...convertImpressionListToMeasurementProtocol(impressionList, index, 'pi'),\n };\n }, {});\n }\n\n private assureProductValidity(product: Product) {\n const {position, ...productRest} = product;\n if (position !== undefined && position < 1) {\n console.warn(\n `The position for product '${product.name || product.id}' must be greater ` + `than 0 when provided.`\n );\n\n return productRest;\n }\n\n return product;\n }\n\n private assureBaseImpressionValidity(baseImpression: BaseImpression) {\n const {position, ...baseImpressionRest} = baseImpression;\n if (position !== undefined && position < 1) {\n console.warn(\n `The position for impression '${baseImpression.name || baseImpression.id}'` +\n ` must be greater than 0 when provided.`\n );\n\n return baseImpressionRest;\n }\n\n return baseImpression;\n }\n\n private getImpressionsByList() {\n return this.impressions.reduce((lists, impression) => {\n const {list: listName, ...baseImpression} = impression;\n const list = lists.find((list) => list.listName === listName);\n if (list) {\n list.impressions.push(baseImpression);\n } else {\n lists.push({listName: listName, impressions: [baseImpression]});\n }\n return lists;\n }, [] as ImpressionList[]);\n }\n}\n\nexport const EC: PluginClass = ECPlugin;\n","import {EventType} from '../events';\nimport {uuidv4} from '../client/crypto';\nimport {convertTicketToMeasurementProtocol} from '../client/measurementProtocolMapping/serviceMeasurementProtocolMapper';\nimport {BasePlugin, BasePluginEventTypes, PluginClass, PluginOptions} from './BasePlugin';\n\nexport const SVCPluginEventTypes = {\n ...BasePluginEventTypes,\n};\n\nconst allSVCEventTypes = Object.keys(SVCPluginEventTypes).map(\n (key) => SVCPluginEventTypes[key as keyof typeof SVCPluginEventTypes]\n);\n\nexport type CustomValues = {\n [key: string]: string | number | boolean;\n};\n\nexport interface TicketProperties {\n id?: string;\n subject?: string;\n description?: string;\n category?: string;\n productId?: string;\n custom?: CustomValues;\n}\n\nexport type Ticket = TicketProperties;\n\nexport class SVCPlugin extends BasePlugin {\n public static readonly Id = 'svc';\n private ticket: Ticket = {};\n\n constructor({client, uuidGenerator = uuidv4}: PluginOptions) {\n super({client, uuidGenerator});\n }\n\n protected addHooks(): void {\n this.addHooksForEvent();\n this.addHooksForPageView();\n this.addHooksForSVCEvents();\n }\n\n setTicket(ticket: Ticket) {\n this.ticket = ticket;\n }\n\n protected clearPluginData() {\n this.ticket = {};\n }\n\n private addHooksForSVCEvents() {\n this.client.registerBeforeSendEventHook((eventType, ...[payload]) => {\n return allSVCEventTypes.indexOf(eventType) !== -1 ? this.addSVCDataToPayload(eventType, payload) : payload;\n });\n this.client.registerAfterSendEventHook((eventType, ...[payload]) => {\n if (allSVCEventTypes.indexOf(eventType) !== -1) {\n this.updateLocationInformation(eventType, payload);\n }\n return payload;\n });\n }\n\n private addHooksForPageView() {\n this.client.addEventTypeMapping(SVCPluginEventTypes.pageview, {\n newEventType: EventType.collect,\n variableLengthArgumentsNames: ['page'],\n addVisitorIdParameter: true,\n usesMeasurementProtocol: true,\n });\n }\n\n private addHooksForEvent() {\n this.client.addEventTypeMapping(SVCPluginEventTypes.event, {\n newEventType: EventType.collect,\n variableLengthArgumentsNames: ['eventCategory', 'eventAction', 'eventLabel', 'eventValue'],\n addVisitorIdParameter: true,\n usesMeasurementProtocol: true,\n });\n }\n\n private addSVCDataToPayload(eventType: string, payload: any) {\n const svcPayload = {\n ...this.getLocationInformation(eventType, payload),\n ...this.getDefaultContextInformation(eventType),\n ...(this.action ? {svcAction: this.action} : {}),\n ...(Object.keys(this.actionData ?? {}).length > 0 ? {svcActionData: this.actionData} : {}),\n };\n\n const ticketPayload = this.getTicketPayload();\n this.clearData();\n\n return {\n ...ticketPayload,\n ...svcPayload,\n ...payload,\n };\n }\n\n private getTicketPayload() {\n return convertTicketToMeasurementProtocol(this.ticket);\n }\n}\n\nexport const SVC: PluginClass = SVCPlugin;\n","import {PluginClass, PluginOptions, BasePlugin} from '../plugins/BasePlugin';\nimport {EC} from '../plugins/ec';\nimport {SVC} from '../plugins/svc';\n\nexport type UAPluginOptions = any[];\nexport type Plugin = BasePlugin & {[propName: string]: unknown};\n\nexport class Plugins {\n public static readonly DefaultPlugins: string[] = [EC.Id, SVC.Id];\n private registeredPluginsMap: Record<string, PluginClass> = {\n [EC.Id]: EC,\n [SVC.Id]: SVC,\n };\n private requiredPlugins: Record<string, BasePlugin> = {};\n\n require(name: string, options: PluginOptions): void {\n const pluginClass = this.registeredPluginsMap[name];\n if (!pluginClass) {\n throw new Error(\n `No plugin named \"${name}\" is currently registered. If you use a custom plugin, use 'provide' first.`\n );\n }\n this.requiredPlugins[name] = new pluginClass(options);\n }\n\n provide(name: string, plugin: PluginClass) {\n this.registeredPluginsMap[name] = plugin;\n }\n\n clearRequired(): void {\n this.requiredPlugins = {};\n }\n\n execute(name: string, fn: string, ...pluginOptions: UAPluginOptions) {\n const plugin = this.requiredPlugins[name] as Plugin;\n if (!plugin) {\n throw new Error(`The plugin \"${name}\" is not required. Check that you required it on initialization.`);\n }\n const actionFunction = plugin[fn];\n if (!actionFunction) {\n throw new Error(`The function \"${fn}\" does not exists on the plugin \"${name}\".`);\n }\n if (typeof actionFunction !== 'function') {\n throw new Error(`\"${fn}\" of the plugin \"${name}\" is not a function.`);\n }\n return actionFunction.apply(plugin, pluginOptions);\n }\n}\n","import {AnyEventResponse, EventType, SendEventArguments, VariableArgumentsPayload} from '../events';\nimport {AnalyticsClient, CoveoAnalyticsClient, Endpoints} from '../client/analytics';\nimport {Plugins} from './plugins';\nimport {PluginOptions} from '../plugins/BasePlugin';\nimport {PluginClass} from '../plugins/BasePlugin';\n\nexport type AvailableActions = keyof CoveoUA;\n\nexport interface CoveoUAOptions {\n endpoint?: string;\n plugins?: string[];\n}\n\n// CoveoUA mimics the GoogleAnalytics API.\nexport class CoveoUA {\n public client?: AnalyticsClient;\n private plugins: Plugins = new Plugins();\n private params: {[name: string]: string} = {};\n\n // init initializes a new SimpleAPI client.\n // @param token is your coveo access_token / api_key / ...\n // @param endpoint is the endpoint you want to target defaults to the\n // usage analytics production endpoint\n init(token: string | AnalyticsClient, optionsOrEndpoint: string | CoveoUAOptions): void {\n if (!token) {\n throw new Error(`You must pass your token when you call 'init'`);\n }\n\n if (typeof token === 'string') {\n this.client = new CoveoAnalyticsClient({\n token: token,\n endpoint: this.getEndpoint(optionsOrEndpoint),\n });\n } else if (this.isAnalyticsClient(token)) {\n this.client = token;\n }\n\n if (this.client) {\n const pluginOptions: PluginOptions = {client: this.client};\n this.plugins.clearRequired();\n this.getPluginKeys(optionsOrEndpoint).forEach((pluginKey) =>\n this.plugins.require(pluginKey, pluginOptions)\n );\n this.client.registerBeforeSendEventHook((eventType, payload) => ({\n ...payload,\n ...this.params,\n }));\n this.client.addEventTypeMapping(EventType.view, {newEventType: EventType.view, addClientIdParameter: true});\n } else {\n throw new Error(`You must pass either your token or a valid object when you call 'init'`);\n }\n }\n\n private isAnalyticsClient(token: AnalyticsClient): token is AnalyticsClient {\n return typeof token === 'object' && typeof token.sendEvent !== 'undefined';\n }\n\n private getPluginKeys(optionsOrEndpoint: string | CoveoUAOptions): string[] {\n if (typeof optionsOrEndpoint === 'string') {\n return Plugins.DefaultPlugins;\n }\n return Array.isArray(optionsOrEndpoint?.plugins) ? optionsOrEndpoint.plugins : Plugins.DefaultPlugins;\n }\n\n private getEndpoint(optionsOrEndpoint: string | CoveoUAOptions) {\n if (typeof optionsOrEndpoint === 'string') {\n return optionsOrEndpoint || Endpoints.default;\n } else if (optionsOrEndpoint?.endpoint) {\n return optionsOrEndpoint.endpoint;\n }\n return Endpoints.default;\n }\n\n // init initializes a new client intended to be used with a proxy that injects the access token.\n // @param endpoint is the endpoint of your proxy.\n initForProxy(endpoint: string): void {\n if (!endpoint) {\n throw new Error(`You must pass your endpoint when you call 'initForProxy'`);\n }\n\n if (typeof endpoint !== 'string') {\n throw new Error(`You must pass a string as the endpoint parameter when you call 'initForProxy'`);\n }\n\n this.client = new CoveoAnalyticsClient({\n endpoint: endpoint,\n });\n }\n\n set(keyOrObject: string | any, value: string): void {\n if (typeof keyOrObject === 'string') {\n this.params[keyOrObject] = value;\n } else {\n Object.keys(keyOrObject).map((key) => {\n this.params[key] = keyOrObject[key];\n });\n }\n }\n\n send(...[event, ...payload]: SendEventArguments): Promise<AnyEventResponse | void> {\n if (typeof this.client == 'undefined') {\n throw new Error(`You must call init before sending an event`);\n }\n\n if (!event) {\n throw new Error(`You must provide an event type when calling \"send\".`);\n }\n\n return this.client.sendEvent(event.toLowerCase(), ...(payload as VariableArgumentsPayload));\n }\n\n onLoad(callback: Function) {\n if (typeof callback == 'undefined') {\n throw new Error(`You must pass a function when you call 'onLoad'`);\n }\n\n callback();\n }\n\n provide(name: string, plugin: PluginClass) {\n this.plugins.provide(name, plugin);\n }\n\n require(name: string, options: Omit<PluginOptions, 'client'>) {\n if (!this.client) {\n throw new Error(`You must call init before requiring a plugin`);\n }\n this.plugins.require(name, {...options, client: this.client});\n }\n\n callPlugin(pluginName: string, fn: string, ...args: any): void {\n this.plugins.execute(pluginName, fn, ...args);\n }\n\n reset() {\n this.client = undefined;\n this.plugins = new Plugins();\n this.params = {};\n }\n}\n\nexport const coveoua = new CoveoUA();\nexport const getCurrentClient = () => coveoua.client;\n\nexport const handleOneAnalyticsEvent = (command: string, ...params: any[]) => {\n const [, trackerName, pluginName, fn] = /^(?:(\\w+)\\.)?(?:(\\w+):)?(\\w+)$/.exec(command)!;\n\n const actionFunction = (<any>coveoua)[fn];\n if (pluginName && fn) {\n return coveoua.callPlugin(pluginName as string, fn, ...params);\n } else if (actionFunction) {\n return actionFunction.apply(coveoua, params);\n } else {\n const actions: AvailableActions[] = [\n 'init',\n 'set',\n 'send',\n 'onLoad',\n 'callPlugin',\n 'reset',\n 'require',\n 'provide',\n ];\n throw new Error(`The action \"${command}\" does not exist. Available actions: ${actions.join(', ')}.`);\n }\n};\n\nexport default handleOneAnalyticsEvent;\n","import {AnalyticsClient} from './analytics';\nimport {\n AnyEventResponse,\n SearchEventResponse,\n ClickEventResponse,\n CustomEventResponse,\n VisitResponse,\n HealthResponse,\n ViewEventResponse,\n} from '../events';\nimport {NoopRuntime} from './runtimeEnvironment';\n\nexport class NoopAnalytics implements AnalyticsClient {\n getPayload(): Promise<any> {\n return Promise.resolve();\n }\n getParameters(): Promise<any> {\n return Promise.resolve();\n }\n sendEvent(): Promise<AnyEventResponse | void> {\n return Promise.resolve();\n }\n sendSearchEvent(): Promise<SearchEventResponse | void> {\n return Promise.resolve();\n }\n sendClickEvent(): Promise<ClickEventResponse | void> {\n return Promise.resolve();\n }\n sendCustomEvent(): Promise<CustomEventResponse | void> {\n return Promise.resolve();\n }\n sendViewEvent(): Promise<ViewEventResponse | void> {\n return Promise.resolve();\n }\n getVisit(): Promise<VisitResponse> {\n return Promise.resolve({id: '', visitorId: ''});\n }\n getHealth(): Promise<HealthResponse> {\n return Promise.resolve({status: ''});\n }\n registerBeforeSendEventHook(): void {}\n registerAfterSendEventHook(): void {}\n addEventTypeMapping(): void {}\n runtime = new NoopRuntime();\n currentVisitorId = '';\n}\n","function filterConsecutiveRepeatedValues(rawData: string[]) {\n let prev = '';\n return rawData.filter((value) => {\n const isDifferent = value !== prev;\n prev = value;\n return isDifferent;\n });\n}\n\nfunction removeSemicolons(rawData: string[]) {\n return rawData.map((value) => {\n return value.replace(/;/g, '');\n });\n}\n\nfunction getDataString(data: string[]): string {\n const ANALYTICS_LENGTH_LIMIT = 256;\n\n const formattedData = data.join(';');\n if (formattedData.length <= ANALYTICS_LENGTH_LIMIT) {\n return formattedData;\n }\n return getDataString(data.slice(1));\n}\n\nexport const formatArrayForCoveoCustomData = (rawData: string[]): string => {\n const dataWithoutSemicolons = removeSemicolons(rawData);\n const dataWithoutRepeatedValues = filterConsecutiveRepeatedValues(dataWithoutSemicolons);\n\n return getDataString(dataWithoutRepeatedValues);\n};\n","import {OmniboxSuggestionsMetadata} from '../searchPage/searchPageEvents';\nimport {formatArrayForCoveoCustomData} from './format-array-for-coveo-custom-data';\n\nexport function formatOmniboxMetadata(meta: OmniboxSuggestionsMetadata): OmniboxSuggestionsMetadata {\n const partialQueries =\n typeof meta.partialQueries === 'string'\n ? meta.partialQueries\n : formatArrayForCoveoCustomData(meta.partialQueries);\n const suggestions =\n typeof meta.suggestions === 'string' ? meta.suggestions : formatArrayForCoveoCustomData(meta.suggestions);\n\n return {\n ...meta,\n partialQueries,\n suggestions,\n };\n}\n","import CoveoAnalyticsClient, {ClientOptions, AnalyticsClient} from '../client/analytics';\nimport {\n SearchEventRequest,\n ClickEventRequest,\n CustomEventRequest,\n SearchEventResponse,\n AnyEventResponse,\n ClickEventResponse,\n CustomEventResponse,\n} from '../events';\nimport {\n SearchPageEvents,\n OmniboxSuggestionsMetadata,\n FacetMetadata,\n FacetRangeMetadata,\n CategoryFacetMetadata,\n DocumentIdentifier,\n InterfaceChangeMetadata,\n ResultsSortMetadata,\n PartialDocumentInformation,\n CustomEventsTypes,\n TriggerNotifyMetadata,\n TriggerExecuteMetadata,\n TriggerRedirectMetadata,\n PagerResizeMetadata,\n PagerMetadata,\n FacetBaseMeta,\n FacetSortMeta,\n QueryErrorMeta,\n FacetStateMetadata,\n SmartSnippetFeedbackReason,\n SmartSnippetSuggestionMeta,\n SmartSnippetDocumentIdentifier,\n StaticFilterMetadata,\n StaticFilterToggleValueMetadata,\n UndoTriggerRedirectMetadata,\n SmartSnippetLinkMeta,\n} from './searchPageEvents';\nimport {NoopAnalytics} from '../client/noopAnalytics';\nimport {formatOmniboxMetadata} from '../formatting/format-omnibox-metadata';\nimport doNotTrack from '../donottrack';\n\nexport interface SearchPageClientProvider {\n getBaseMetadata: () => Record<string, any>;\n getSearchEventRequestPayload: () => Omit<SearchEventRequest, 'actionCause' | 'searchQueryUid'>;\n getSearchUID: () => string;\n getPipeline: () => string;\n getOriginContext?: () => string;\n getOriginLevel1: () => string;\n getOriginLevel2: () => string;\n getOriginLevel3: () => string;\n getLanguage: () => string;\n getIsAnonymous: () => boolean;\n getFacetState?: () => FacetStateMetadata[];\n getSplitTestRunName?: () => string | undefined;\n getSplitTestRunVersion?: () => string | undefined;\n}\n\nexport interface SearchPageClientOptions extends ClientOptions {\n enableAnalytics: boolean;\n}\n\nexport type EventDescription = Pick<SearchEventRequest, 'actionCause' | 'customData'>;\n\nexport interface EventBuilder<T extends AnyEventResponse = AnyEventResponse> {\n description: EventDescription;\n log: () => Promise<T | void>;\n}\n\nexport class CoveoSearchPageClient {\n public coveoAnalyticsClient: AnalyticsClient;\n\n constructor(private opts: Partial<SearchPageClientOptions>, private provider: SearchPageClientProvider) {\n const shouldDisableAnalytics = opts.enableAnalytics === false || doNotTrack();\n this.coveoAnalyticsClient = shouldDisableAnalytics ? new NoopAnalytics() : new CoveoAnalyticsClient(opts);\n }\n\n public disable() {\n if (this.coveoAnalyticsClient instanceof CoveoAnalyticsClient) {\n this.coveoAnalyticsClient.clear();\n }\n\n this.coveoAnalyticsClient = new NoopAnalytics();\n }\n\n public enable() {\n this.coveoAnalyticsClient = new CoveoAnalyticsClient(this.opts);\n }\n\n public makeInterfaceLoad() {\n return this.makeSearchEvent(SearchPageEvents.interfaceLoad);\n }\n\n public logInterfaceLoad() {\n return this.makeInterfaceLoad().log();\n }\n\n public makeRecommendationInterfaceLoad() {\n return this.makeSearchEvent(SearchPageEvents.recommendationInterfaceLoad);\n }\n\n public logRecommendationInterfaceLoad() {\n return this.makeRecommendationInterfaceLoad().log();\n }\n\n public makeRecommendation() {\n return this.makeCustomEvent(SearchPageEvents.recommendation);\n }\n\n public logRecommendation() {\n return this.makeRecommendation().log();\n }\n\n public makeRecommendationOpen(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeClickEvent(SearchPageEvents.recommendationOpen, info, identifier);\n }\n\n public logRecommendationOpen(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeRecommendationOpen(info, identifier).log();\n }\n\n public makeStaticFilterClearAll(meta: StaticFilterMetadata) {\n return this.makeSearchEvent(SearchPageEvents.staticFilterClearAll, meta);\n }\n\n public logStaticFilterClearAll(meta: StaticFilterMetadata) {\n return this.makeStaticFilterClearAll(meta).log();\n }\n\n public makeStaticFilterSelect(meta: StaticFilterToggleValueMetadata) {\n return this.makeSearchEvent(SearchPageEvents.staticFilterSelect, meta);\n }\n\n public logStaticFilterSelect(meta: StaticFilterToggleValueMetadata) {\n return this.makeStaticFilterSelect(meta).log();\n }\n\n public makeStaticFilterDeselect(meta: StaticFilterToggleValueMetadata) {\n return this.makeSearchEvent(SearchPageEvents.staticFilterDeselect, meta);\n }\n\n public logStaticFilterDeselect(meta: StaticFilterToggleValueMetadata) {\n return this.makeStaticFilterDeselect(meta).log();\n }\n\n public makeFetchMoreResults() {\n return this.makeCustomEvent(SearchPageEvents.pagerScrolling, {type: 'getMoreResults'});\n }\n\n public logFetchMoreResults() {\n return this.makeFetchMoreResults().log();\n }\n\n public makeInterfaceChange(metadata: InterfaceChangeMetadata) {\n return this.makeSearchEvent(SearchPageEvents.interfaceChange, metadata);\n }\n\n public logInterfaceChange(metadata: InterfaceChangeMetadata) {\n return this.makeInterfaceChange(metadata).log();\n }\n\n public makeDidYouMeanAutomatic() {\n return this.makeSearchEvent(SearchPageEvents.didyoumeanAutomatic);\n }\n\n public logDidYouMeanAutomatic() {\n return this.makeDidYouMeanAutomatic().log();\n }\n\n public makeDidYouMeanClick() {\n return this.makeSearchEvent(SearchPageEvents.didyoumeanClick);\n }\n\n public logDidYouMeanClick() {\n return this.makeDidYouMeanClick().log();\n }\n\n public makeResultsSort(metadata: ResultsSortMetadata) {\n return this.makeSearchEvent(SearchPageEvents.resultsSort, metadata);\n }\n\n public logResultsSort(metadata: ResultsSortMetadata) {\n return this.makeResultsSort(metadata).log();\n }\n\n public makeSearchboxSubmit() {\n return this.makeSearchEvent(SearchPageEvents.searchboxSubmit);\n }\n\n public logSearchboxSubmit() {\n return this.makeSearchboxSubmit().log();\n }\n\n public makeSearchboxClear() {\n return this.makeSearchEvent(SearchPageEvents.searchboxClear);\n }\n\n public logSearchboxClear() {\n return this.makeSearchboxClear().log();\n }\n\n public makeSearchboxAsYouType() {\n return this.makeSearchEvent(SearchPageEvents.searchboxAsYouType);\n }\n\n public logSearchboxAsYouType() {\n return this.makeSearchboxAsYouType().log();\n }\n\n public makeBreadcrumbFacet(metadata: FacetMetadata | FacetRangeMetadata | CategoryFacetMetadata) {\n return this.makeSearchEvent(SearchPageEvents.breadcrumbFacet, metadata);\n }\n\n public logBreadcrumbFacet(metadata: FacetMetadata | FacetRangeMetadata | CategoryFacetMetadata) {\n return this.makeBreadcrumbFacet(metadata).log();\n }\n\n public makeBreadcrumbResetAll() {\n return this.makeSearchEvent(SearchPageEvents.breadcrumbResetAll);\n }\n\n public logBreadcrumbResetAll() {\n return this.makeBreadcrumbResetAll().log();\n }\n\n public makeDocumentQuickview(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeClickEvent(SearchPageEvents.documentQuickview, info, identifier);\n }\n\n public logDocumentQuickview(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeDocumentQuickview(info, identifier).log();\n }\n\n public makeDocumentOpen(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeClickEvent(SearchPageEvents.documentOpen, info, identifier);\n }\n\n public logDocumentOpen(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeDocumentOpen(info, identifier).log();\n }\n\n public makeOmniboxAnalytics(meta: OmniboxSuggestionsMetadata) {\n return this.makeSearchEvent(SearchPageEvents.omniboxAnalytics, formatOmniboxMetadata(meta));\n }\n\n public logOmniboxAnalytics(meta: OmniboxSuggestionsMetadata) {\n return this.makeOmniboxAnalytics(meta).log();\n }\n\n public makeOmniboxFromLink(meta: OmniboxSuggestionsMetadata) {\n return this.makeSearchEvent(SearchPageEvents.omniboxFromLink, formatOmniboxMetadata(meta));\n }\n\n public logOmniboxFromLink(meta: OmniboxSuggestionsMetadata) {\n return this.makeOmniboxFromLink(meta).log();\n }\n\n public makeSearchFromLink() {\n return this.makeSearchEvent(SearchPageEvents.searchFromLink);\n }\n\n public logSearchFromLink() {\n return this.makeSearchFromLink().log();\n }\n\n public makeTriggerNotify(meta: TriggerNotifyMetadata) {\n return this.makeCustomEvent(SearchPageEvents.triggerNotify, meta);\n }\n\n public logTriggerNotify(meta: TriggerNotifyMetadata) {\n return this.makeTriggerNotify(meta).log();\n }\n\n public makeTriggerExecute(meta: TriggerExecuteMetadata) {\n return this.makeCustomEvent(SearchPageEvents.triggerExecute, meta);\n }\n\n public logTriggerExecute(meta: TriggerExecuteMetadata) {\n return this.makeTriggerExecute(meta).log();\n }\n\n public makeTriggerQuery() {\n return this.makeCustomEvent(\n SearchPageEvents.triggerQuery,\n {query: this.provider.getSearchEventRequestPayload().queryText},\n 'queryPipelineTriggers'\n );\n }\n\n public logTriggerQuery() {\n return this.makeTriggerQuery().log();\n }\n\n public makeUndoTriggerQuery(meta: UndoTriggerRedirectMetadata) {\n return this.makeSearchEvent(SearchPageEvents.undoTriggerQuery, meta);\n }\n\n public logUndoTriggerQuery(meta: UndoTriggerRedirectMetadata) {\n return this.makeUndoTriggerQuery(meta).log();\n }\n\n public makeTriggerRedirect(meta: TriggerRedirectMetadata) {\n return this.makeCustomEvent(SearchPageEvents.triggerRedirect, {\n ...meta,\n query: this.provider.getSearchEventRequestPayload().queryText,\n });\n }\n\n public logTriggerRedirect(meta: TriggerRedirectMetadata) {\n return this.makeTriggerRedirect(meta).log();\n }\n\n public makePagerResize(meta: PagerResizeMetadata) {\n return this.makeCustomEvent(SearchPageEvents.pagerResize, meta);\n }\n\n public logPagerResize(meta: PagerResizeMetadata) {\n return this.makePagerResize(meta).log();\n }\n\n public makePagerNumber(meta: PagerMetadata) {\n return this.makeCustomEvent(SearchPageEvents.pagerNumber, meta);\n }\n\n public logPagerNumber(meta: PagerMetadata) {\n return this.makePagerNumber(meta).log();\n }\n\n public makePagerNext(meta: PagerMetadata) {\n return this.makeCustomEvent(SearchPageEvents.pagerNext, meta);\n }\n\n public logPagerNext(meta: PagerMetadata) {\n return this.makePagerNext(meta).log();\n }\n\n public makePagerPrevious(meta: PagerMetadata) {\n return this.makeCustomEvent(SearchPageEvents.pagerPrevious, meta);\n }\n\n public logPagerPrevious(meta: PagerMetadata) {\n return this.makePagerPrevious(meta).log();\n }\n\n public makePagerScrolling() {\n return this.makeCustomEvent(SearchPageEvents.pagerScrolling);\n }\n\n public logPagerScrolling() {\n return this.makePagerScrolling().log();\n }\n\n public makeFacetClearAll(meta: FacetBaseMeta) {\n return this.makeSearchEvent(SearchPageEvents.facetClearAll, meta);\n }\n\n public logFacetClearAll(meta: FacetBaseMeta) {\n return this.makeFacetClearAll(meta).log();\n }\n\n public makeFacetSearch(meta: FacetBaseMeta) {\n return this.makeSearchEvent(SearchPageEvents.facetSearch, meta);\n }\n\n public logFacetSearch(meta: FacetBaseMeta) {\n return this.makeFacetSearch(meta).log();\n }\n\n public makeFacetSelect(meta: FacetMetadata) {\n return this.makeSearchEvent(SearchPageEvents.facetSelect, meta);\n }\n\n public logFacetSelect(meta: FacetMetadata) {\n return this.makeFacetSelect(meta).log();\n }\n\n public makeFacetDeselect(meta: FacetMetadata) {\n return this.makeSearchEvent(SearchPageEvents.facetDeselect, meta);\n }\n\n public logFacetDeselect(meta: FacetMetadata) {\n return this.makeFacetDeselect(meta).log();\n }\n\n public makeFacetExclude(meta: FacetMetadata) {\n return this.makeSearchEvent(SearchPageEvents.facetExclude, meta);\n }\n\n public logFacetExclude(meta: FacetMetadata) {\n return this.makeFacetExclude(meta).log();\n }\n\n public makeFacetUnexclude(meta: FacetMetadata) {\n return this.makeSearchEvent(SearchPageEvents.facetUnexclude, meta);\n }\n\n public logFacetUnexclude(meta: FacetMetadata) {\n return this.makeFacetUnexclude(meta).log();\n }\n\n public makeFacetSelectAll(meta: FacetBaseMeta) {\n return this.makeSearchEvent(SearchPageEvents.facetSelectAll, meta);\n }\n\n public logFacetSelectAll(meta: FacetBaseMeta) {\n return this.makeFacetSelectAll(meta).log();\n }\n\n public makeFacetUpdateSort(meta: FacetSortMeta) {\n return this.makeSearchEvent(SearchPageEvents.facetUpdateSort, meta);\n }\n\n public logFacetUpdateSort(meta: FacetSortMeta) {\n return this.makeFacetUpdateSort(meta).log();\n }\n\n public makeFacetShowMore(meta: FacetBaseMeta) {\n return this.makeCustomEvent(SearchPageEvents.facetShowMore, meta);\n }\n\n public logFacetShowMore(meta: FacetBaseMeta) {\n return this.makeFacetShowMore(meta).log();\n }\n\n public makeFacetShowLess(meta: FacetBaseMeta) {\n return this.makeCustomEvent(SearchPageEvents.facetShowLess, meta);\n }\n\n public logFacetShowLess(meta: FacetBaseMeta) {\n return this.makeFacetShowLess(meta).log();\n }\n\n public makeQueryError(meta: QueryErrorMeta) {\n return this.makeCustomEvent(SearchPageEvents.queryError, meta);\n }\n\n public logQueryError(meta: QueryErrorMeta) {\n return this.makeQueryError(meta).log();\n }\n\n public makeQueryErrorBack(): EventBuilder<SearchEventResponse> {\n return {\n description: this.makeDescription(SearchPageEvents.queryErrorBack),\n log: async () => {\n await this.logCustomEvent(SearchPageEvents.queryErrorBack);\n return this.logSearchEvent(SearchPageEvents.queryErrorBack);\n },\n };\n }\n\n public logQueryErrorBack() {\n return this.makeQueryErrorBack().log();\n }\n\n public makeQueryErrorRetry(): EventBuilder<SearchEventResponse> {\n return {\n description: this.makeDescription(SearchPageEvents.queryErrorRetry),\n log: async () => {\n await this.logCustomEvent(SearchPageEvents.queryErrorRetry);\n return this.logSearchEvent(SearchPageEvents.queryErrorRetry);\n },\n };\n }\n\n public logQueryErrorRetry() {\n return this.makeQueryErrorRetry().log();\n }\n\n public makeQueryErrorClear(): EventBuilder<SearchEventResponse> {\n return {\n description: this.makeDescription(SearchPageEvents.queryErrorClear),\n log: async () => {\n await this.logCustomEvent(SearchPageEvents.queryErrorClear);\n return this.logSearchEvent(SearchPageEvents.queryErrorClear);\n },\n };\n }\n\n public logQueryErrorClear() {\n return this.makeQueryErrorClear().log();\n }\n\n public makeLikeSmartSnippet() {\n return this.makeCustomEvent(SearchPageEvents.likeSmartSnippet);\n }\n\n public logLikeSmartSnippet() {\n return this.makeLikeSmartSnippet().log();\n }\n\n public makeDislikeSmartSnippet() {\n return this.makeCustomEvent(SearchPageEvents.dislikeSmartSnippet);\n }\n\n public logDislikeSmartSnippet() {\n return this.makeDislikeSmartSnippet().log();\n }\n\n public makeExpandSmartSnippet() {\n return this.makeCustomEvent(SearchPageEvents.expandSmartSnippet);\n }\n\n public logExpandSmartSnippet() {\n return this.makeExpandSmartSnippet().log();\n }\n\n public makeCollapseSmartSnippet() {\n return this.makeCustomEvent(SearchPageEvents.collapseSmartSnippet);\n }\n\n public logCollapseSmartSnippet() {\n return this.makeCollapseSmartSnippet().log();\n }\n\n public makeOpenSmartSnippetFeedbackModal() {\n return this.makeCustomEvent(SearchPageEvents.openSmartSnippetFeedbackModal);\n }\n\n public logOpenSmartSnippetFeedbackModal() {\n return this.makeOpenSmartSnippetFeedbackModal().log();\n }\n\n public makeCloseSmartSnippetFeedbackModal() {\n return this.makeCustomEvent(SearchPageEvents.closeSmartSnippetFeedbackModal);\n }\n\n public logCloseSmartSnippetFeedbackModal() {\n return this.makeCloseSmartSnippetFeedbackModal().log();\n }\n\n public makeSmartSnippetFeedbackReason(reason: SmartSnippetFeedbackReason, details?: string) {\n return this.makeCustomEvent(SearchPageEvents.sendSmartSnippetReason, {reason, details});\n }\n\n public logSmartSnippetFeedbackReason(reason: SmartSnippetFeedbackReason, details?: string) {\n return this.makeSmartSnippetFeedbackReason(reason, details).log();\n }\n\n public makeExpandSmartSnippetSuggestion(snippet: SmartSnippetSuggestionMeta | SmartSnippetDocumentIdentifier) {\n return this.makeCustomEvent(\n SearchPageEvents.expandSmartSnippetSuggestion,\n 'documentId' in snippet ? snippet : {documentId: snippet}\n );\n }\n\n public logExpandSmartSnippetSuggestion(snippet: SmartSnippetSuggestionMeta | SmartSnippetDocumentIdentifier) {\n return this.makeExpandSmartSnippetSuggestion(snippet).log();\n }\n\n public makeCollapseSmartSnippetSuggestion(snippet: SmartSnippetSuggestionMeta | SmartSnippetDocumentIdentifier) {\n return this.makeCustomEvent(\n SearchPageEvents.collapseSmartSnippetSuggestion,\n 'documentId' in snippet ? snippet : {documentId: snippet}\n );\n }\n\n public logCollapseSmartSnippetSuggestion(snippet: SmartSnippetSuggestionMeta | SmartSnippetDocumentIdentifier) {\n return this.makeCollapseSmartSnippetSuggestion(snippet).log();\n }\n\n /**\n * @deprecated\n */\n private makeShowMoreSmartSnippetSuggestion(snippet: SmartSnippetSuggestionMeta) {\n return this.makeCustomEvent(SearchPageEvents.showMoreSmartSnippetSuggestion, snippet);\n }\n\n /**\n * @deprecated\n */\n public logShowMoreSmartSnippetSuggestion(snippet: SmartSnippetSuggestionMeta) {\n return this.makeShowMoreSmartSnippetSuggestion(snippet).log();\n }\n\n /**\n * @deprecated\n */\n private makeShowLessSmartSnippetSuggestion(snippet: SmartSnippetSuggestionMeta) {\n return this.makeCustomEvent(SearchPageEvents.showLessSmartSnippetSuggestion, snippet);\n }\n\n /**\n * @deprecated\n */\n public logShowLessSmartSnippetSuggestion(snippet: SmartSnippetSuggestionMeta) {\n return this.makeShowLessSmartSnippetSuggestion(snippet).log();\n }\n\n public makeOpenSmartSnippetSource(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeClickEvent(SearchPageEvents.openSmartSnippetSource, info, identifier);\n }\n\n public logOpenSmartSnippetSource(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeOpenSmartSnippetSource(info, identifier).log();\n }\n\n public makeOpenSmartSnippetSuggestionSource(info: PartialDocumentInformation, snippet: SmartSnippetSuggestionMeta) {\n return this.makeClickEvent(\n SearchPageEvents.openSmartSnippetSuggestionSource,\n info,\n {contentIDKey: snippet.documentId.contentIdKey, contentIDValue: snippet.documentId.contentIdValue},\n snippet\n );\n }\n\n public logOpenSmartSnippetSuggestionSource(info: PartialDocumentInformation, snippet: SmartSnippetSuggestionMeta) {\n return this.makeOpenSmartSnippetSuggestionSource(info, snippet).log();\n }\n\n public makeOpenSmartSnippetInlineLink(\n info: PartialDocumentInformation,\n identifierAndLink: DocumentIdentifier & SmartSnippetLinkMeta\n ) {\n return this.makeClickEvent(\n SearchPageEvents.openSmartSnippetInlineLink,\n info,\n {contentIDKey: identifierAndLink.contentIDKey, contentIDValue: identifierAndLink.contentIDValue},\n identifierAndLink\n );\n }\n\n public logOpenSmartSnippetInlineLink(\n info: PartialDocumentInformation,\n identifierAndLink: DocumentIdentifier & SmartSnippetLinkMeta\n ) {\n return this.makeOpenSmartSnippetInlineLink(info, identifierAndLink).log();\n }\n\n public makeOpenSmartSnippetSuggestionInlineLink(\n info: PartialDocumentInformation,\n snippetAndLink: SmartSnippetSuggestionMeta & SmartSnippetLinkMeta\n ) {\n return this.makeClickEvent(\n SearchPageEvents.openSmartSnippetSuggestionInlineLink,\n info,\n {\n contentIDKey: snippetAndLink.documentId.contentIdKey,\n contentIDValue: snippetAndLink.documentId.contentIdValue,\n },\n snippetAndLink\n );\n }\n\n public logOpenSmartSnippetSuggestionInlineLink(\n info: PartialDocumentInformation,\n snippetAndLink: SmartSnippetSuggestionMeta & SmartSnippetLinkMeta\n ) {\n return this.makeOpenSmartSnippetSuggestionInlineLink(info, snippetAndLink).log();\n }\n\n public makeRecentQueryClick() {\n return this.makeSearchEvent(SearchPageEvents.recentQueryClick);\n }\n\n public logRecentQueryClick() {\n return this.makeRecentQueryClick().log();\n }\n\n public makeClearRecentQueries() {\n return this.makeCustomEvent(SearchPageEvents.clearRecentQueries);\n }\n\n public logClearRecentQueries() {\n return this.makeClearRecentQueries().log();\n }\n\n public makeRecentResultClick(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeCustomEvent(SearchPageEvents.recentResultClick, {info, identifier});\n }\n\n public logRecentResultClick(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeRecentResultClick(info, identifier).log();\n }\n\n public makeClearRecentResults() {\n return this.makeCustomEvent(SearchPageEvents.clearRecentResults);\n }\n\n public logClearRecentResults() {\n return this.makeClearRecentResults().log();\n }\n\n public makeNoResultsBack() {\n return this.makeSearchEvent(SearchPageEvents.noResultsBack);\n }\n\n public logNoResultsBack() {\n return this.makeNoResultsBack().log();\n }\n\n public makeShowMoreFoldedResults(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeClickEvent(SearchPageEvents.showMoreFoldedResults, info, identifier);\n }\n\n public logShowMoreFoldedResults(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeShowMoreFoldedResults(info, identifier).log();\n }\n\n public makeShowLessFoldedResults() {\n return this.makeCustomEvent(SearchPageEvents.showLessFoldedResults);\n }\n\n public logShowLessFoldedResults() {\n return this.makeShowLessFoldedResults().log();\n }\n\n public makeCustomEvent(\n event: SearchPageEvents,\n metadata?: Record<string, any>,\n eventType: string = CustomEventsTypes[event]!\n ): EventBuilder<CustomEventResponse> {\n const customData = {...this.provider.getBaseMetadata(), ...metadata};\n return {\n description: this.makeDescription(event, metadata),\n log: async () => {\n const payload: CustomEventRequest = {\n ...(await this.getBaseCustomEventRequest(customData)),\n eventType,\n eventValue: event,\n };\n\n return this.coveoAnalyticsClient.sendCustomEvent(payload);\n },\n };\n }\n\n public logCustomEvent(\n event: SearchPageEvents,\n metadata?: Record<string, any>,\n eventType: string = CustomEventsTypes[event]!\n ) {\n return this.makeCustomEvent(event, metadata, eventType).log();\n }\n\n public makeCustomEventWithType(eventValue: string, eventType: string, metadata?: Record<string, any>) {\n const customData = {...this.provider.getBaseMetadata(), ...metadata};\n return {\n description: <EventDescription>{actionCause: eventValue, customData},\n log: async () => {\n const payload: CustomEventRequest = {\n ...(await this.getBaseCustomEventRequest(customData)),\n eventType,\n eventValue,\n };\n return this.coveoAnalyticsClient.sendCustomEvent(payload);\n },\n };\n }\n\n public logCustomEventWithType(eventValue: string, eventType: string, metadata?: Record<string, any>) {\n return this.makeCustomEventWithType(eventValue, eventType, metadata).log();\n }\n\n public async logSearchEvent(event: SearchPageEvents, metadata?: Record<string, any>) {\n return this.coveoAnalyticsClient.sendSearchEvent(await this.getBaseSearchEventRequest(event, metadata));\n }\n\n private makeDescription(actionCause: SearchPageEvents, metadata?: Record<string, any>): EventDescription {\n return {actionCause, customData: {...this.provider.getBaseMetadata(), ...metadata}};\n }\n\n public makeSearchEvent(event: SearchPageEvents, metadata?: Record<string, any>): EventBuilder<SearchEventResponse> {\n return {\n description: this.makeDescription(event, metadata),\n log: () => this.logSearchEvent(event, metadata),\n };\n }\n\n public async logClickEvent(\n event: SearchPageEvents,\n info: PartialDocumentInformation,\n identifier: DocumentIdentifier,\n metadata?: Record<string, any>\n ) {\n const payload: ClickEventRequest = {\n ...info,\n ...(await this.getBaseEventRequest({...identifier, ...metadata})),\n searchQueryUid: this.provider.getSearchUID(),\n queryPipeline: this.provider.getPipeline(),\n actionCause: event,\n };\n\n return this.coveoAnalyticsClient.sendClickEvent(payload);\n }\n\n public makeClickEvent(\n event: SearchPageEvents,\n info: PartialDocumentInformation,\n identifier: DocumentIdentifier,\n metadata?: Record<string, any>\n ): EventBuilder<ClickEventResponse> {\n return {\n description: this.makeDescription(event, {...identifier, ...metadata}),\n log: () => this.logClickEvent(event, info, identifier, metadata),\n };\n }\n\n private async getBaseSearchEventRequest(\n event: SearchPageEvents,\n metadata?: Record<string, any>\n ): Promise<SearchEventRequest> {\n return {\n ...(await this.getBaseEventRequest(metadata)),\n ...this.provider.getSearchEventRequestPayload(),\n searchQueryUid: this.provider.getSearchUID(),\n queryPipeline: this.provider.getPipeline(),\n actionCause: event,\n };\n }\n\n private async getBaseCustomEventRequest(metadata?: Record<string, any>) {\n return {\n ...(await this.getBaseEventRequest(metadata)),\n lastSearchQueryUid: this.provider.getSearchUID(),\n };\n }\n\n private async getBaseEventRequest(metadata?: Record<string, any>) {\n const customData = {...this.provider.getBaseMetadata(), ...metadata};\n return {\n ...this.getOrigins(),\n ...this.getSplitTestRun(),\n customData,\n language: this.provider.getLanguage(),\n facetState: this.provider.getFacetState ? this.provider.getFacetState() : [],\n anonymous: this.provider.getIsAnonymous(),\n clientId: await this.getClientId(),\n };\n }\n\n private getOrigins() {\n return {\n originContext: this.provider.getOriginContext?.(),\n originLevel1: this.provider.getOriginLevel1(),\n originLevel2: this.provider.getOriginLevel2(),\n originLevel3: this.provider.getOriginLevel3(),\n };\n }\n\n private getClientId() {\n return this.coveoAnalyticsClient instanceof CoveoAnalyticsClient\n ? this.coveoAnalyticsClient.getCurrentVisitorId()\n : undefined;\n }\n\n private getSplitTestRun() {\n const splitTestRunName = this.provider.getSplitTestRunName ? this.provider.getSplitTestRunName() : '';\n const splitTestRunVersion = this.provider.getSplitTestRunVersion ? this.provider.getSplitTestRunVersion() : '';\n return {\n ...(splitTestRunName && {splitTestRunName}),\n ...(splitTestRunVersion && {splitTestRunVersion}),\n };\n }\n}\n","import {TicketProperties} from '../plugins/svc';\n\nexport enum CaseAssistEvents {\n click = 'click',\n flowStart = 'flowStart',\n}\n\nexport enum CaseAssistActions {\n enterInterface = 'ticket_create_start',\n fieldUpdate = 'ticket_field_update',\n fieldSuggestionClick = 'ticket_classification_click',\n suggestionClick = 'suggestion_click',\n suggestionRate = 'suggestion_rate',\n nextCaseStep = 'ticket_next_stage',\n caseCancelled = 'ticket_cancel',\n caseSolved = 'ticket_cancel',\n caseCreated = 'ticket_create',\n}\n\nexport enum CaseCancelledReasons {\n quit = 'Quit',\n solved = 'Solved',\n}\n\nexport interface EnterInterfaceMetadata {\n ticket: TicketProperties;\n}\n\nexport interface UpdateCaseFieldMetadata {\n fieldName: string;\n ticket: TicketProperties;\n}\n\nexport interface SelectFieldSuggestionMetadata {\n suggestion: FieldSuggestion;\n ticket: TicketProperties;\n}\n\nexport interface SelectDocumentSuggestionMetadata {\n suggestion: DocumentSuggestion;\n ticket: TicketProperties;\n}\n\nexport interface RateDocumentSuggestionMetadata {\n rating: number;\n suggestion: DocumentSuggestion;\n ticket: TicketProperties;\n}\n\nexport interface MoveToNextCaseStepMetadata {\n ticket: TicketProperties;\n stage?: string;\n}\n\nexport interface CaseCancelledMetadata {\n ticket: TicketProperties;\n}\n\nexport interface CaseSolvedMetadata {\n ticket: TicketProperties;\n}\n\nexport interface CaseCreatedMetadata {\n ticket: TicketProperties;\n}\n\nexport interface FieldSuggestion {\n classificationId: string;\n responseId: string;\n fieldName: string;\n classification: {\n value: string;\n confidence: number;\n };\n autoSelection?: boolean;\n}\n\nexport interface DocumentSuggestion {\n suggestionId: string;\n responseId: string;\n suggestion: {\n documentUri: string;\n documentUriHash: string;\n documentTitle: string;\n documentUrl: string;\n documentPosition: number;\n };\n fromQuickview?: boolean;\n openDocument?: boolean;\n}\n","import CoveoAnalyticsClient, {AnalyticsClient, ClientOptions} from '../client/analytics';\nimport {NoopAnalytics} from '../client/noopAnalytics';\nimport doNotTrack from '../donottrack';\nimport {SVCPlugin} from '../plugins/svc';\nimport {\n CaseAssistActions,\n CaseAssistEvents,\n CaseCancelledMetadata,\n CaseCancelledReasons,\n CaseCreatedMetadata,\n CaseSolvedMetadata,\n EnterInterfaceMetadata,\n MoveToNextCaseStepMetadata,\n RateDocumentSuggestionMetadata,\n SelectDocumentSuggestionMetadata,\n SelectFieldSuggestionMetadata,\n UpdateCaseFieldMetadata,\n} from './caseAssistActions';\n\nexport interface CaseAssistClientProvider {\n getOriginLevel1: () => string;\n}\n\nexport interface CaseAssistClientOptions extends ClientOptions {\n enableAnalytics?: boolean;\n}\n\nexport class CaseAssistClient {\n public coveoAnalyticsClient: AnalyticsClient;\n private svc: SVCPlugin;\n\n constructor(private options: Partial<CaseAssistClientOptions>, private provider?: CaseAssistClientProvider) {\n const analyticsEnabled = (options.enableAnalytics ?? true) && !doNotTrack();\n\n this.coveoAnalyticsClient = analyticsEnabled ? new CoveoAnalyticsClient(options) : new NoopAnalytics();\n this.svc = new SVCPlugin({client: this.coveoAnalyticsClient});\n }\n\n public disable() {\n if (this.coveoAnalyticsClient instanceof CoveoAnalyticsClient) {\n this.coveoAnalyticsClient.clear();\n }\n this.coveoAnalyticsClient = new NoopAnalytics();\n this.svc = new SVCPlugin({client: this.coveoAnalyticsClient});\n }\n\n public enable() {\n this.coveoAnalyticsClient = new CoveoAnalyticsClient(this.options);\n this.svc = new SVCPlugin({client: this.coveoAnalyticsClient});\n }\n\n public logEnterInterface(meta: EnterInterfaceMetadata) {\n this.svc.setAction(CaseAssistActions.enterInterface);\n this.svc.setTicket(meta.ticket);\n return this.sendFlowStartEvent();\n }\n\n public logUpdateCaseField(meta: UpdateCaseFieldMetadata) {\n this.svc.setAction(CaseAssistActions.fieldUpdate, {\n fieldName: meta.fieldName,\n });\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n\n public logSelectFieldSuggestion(meta: SelectFieldSuggestionMetadata) {\n this.svc.setAction(CaseAssistActions.fieldSuggestionClick, meta.suggestion);\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n\n public logSelectDocumentSuggestion(meta: SelectDocumentSuggestionMetadata) {\n this.svc.setAction(CaseAssistActions.suggestionClick, meta.suggestion);\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n\n public logRateDocumentSuggestion(meta: RateDocumentSuggestionMetadata) {\n this.svc.setAction(CaseAssistActions.suggestionRate, {\n rate: meta.rating,\n ...meta.suggestion,\n });\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n\n public logMoveToNextCaseStep(meta: MoveToNextCaseStepMetadata) {\n this.svc.setAction(CaseAssistActions.nextCaseStep, {\n stage: meta?.stage,\n });\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n\n public logCaseCancelled(meta: CaseCancelledMetadata) {\n this.svc.setAction(CaseAssistActions.caseCancelled, {\n reason: CaseCancelledReasons.quit,\n });\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n\n public logCaseSolved(meta: CaseSolvedMetadata) {\n this.svc.setAction(CaseAssistActions.caseSolved, {\n reason: CaseCancelledReasons.solved,\n });\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n\n public logCaseCreated(meta: CaseCreatedMetadata) {\n this.svc.setAction(CaseAssistActions.caseCreated);\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n\n private sendFlowStartEvent() {\n return this.coveoAnalyticsClient.sendEvent(\n 'event',\n 'svc',\n CaseAssistEvents.flowStart,\n this.provider\n ? {\n searchHub: this.provider.getOriginLevel1(),\n }\n : null\n );\n }\n\n private sendClickEvent() {\n return this.coveoAnalyticsClient.sendEvent(\n 'event',\n 'svc',\n CaseAssistEvents.click,\n this.provider\n ? {\n searchHub: this.provider.getOriginLevel1(),\n }\n : null\n );\n }\n}\n","import CoveoAnalyticsClient, {AnalyticsClient, ClientOptions} from '../client/analytics';\nimport {NoopAnalytics} from '../client/noopAnalytics';\nimport doNotTrack from '../donottrack';\nimport {ClickEventRequest, CustomEventRequest, SearchEventRequest} from '../events';\nimport {\n CustomEventsTypes,\n DocumentIdentifier,\n FacetStateMetadata,\n PartialDocumentInformation,\n SearchPageEvents,\n} from '../searchPage/searchPageEvents';\nimport {\n ExpandToFullUIMetadata,\n InsightEvents,\n InsightFacetMetadata,\n InsightInterfaceChangeMetadata,\n InsightStaticFilterToggleValueMetadata,\n InsightFacetRangeMetadata,\n InsightCategoryFacetMetadata,\n CaseMetadata,\n InsightFacetSortMeta,\n InsightFacetBaseMeta,\n InsightQueryErrorMeta,\n InsightPagerMetadata,\n InsightResultsSortMetadata,\n} from './insightEvents';\n\nexport interface InsightClientProvider {\n getSearchEventRequestPayload: () => Omit<SearchEventRequest, 'actionCause' | 'searchQueryUid'>;\n getSearchUID: () => string;\n getBaseMetadata: () => Record<string, any>;\n getPipeline: () => string;\n getOriginContext?: () => string;\n getOriginLevel1: () => string;\n getOriginLevel2: () => string;\n getOriginLevel3: () => string;\n getLanguage: () => string;\n getIsAnonymous: () => boolean;\n getFacetState?: () => FacetStateMetadata[];\n}\n\nexport interface InsightClientOptions extends ClientOptions {\n enableAnalytics: boolean;\n}\n\nconst extractContextFromMetadata = (meta: {caseContext?: Record<string, string>}) => {\n const context: Record<string, string> = {};\n if (meta.caseContext) {\n Object.keys(meta.caseContext).forEach((contextKey) => {\n const value = meta.caseContext?.[contextKey];\n if (value) {\n const keyToBeSent = `context_${contextKey}`;\n context[keyToBeSent] = value;\n }\n });\n }\n return context;\n};\n\nconst generateMetadataToSend = (metadata: CaseMetadata, includeContext = true) => {\n const {caseContext, caseId, caseNumber, ...metadataWithoutContext} = metadata;\n const context = extractContextFromMetadata(metadata);\n\n return {\n CaseId: caseId,\n CaseNumber: caseNumber,\n ...metadataWithoutContext,\n ...(!!context.context_Case_Subject && {CaseSubject: context.context_Case_Subject}),\n ...(includeContext && context),\n };\n};\n\nexport class CoveoInsightClient {\n public coveoAnalyticsClient: AnalyticsClient;\n\n constructor(private opts: Partial<InsightClientOptions>, private provider: InsightClientProvider) {\n const shouldDisableAnalytics = opts.enableAnalytics === false || doNotTrack();\n this.coveoAnalyticsClient = shouldDisableAnalytics ? new NoopAnalytics() : new CoveoAnalyticsClient(opts);\n }\n\n public disable() {\n if (this.coveoAnalyticsClient instanceof CoveoAnalyticsClient) {\n this.coveoAnalyticsClient.clear();\n }\n this.coveoAnalyticsClient = new NoopAnalytics();\n }\n\n public enable() {\n this.coveoAnalyticsClient = new CoveoAnalyticsClient(this.opts);\n }\n\n public logInterfaceLoad(metadata?: CaseMetadata) {\n if (metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.interfaceLoad, metadataToSend);\n }\n return this.logSearchEvent(SearchPageEvents.interfaceLoad);\n }\n\n public logInterfaceChange(metadata: InsightInterfaceChangeMetadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.interfaceChange, metadataToSend);\n }\n\n public logStaticFilterDeselect(metadata: InsightStaticFilterToggleValueMetadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.staticFilterDeselect, metadataToSend);\n }\n\n public logFetchMoreResults(metadata?: CaseMetadata) {\n if (metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logCustomEvent(SearchPageEvents.pagerScrolling, {...metadataToSend, type: 'getMoreResults'});\n }\n return this.logCustomEvent(SearchPageEvents.pagerScrolling, {type: 'getMoreResults'});\n }\n\n public logBreadcrumbFacet(\n metadata: InsightFacetMetadata | InsightFacetRangeMetadata | InsightCategoryFacetMetadata\n ) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.breadcrumbFacet, metadataToSend);\n }\n\n public logBreadcrumbResetAll(metadata?: CaseMetadata) {\n if (metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.breadcrumbResetAll, metadataToSend);\n }\n return this.logSearchEvent(SearchPageEvents.breadcrumbResetAll);\n }\n\n public logFacetSelect(metadata: InsightFacetMetadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.facetSelect, metadataToSend);\n }\n\n public logFacetDeselect(metadata: InsightFacetMetadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.facetDeselect, metadataToSend);\n }\n\n public logFacetUpdateSort(metadata: InsightFacetSortMeta) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.facetUpdateSort, metadataToSend);\n }\n\n public logFacetClearAll(metadata: InsightFacetBaseMeta) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.facetClearAll, metadataToSend);\n }\n\n public logFacetShowMore(metadata: InsightFacetBaseMeta) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(SearchPageEvents.facetShowMore, metadataToSend);\n }\n\n public logFacetShowLess(metadata: InsightFacetBaseMeta) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(SearchPageEvents.facetShowLess, metadataToSend);\n }\n\n public logQueryError(metadata: InsightQueryErrorMeta) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(SearchPageEvents.queryError, metadataToSend);\n }\n\n public logPagerNumber(metadata: InsightPagerMetadata) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(SearchPageEvents.pagerNumber, metadataToSend);\n }\n\n public logPagerNext(metadata: InsightPagerMetadata) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(SearchPageEvents.pagerNext, metadataToSend);\n }\n\n public logPagerPrevious(metadata: InsightPagerMetadata) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(SearchPageEvents.pagerPrevious, metadataToSend);\n }\n\n public logDidYouMeanAutomatic(metadata?: CaseMetadata) {\n if (metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.didyoumeanAutomatic, metadataToSend);\n }\n return this.logSearchEvent(SearchPageEvents.didyoumeanAutomatic);\n }\n\n public logDidYouMeanClick(metadata?: CaseMetadata) {\n if (metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.didyoumeanClick, metadataToSend);\n }\n return this.logSearchEvent(SearchPageEvents.didyoumeanClick);\n }\n\n public logResultsSort(metadata: InsightResultsSortMetadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.resultsSort, metadataToSend);\n }\n\n public logSearchboxSubmit(metadata?: CaseMetadata) {\n if (metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.searchboxSubmit, metadataToSend);\n }\n return this.logSearchEvent(SearchPageEvents.searchboxSubmit);\n }\n\n public logContextChanged(metadata: CaseMetadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(InsightEvents.contextChanged, metadataToSend);\n }\n\n public logExpandToFullUI(metadata: ExpandToFullUIMetadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logCustomEvent(InsightEvents.expandToFullUI, metadataToSend);\n }\n\n public logDocumentOpen(info: PartialDocumentInformation, identifier: DocumentIdentifier, metadata?: CaseMetadata) {\n return this.logClickEvent(\n SearchPageEvents.documentOpen,\n info,\n identifier,\n metadata ? generateMetadataToSend(metadata, false) : undefined);\n }\n\n public async logCustomEvent(event: SearchPageEvents | InsightEvents, metadata?: Record<string, any>) {\n const customData = {...this.provider.getBaseMetadata(), ...metadata};\n\n const payload: CustomEventRequest = {\n ...(await this.getBaseCustomEventRequest(customData)),\n eventType: CustomEventsTypes[event]!,\n eventValue: event,\n };\n\n return this.coveoAnalyticsClient.sendCustomEvent(payload);\n }\n\n public async logSearchEvent(event: SearchPageEvents | InsightEvents, metadata?: Record<string, any>) {\n return this.coveoAnalyticsClient.sendSearchEvent(await this.getBaseSearchEventRequest(event, metadata));\n }\n\n public async logClickEvent(\n event: SearchPageEvents,\n info: PartialDocumentInformation,\n identifier: DocumentIdentifier,\n metadata?: Record<string, any>\n ) {\n const payload: ClickEventRequest = {\n ...info,\n ...(await this.getBaseEventRequest({...identifier, ...metadata})),\n searchQueryUid: this.provider.getSearchUID(),\n queryPipeline: this.provider.getPipeline(),\n actionCause: event,\n };\n\n return this.coveoAnalyticsClient.sendClickEvent(payload);\n }\n\n private async getBaseCustomEventRequest(metadata?: Record<string, any>) {\n return {\n ...(await this.getBaseEventRequest(metadata)),\n lastSearchQueryUid: this.provider.getSearchUID(),\n };\n }\n\n private async getBaseSearchEventRequest(\n event: SearchPageEvents | InsightEvents,\n metadata?: Record<string, any>\n ): Promise<SearchEventRequest> {\n return {\n ...(await this.getBaseEventRequest(metadata)),\n ...this.provider.getSearchEventRequestPayload(),\n searchQueryUid: this.provider.getSearchUID(),\n queryPipeline: this.provider.getPipeline(),\n actionCause: event,\n };\n }\n\n private async getBaseEventRequest(metadata?: Record<string, any>) {\n const customData = {...this.provider.getBaseMetadata(), ...metadata};\n return {\n ...this.getOrigins(),\n customData,\n language: this.provider.getLanguage(),\n facetState: this.provider.getFacetState ? this.provider.getFacetState() : [],\n anonymous: this.provider.getIsAnonymous(),\n clientId: await this.getClientId(),\n };\n }\n\n private getOrigins() {\n return {\n originContext: this.provider.getOriginContext?.(),\n originLevel1: this.provider.getOriginLevel1(),\n originLevel2: this.provider.getOriginLevel2(),\n originLevel3: this.provider.getOriginLevel3(),\n };\n }\n\n private getClientId() {\n return this.coveoAnalyticsClient instanceof CoveoAnalyticsClient\n ? this.coveoAnalyticsClient.getCurrentVisitorId()\n : undefined;\n }\n}\n","import * as analytics from './library';\nimport handleOneAnalyticsEvent from './simpleanalytics';\n\ndeclare const self: any;\n\nconst promise = (window as any)['Promise'];\nif (!(promise instanceof Function)) {\n console.error(\n `This script uses window.Promise which is not supported in your browser. Consider adding a polyfill like \"es6-promise\".`\n );\n}\nconst fetch = (window as any)['fetch'];\nif (!(fetch instanceof Function)) {\n console.error(\n `This script uses window.fetch which is not supported in your browser. Consider adding a polyfill like \"fetch\".`\n );\n}\n\n// CoveoUAGlobal is the interface for the global function which also has a\n// queue `q` of unexecuted parameters\nexport interface CoveoUAGlobal {\n (action: string, ...params: any[]): void;\n // CoveoAnalytics.q is the queue of last called actions before lib was included\n q?: [string, any[]][];\n}\n\n// On load of this script we get the global object `coveoua` (which would be)\n// on `window` in a browser\nconst coveoua: CoveoUAGlobal = self.coveoua || handleOneAnalyticsEvent;\n\n// Replace the quick shim with the real thing.\nself.coveoua = handleOneAnalyticsEvent;\n\nself.coveoanalytics = analytics;\n\n// On normal execution this library should be loaded after the snippet execution\n// so we will execute the actions in the `q` array\nif (coveoua.q) {\n const initEvents = coveoua.q.filter((args: [string, any[]]) => args[0] === 'init');\n const otherEvents = coveoua.q.filter((args: [string, any[]]) => args[0] !== 'init');\n [...initEvents, ...otherEvents].forEach((args: [string, any[]]) => handleOneAnalyticsEvent.apply(void 0, args));\n}\n\nexport default self.coveoua;\n"],"names":["EventType","hasNavigator","navigator","hasDocument","document","hasLocalStorage","localStorage","error","hasCookieStorage","cookieEnabled","hasCryptoRandomValues","crypto","getRandomValues","eventTypesForDefaultValues","click","custom","search","view","addDefaultValues","eventType","payload","indexOf","language","documentElement","lang","userAgent","Cookie","set","name","value","expiration","domainParts","date","expires","host","Date","setTime","getTime","toGMTString","window","location","hostname","cookie","split","shift","writeCookie","domain","join","get","cookiePrefix","cookieArray","i","length","replace","substring","erase","details","getAvailableStorage","detector.hasLocalStorage","detector.hasCookieStorage","CookieStorage","sessionStorage","detector.hasSessionStorage","NullStorage","prototype","getItem","key","prefix","removeItem","setItem","data","CookieAndLocalStorage","this","cookieStorage","STORE_KEY","HistoryStore","store","addElement","elem","internalTime","cropQueryElement","stripEmptyQuery","currentHistory","getHistoryWithInternalTime","isValidEntry","setHistory","concat","addElementAsync","getHistoryWithInternalTimeAsync","_a","sent","getHistory","history","stripEmptyQueries","stripInternalTime","getHistoryAsync","elements","JSON","parse","e","stringify","slice","clear","getMostRecentElement","sort","first","second","part","toLowerCase","lastEntry","map","time","trim","_this","enhanceViewEvent","__awaiter","addPageViewToHistory","contentIdValue","__assign","toString","referrer","title","pageViewValue","historyElement","uuidv4","a","Number","Uint8Array","rnds","r","Math","random","keysOf","Object","keys","ticketKeysMapping","id","subject","description","category","productId","ticketSubKeysMatchGroup","__spreadArrays","ticketKeyRegex","RegExp","isServiceKey","test","productKeysMapping","brand","variant","price","quantity","coupon","position","group","impressionKeysMapping","productActionsKeysMapping","action","list","listSource","transactionActionsKeysMapping","revenue","tax","shipping","affiliation","step","option","quoteActionsKeysMapping","reviewActionsKeysMapping","rating","comment","commerceActionKeysMappingPerAction","add","bookmark_add","bookmark_remove","checkout","checkout_option","detail","impression","remove","refund","purchase","quickview","quote","review","convertImpressionToMeasurementProtocol","listIndex","productIndex","reduce","mappedImpression","newKey","productKeysMappingValues","impressionKeysMappingValues","productActionsKeysMappingValues","transactionActionsKeysMappingValues","reviewKeysMappingValues","quoteKeysMappingValues","productSubKeysMatchGroup","impressionSubKeysMatchGroup","productKeyRegex","impressionKeyRegex","productActionsKeyRegex","transactionActionsKeyRegex","customProductKeyRegex","customImpressionKeyRegex","coveoCommerceExtensionKeysRegex","isCommerceKey","isCustomCommerceKey","baseMeasurementProtocolKeysMapping","anonymizeIp","eventCategory","eventAction","eventLabel","eventValue","page","visitorId","clientId","userId","currencyCode","hitType","pageViewId","encoding","screenColor","screenResolution","eventId","all","measurementProtocolKeysMapping","svcAction","svcActionData","measurementProtocolKeysMappingValues","isKnownMeasurementProtocolKey","isCustomKey","getFirstCustomMeasurementProtocolKeyMatch","matchedKey","undefined","every","regex","exec","Boolean","convertCustomObject","customData","allCustom","currentCustomKey","AnalyticsBeaconClient","opts","sendEvent","sendBeacon","Error","baseUrl","preprocessRequest","parsedRequestData","encodeForEventType","getQueryParamsForEventType","paramsFragments","_e","defaultOptions","url","body","Blob","type","_d","_b","apply","_c","console","log","deleteHttpCookieVisitorId","Promise","resolve","isEventTypeLegacy","encodeForLegacyType","encodeForFormUrlEncoded","access_token","token","visitorIdProvider","getCurrentVisitorId","filter","p","encodeURIComponent","encodeValue","NoopAnalyticsClient","_","__","fetch","AnalyticsFetchClient","shouldAppendVisitorId","getVisitorIdParam","_f","credentials","mode","headers","getHeaders","method","fetchData","__rest","response","ok","json","visit","setCurrentVisitorId","_g","Authorization","BrowserRuntime","clientOptions","getUnprocessedRequests","storage","warn","client","beaconClient","addEventListener","requests_1","_i","NodeJSRuntime","NoopRuntime","doNotTrackValues","doNotTrack","globalPrivacyControl","msDoNotTrack","some","Version","Endpoints","default","production","hipaa","buildBaseUrl","endpoint","apiVersion","endpointIsCoveoProxy","InsightEvents","SearchPageEvents","CoveoAnalyticsClient","options","bufferedRequests","beforeSendHooks","afterSendHooks","eventTypeMapping","clientsOptions","runtime","runtimeEnvironment","initRuntime","defineProperty","version","copy","product","determineVisitorId","err_1","getParameters","arguments","resolveParameters","getPayload","parametersToSend","resolvePayloadForParameters","variableLengthArgumentsNames","addVisitorIdParameter","usesMeasurementProtocol","addClientIdParameter","addVisitorIdStep","currentPayload","addClientIdStep","processBeforeSendHooksStep","promisePayload","current","parseVariableArgumentsPayload","ensureAnonymousUserWhenUsingApiKey","payloadPromise","parameters","processMeasurementProtocolConversionStep","keysMappingForAction","params","mappedKeys","removeEmptyPayloadValues","validateParams","removeUnknownParameters","processCustomParameters","eventTypeToSend","payloadToSend","push","hook","deferExecution","sendFromBufferWithFetch","setTimeout","popped","deleteHttpOnlyVisitorId","sendSearchEvent","request","sendClickEvent","sendCustomEvent","sendViewEvent","getVisit","getHealth","registerBeforeSendEventHook","registerAfterSendEventHook","addEventTypeMapping","eventConfig","fieldsOrder","parsedArguments","length_1","currentArgument","isKeyAllowedEmpty","evtType","newPayload","isMeasurementProtocolKey","rest","lowercasedCustom","lowercaseKeys","match","startsWith","getFormattedLocation","protocol","pathname","BasePluginEventTypes","pageview","event","BasePlugin","uuidGenerator","actionData","nextPageViewId","currentLocation","lastReferrer","addHooks","setAction","clearData","clearPluginData","getLocationInformation","getNextValues","updateLocationInformation","updateLocationForNextPageView","getDefaultContextInformation","documentContext","characterSet","screenContext","screen","width","height","colorDepth","navigatorContext","eventContext","now","hasSentFirstPageView","getCurrentLocationFromPayload","ECPluginEventTypes","allECEventTypes","ECPlugin","_super","call","products","impressions","__extends","addHooksForPageView","addHooksForEvent","addHooksForECEvents","addProduct","addImpression","addECDataToPayload","newEventType","collect","ecPayload","productPayload","getProductPayload","impressionPayload","getImpressionPayload","assureProductValidity","index","mappedProduct","convertProductToMeasurementProtocol","getImpressionsByList","baseImpression","assureBaseImpressionValidity","impressionList","mappedImpressions","listName","convertImpressionListToMeasurementProtocol","productRest","baseImpressionRest","lists","find","Id","EC","SVCPluginEventTypes","allSVCEventTypes","SVCPlugin","ticket","addHooksForSVCEvents","setTicket","addSVCDataToPayload","svcPayload","ticketPayload","getTicketPayload","mappedTicket","SVC","Plugins","registeredPluginsMap","requiredPlugins","require","pluginClass","provide","plugin","clearRequired","execute","fn","pluginOptions","actionFunction","DefaultPlugins","CoveoUA","plugins","init","optionsOrEndpoint","getEndpoint","isAnalyticsClient","pluginOptions_1","getPluginKeys","forEach","pluginKey","Array","isArray","initForProxy","keyOrObject","send","onLoad","callback","callPlugin","pluginName","args","reset","coveoua","getCurrentClient","handleOneAnalyticsEvent","command","actions","CustomEventsTypes","triggerNotify","triggerExecute","triggerQuery","triggerRedirect","queryError","queryErrorBack","queryErrorClear","queryErrorRetry","pagerNext","pagerPrevious","pagerNumber","pagerResize","pagerScrolling","facetSearch","facetShowLess","facetShowMore","recommendation","likeSmartSnippet","dislikeSmartSnippet","expandSmartSnippet","collapseSmartSnippet","openSmartSnippetFeedbackModal","closeSmartSnippetFeedbackModal","sendSmartSnippetReason","expandSmartSnippetSuggestion","collapseSmartSnippetSuggestion","showMoreSmartSnippetSuggestion","showLessSmartSnippetSuggestion","clearRecentQueries","recentResultClick","clearRecentResults","showLessFoldedResults","expandToFullUI","NoopAnalytics","currentVisitorId","status","getDataString","formattedData","formatArrayForCoveoCustomData","rawData","dataWithoutSemicolons","removeSemicolons","dataWithoutRepeatedValues","prev","isDifferent","filterConsecutiveRepeatedValues","formatOmniboxMetadata","meta","partialQueries","suggestions","CaseAssistEvents","CaseAssistActions","CaseCancelledReasons","CoveoSearchPageClient","provider","shouldDisableAnalytics","enableAnalytics","coveoAnalyticsClient","disable","enable","makeInterfaceLoad","makeSearchEvent","interfaceLoad","logInterfaceLoad","makeRecommendationInterfaceLoad","recommendationInterfaceLoad","logRecommendationInterfaceLoad","makeRecommendation","makeCustomEvent","logRecommendation","makeRecommendationOpen","info","identifier","makeClickEvent","recommendationOpen","logRecommendationOpen","makeStaticFilterClearAll","staticFilterClearAll","logStaticFilterClearAll","makeStaticFilterSelect","staticFilterSelect","logStaticFilterSelect","makeStaticFilterDeselect","staticFilterDeselect","logStaticFilterDeselect","makeFetchMoreResults","logFetchMoreResults","makeInterfaceChange","metadata","interfaceChange","logInterfaceChange","makeDidYouMeanAutomatic","didyoumeanAutomatic","logDidYouMeanAutomatic","makeDidYouMeanClick","didyoumeanClick","logDidYouMeanClick","makeResultsSort","resultsSort","logResultsSort","makeSearchboxSubmit","searchboxSubmit","logSearchboxSubmit","makeSearchboxClear","searchboxClear","logSearchboxClear","makeSearchboxAsYouType","searchboxAsYouType","logSearchboxAsYouType","makeBreadcrumbFacet","breadcrumbFacet","logBreadcrumbFacet","makeBreadcrumbResetAll","breadcrumbResetAll","logBreadcrumbResetAll","makeDocumentQuickview","documentQuickview","logDocumentQuickview","makeDocumentOpen","documentOpen","logDocumentOpen","makeOmniboxAnalytics","omniboxAnalytics","logOmniboxAnalytics","makeOmniboxFromLink","omniboxFromLink","logOmniboxFromLink","makeSearchFromLink","searchFromLink","logSearchFromLink","makeTriggerNotify","logTriggerNotify","makeTriggerExecute","logTriggerExecute","makeTriggerQuery","query","getSearchEventRequestPayload","queryText","logTriggerQuery","makeUndoTriggerQuery","undoTriggerQuery","logUndoTriggerQuery","makeTriggerRedirect","logTriggerRedirect","makePagerResize","logPagerResize","makePagerNumber","logPagerNumber","makePagerNext","logPagerNext","makePagerPrevious","logPagerPrevious","makePagerScrolling","logPagerScrolling","makeFacetClearAll","facetClearAll","logFacetClearAll","makeFacetSearch","logFacetSearch","makeFacetSelect","facetSelect","logFacetSelect","makeFacetDeselect","facetDeselect","logFacetDeselect","makeFacetExclude","facetExclude","logFacetExclude","makeFacetUnexclude","facetUnexclude","logFacetUnexclude","makeFacetSelectAll","facetSelectAll","logFacetSelectAll","makeFacetUpdateSort","facetUpdateSort","logFacetUpdateSort","makeFacetShowMore","logFacetShowMore","makeFacetShowLess","logFacetShowLess","makeQueryError","logQueryError","makeQueryErrorBack","makeDescription","logCustomEvent","logSearchEvent","logQueryErrorBack","makeQueryErrorRetry","logQueryErrorRetry","makeQueryErrorClear","logQueryErrorClear","makeLikeSmartSnippet","logLikeSmartSnippet","makeDislikeSmartSnippet","logDislikeSmartSnippet","makeExpandSmartSnippet","logExpandSmartSnippet","makeCollapseSmartSnippet","logCollapseSmartSnippet","makeOpenSmartSnippetFeedbackModal","logOpenSmartSnippetFeedbackModal","makeCloseSmartSnippetFeedbackModal","logCloseSmartSnippetFeedbackModal","makeSmartSnippetFeedbackReason","reason","logSmartSnippetFeedbackReason","makeExpandSmartSnippetSuggestion","snippet","documentId","logExpandSmartSnippetSuggestion","makeCollapseSmartSnippetSuggestion","logCollapseSmartSnippetSuggestion","makeShowMoreSmartSnippetSuggestion","logShowMoreSmartSnippetSuggestion","makeShowLessSmartSnippetSuggestion","logShowLessSmartSnippetSuggestion","makeOpenSmartSnippetSource","openSmartSnippetSource","logOpenSmartSnippetSource","makeOpenSmartSnippetSuggestionSource","openSmartSnippetSuggestionSource","contentIDKey","contentIdKey","contentIDValue","logOpenSmartSnippetSuggestionSource","makeOpenSmartSnippetInlineLink","identifierAndLink","openSmartSnippetInlineLink","logOpenSmartSnippetInlineLink","makeOpenSmartSnippetSuggestionInlineLink","snippetAndLink","openSmartSnippetSuggestionInlineLink","logOpenSmartSnippetSuggestionInlineLink","makeRecentQueryClick","recentQueryClick","logRecentQueryClick","makeClearRecentQueries","logClearRecentQueries","makeRecentResultClick","logRecentResultClick","makeClearRecentResults","logClearRecentResults","makeNoResultsBack","noResultsBack","logNoResultsBack","makeShowMoreFoldedResults","showMoreFoldedResults","logShowMoreFoldedResults","makeShowLessFoldedResults","logShowLessFoldedResults","getBaseMetadata","getBaseCustomEventRequest","makeCustomEventWithType","actionCause","logCustomEventWithType","getBaseSearchEventRequest","logClickEvent","getBaseEventRequest","searchQueryUid","getSearchUID","queryPipeline","getPipeline","lastSearchQueryUid","getOrigins","getSplitTestRun","getLanguage","facetState","getFacetState","anonymous","getIsAnonymous","getClientId","originContext","getOriginContext","originLevel1","getOriginLevel1","originLevel2","getOriginLevel2","originLevel3","getOriginLevel3","splitTestRunName","getSplitTestRunName","splitTestRunVersion","getSplitTestRunVersion","CaseAssistClient","analyticsEnabled","svc","logEnterInterface","enterInterface","sendFlowStartEvent","logUpdateCaseField","fieldUpdate","fieldName","logSelectFieldSuggestion","fieldSuggestionClick","suggestion","logSelectDocumentSuggestion","suggestionClick","logRateDocumentSuggestion","suggestionRate","rate","logMoveToNextCaseStep","nextCaseStep","stage","logCaseCancelled","caseCancelled","quit","logCaseSolved","caseSolved","solved","logCaseCreated","caseCreated","flowStart","searchHub","generateMetadataToSend","includeContext","caseContext","caseId","caseNumber","metadataWithoutContext","context","contextKey","extractContextFromMetadata","CaseId","CaseNumber","context_Case_Subject","CaseSubject","CoveoInsightClient","metadataToSend","logContextChanged","contextChanged","logExpandToFullUI","Function","self","coveoanalytics","analytics","q"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"coveoua.browser.js","sources":["../src/events.ts","../src/detector.ts","../src/hook/addDefaultValues.ts","../src/cookieutils.ts","../src/storage.ts","../src/history.ts","../src/hook/enhanceViewEvent.ts","../src/client/crypto.ts","../src/client/utils.ts","../src/client/measurementProtocolMapping/serviceMeasurementProtocolMapper.ts","../src/client/measurementProtocolMapping/commerceMeasurementProtocolMapper.ts","../src/client/measurementProtocolMapping/baseMeasurementProtocolMapper.ts","../src/client/measurementProtocolMapper.ts","../src/client/analyticsBeaconClient.ts","../src/client/analyticsRequestClient.ts","../bundle/browser-fetch.ts","../src/client/analyticsFetchClient.ts","../src/client/runtimeEnvironment.ts","../src/donottrack.ts","../src/client/analytics.ts","../src/insight/insightEvents.ts","../src/searchPage/searchPageEvents.ts","../src/react-native/react-native-utils.ts","../src/client/token.ts","../src/client/location.ts","../src/plugins/BasePlugin.ts","../src/plugins/ec.ts","../src/plugins/svc.ts","../src/coveoua/plugins.ts","../src/coveoua/simpleanalytics.ts","../src/client/noopAnalytics.ts","../src/formatting/format-array-for-coveo-custom-data.ts","../src/formatting/format-omnibox-metadata.ts","../src/searchPage/searchPageClient.ts","../src/caseAssist/caseAssistActions.ts","../src/caseAssist/caseAssistClient.ts","../src/insight/insightClient.ts","../src/coveoua/browser.ts"],"sourcesContent":["export type IRequestPayload = Record<string, any>;\n\nexport enum EventType {\n search = 'search',\n click = 'click',\n custom = 'custom',\n view = 'view',\n collect = 'collect',\n}\n\nexport interface SearchDocument {\n documentUri: string;\n documentUriHash: string;\n}\n\nexport type SendEventArguments = [EventType, ...any[]];\n\nexport type VariableArgumentsPayload =\n | []\n | [any]\n | [string, any]\n | [string, string, any]\n | [string, string, string, any]\n | [string, string, string, string, any];\n\nexport interface EventBaseRequest {\n language?: string;\n userAgent?: string;\n customData?: Record<string, any>;\n anonymous?: boolean;\n username?: string;\n userDisplayName?: any;\n splitTestRunName?: string;\n splitTestRunVersion?: string;\n clientId?: string;\n originContext?: string;\n originLevel1?: string;\n originLevel2?: string;\n originLevel3?: string;\n}\n\nexport interface FacetStateRequest {\n field: string;\n id: string;\n value: string;\n valuePosition: number;\n displayValue: string;\n facetType: 'specific' | 'dateRange' | 'numericalRange' | 'hierarchical';\n state: 'selected' | 'idle';\n facetPosition: number;\n title: string;\n start?: string;\n end?: string;\n endInclusive?: boolean;\n}\n\nexport interface SearchEventRequest extends EventBaseRequest {\n searchQueryUid: string;\n queryText: string;\n actionCause: string;\n responseTime: number;\n advancedQuery?: string;\n numberOfResults?: number;\n contextual?: boolean;\n results?: SearchDocument[];\n queryPipeline?: string;\n userGroups?: string[];\n facetState?: FacetStateRequest[];\n}\n\nexport interface DocumentInformation {\n documentUri: string;\n documentUriHash: string;\n collectionName: string;\n sourceName: string;\n documentPosition: number;\n actionCause: string;\n\n searchQueryUid: string;\n documentTitle: string;\n documentUrl: string;\n documentAuthor: string;\n queryPipeline: string;\n rankingModifier: string;\n}\n\nexport interface ClickEventRequest extends EventBaseRequest, DocumentInformation {}\n\nexport interface CustomEventRequest extends EventBaseRequest {\n eventType: string;\n eventValue: string;\n lastSearchQueryUid?: string;\n}\n\nexport interface ViewEventRequest extends EventBaseRequest {\n location?: string;\n referrer?: string;\n title?: string;\n contentIdKey: string;\n contentIdValue: string;\n contentType?: string;\n}\n\nexport interface DefaultEventResponse {\n visitId: string;\n visitorId: string;\n}\n\nexport interface SearchEventResponse extends DefaultEventResponse {}\nexport interface ClickEventResponse extends DefaultEventResponse {}\nexport interface CustomEventResponse extends DefaultEventResponse {}\nexport interface ViewEventResponse extends DefaultEventResponse {}\n\nexport type AnyEventResponse = SearchEventResponse | ClickEventResponse | CustomEventResponse | ViewEventResponse;\n\nexport interface VisitResponse {\n id: string;\n visitorId: string;\n}\nexport interface HealthResponse {\n status: string;\n}\n","export function hasWindow(): boolean {\n return typeof window !== 'undefined';\n}\n\nexport function hasNavigator(): boolean {\n return typeof navigator !== 'undefined';\n}\n\nexport function hasDocument(): boolean {\n return typeof document !== 'undefined';\n}\n\nexport function hasLocalStorage(): boolean {\n try {\n return typeof localStorage !== 'undefined';\n } catch (error) {\n return false;\n }\n}\n\nexport function hasSessionStorage(): boolean {\n try {\n return typeof sessionStorage !== 'undefined';\n } catch (error) {\n return false;\n }\n}\n\nexport function hasCookieStorage(): boolean {\n return hasNavigator() && navigator.cookieEnabled;\n}\n\nexport function hasCrypto(): boolean {\n return typeof crypto !== 'undefined';\n}\n\nexport function hasCryptoRandomValues(): boolean {\n return hasCrypto() && typeof crypto.getRandomValues !== 'undefined';\n}\n\nexport function hasLocation(): boolean {\n return typeof location !== 'undefined';\n}\n","import {AnalyticsClientSendEventHook} from '../client/analytics';\nimport {hasDocument, hasNavigator} from '../detector';\nimport {EventType} from '../events';\n\nconst eventTypesForDefaultValues: string[] = [EventType.click, EventType.custom, EventType.search, EventType.view];\n\nexport const addDefaultValues: AnalyticsClientSendEventHook = (eventType, payload) => {\n return eventTypesForDefaultValues.indexOf(eventType) !== -1\n ? {\n language: hasDocument() ? document.documentElement.lang : 'unknown',\n userAgent: hasNavigator() ? navigator.userAgent : 'unknown',\n ...payload,\n }\n : payload;\n};\n","interface CookieDetails {\n name: string;\n value: string;\n expires: string;\n domain: string;\n}\n\n// Code originally taken from : https://developers.livechatinc.com/blog/setting-cookies-to-subdomains-in-javascript/\nexport class Cookie {\n static set(name: string, value: string, expiration?: number) {\n var domain: string, domainParts: string[], date: any, expires: string, host: string;\n\n if (expiration) {\n date = new Date();\n date.setTime(date.getTime() + expiration);\n expires = '; expires=' + date.toGMTString();\n } else {\n expires = '';\n }\n\n host = window.location.hostname;\n if (host.indexOf('.') === -1) {\n // no \".\" in a domain - it's localhost or something similar\n document.cookie = name + '=' + value + expires + '; path=/';\n } else {\n // Remember the cookie on all subdomains.\n //\n // Start with trying to set cookie to the top domain.\n // (example: if user is on foo.com, try to set\n // cookie to domain \".com\")\n //\n // If the cookie will not be set, it means \".com\"\n // is a top level domain and we need to\n // set the cookie to \".foo.com\"\n domainParts = host.split('.');\n domainParts.shift();\n domain = '.' + domainParts.join('.');\n\n writeCookie({name, value, expires, domain});\n\n // check if cookie was successfuly set to the given domain\n // (otherwise it was a Top-Level Domain)\n if (Cookie.get(name) == null || Cookie.get(name) != value) {\n // append \".\" to current domain\n domain = '.' + host;\n writeCookie({name, value, expires, domain});\n }\n }\n }\n\n static get(name: string) {\n var cookiePrefix = name + '=';\n var cookieArray = document.cookie.split(';');\n for (var i = 0; i < cookieArray.length; i++) {\n var cookie = cookieArray[i];\n cookie = cookie.replace(/^\\s+/, '');\n\n if (cookie.indexOf(cookiePrefix) == 0) {\n return cookie.substring(cookiePrefix.length, cookie.length);\n }\n }\n return null;\n }\n\n static erase(name: string) {\n Cookie.set(name, '', -1);\n }\n}\n\nfunction writeCookie(details: CookieDetails) {\n const {name, value, expires, domain} = details;\n document.cookie = `${name}=${value}${expires}; path=/; domain=${domain}; SameSite=Lax`;\n}\n","import * as detector from './detector';\nimport {Cookie} from './cookieutils';\n\nexport let preferredStorage: WebStorage | null = null;\n\nexport interface WebStorage {\n getItem(key: string): string | null | Promise<string | null>;\n removeItem(key: string): void;\n setItem(key: string, data: string): void | Promise<void>;\n}\n\nexport function getAvailableStorage(): WebStorage {\n if (preferredStorage) {\n return preferredStorage;\n }\n if (detector.hasLocalStorage()) {\n return localStorage;\n }\n if (detector.hasCookieStorage()) {\n return new CookieStorage();\n }\n if (detector.hasSessionStorage()) {\n return sessionStorage;\n }\n return new NullStorage();\n}\n\nexport class CookieStorage implements WebStorage {\n static prefix = 'coveo_';\n getItem(key: string): string | null {\n return Cookie.get(`${CookieStorage.prefix}${key}`);\n }\n removeItem(key: string) {\n Cookie.erase(`${CookieStorage.prefix}${key}`);\n }\n setItem(key: string, data: string): void {\n Cookie.set(`${CookieStorage.prefix}${key}`, data);\n }\n}\n\nexport class CookieAndLocalStorage implements WebStorage {\n private cookieStorage = new CookieStorage();\n\n getItem(key: string): string | null {\n return localStorage.getItem(key) || this.cookieStorage.getItem(key);\n }\n\n removeItem(key: string): void {\n this.cookieStorage.removeItem(key);\n localStorage.removeItem(key);\n }\n\n setItem(key: string, data: string): void {\n localStorage.setItem(key, data);\n this.cookieStorage.setItem(key, data);\n }\n}\n\nexport class NullStorage implements WebStorage {\n getItem(key: string): string | null {\n return null;\n }\n removeItem(key: string) {\n /**/\n }\n setItem(key: string, data: string): void {\n /**/\n }\n}\n","import {getAvailableStorage, WebStorage} from './storage';\n\nexport const STORE_KEY: string = '__coveo.analytics.history';\nexport const MAX_NUMBER_OF_HISTORY_ELEMENTS: number = 20;\nexport const MIN_THRESHOLD_FOR_DUPLICATE_VALUE: number = 1000 * 60;\nexport const MAX_VALUE_SIZE = 75;\n\nexport class HistoryStore {\n private store: WebStorage;\n constructor(store?: WebStorage) {\n this.store = store || getAvailableStorage();\n }\n\n /**\n * @deprecated Synchronous method is deprecated, use addElementAsync instead. This method will NOT work with react-native.\n */\n addElement(elem: HistoryElement) {\n elem.internalTime = new Date().getTime();\n elem = this.cropQueryElement(this.stripEmptyQuery(elem));\n let currentHistory = this.getHistoryWithInternalTime();\n if (currentHistory != null) {\n if (this.isValidEntry(elem)) {\n this.setHistory([elem].concat(currentHistory));\n }\n } else {\n this.setHistory([elem]);\n }\n }\n\n async addElementAsync(elem: HistoryElement) {\n elem.internalTime = new Date().getTime();\n elem = this.cropQueryElement(this.stripEmptyQuery(elem));\n let currentHistory = await this.getHistoryWithInternalTimeAsync();\n if (currentHistory != null) {\n if (this.isValidEntry(elem)) {\n this.setHistory([elem].concat(currentHistory));\n }\n } else {\n this.setHistory([elem]);\n }\n }\n\n /**\n * @deprecated Synchronous method is deprecated, use getHistoryAsync instead. This method will NOT work with react-native.\n */\n getHistory(): HistoryElement[] {\n const history = this.getHistoryWithInternalTime();\n return this.stripEmptyQueries(this.stripInternalTime(history));\n }\n\n async getHistoryAsync(): Promise<HistoryElement[]> {\n const history = await this.getHistoryWithInternalTimeAsync();\n return this.stripEmptyQueries(this.stripInternalTime(history));\n }\n\n private getHistoryWithInternalTime(): HistoryElement[] {\n try {\n const elements = this.store.getItem(STORE_KEY);\n if (elements && typeof elements === 'string') {\n return JSON.parse(elements) as HistoryElement[];\n } else {\n return [];\n }\n } catch (e) {\n // When using the Storage APIs (localStorage/sessionStorage)\n // Safari says that those APIs are available but throws when making\n // a call to them.\n return [];\n }\n }\n\n private async getHistoryWithInternalTimeAsync(): Promise<HistoryElement[]> {\n try {\n const elements = await this.store.getItem(STORE_KEY);\n if (elements) {\n return JSON.parse(elements) as HistoryElement[];\n } else {\n return [];\n }\n } catch (e) {\n // When using the Storage APIs (localStorage/sessionStorage)\n // Safari says that those APIs are available but throws when making\n // a call to them.\n return [];\n }\n }\n\n setHistory(history: HistoryElement[]) {\n try {\n this.store.setItem(STORE_KEY, JSON.stringify(history.slice(0, MAX_NUMBER_OF_HISTORY_ELEMENTS)));\n } catch (e) {\n /* refer to this.getHistory() */\n }\n }\n\n clear() {\n try {\n this.store.removeItem(STORE_KEY);\n } catch (e) {\n /* refer to this.getHistory() */\n }\n }\n\n getMostRecentElement(): HistoryElement | null {\n let currentHistory = this.getHistoryWithInternalTime();\n if (currentHistory != null) {\n const sorted = currentHistory.sort((first: HistoryElement, second: HistoryElement) => {\n // Internal time might not be set for all history element (on upgrade).\n // Ensure to return the most recent element for which we have a value for internalTime.\n return (second.internalTime || 0) - (first.internalTime || 0);\n });\n return sorted[0];\n }\n return null;\n }\n\n private cropQueryElement(part: HistoryElement) {\n if (part.name && part.value && part.name.toLowerCase() === 'query') {\n part.value = part.value.slice(0, MAX_VALUE_SIZE);\n }\n\n return part;\n }\n\n private isValidEntry(elem: HistoryElement): boolean {\n let lastEntry = this.getMostRecentElement();\n\n if (lastEntry && lastEntry.value == elem.value) {\n return (elem.internalTime || 0) - (lastEntry.internalTime || 0) > MIN_THRESHOLD_FOR_DUPLICATE_VALUE;\n }\n return true;\n }\n\n private stripInternalTime(history: HistoryElement[]): HistoryElement[] {\n return history.map((part) => {\n const {name, time, value} = part;\n return {name, time, value};\n });\n }\n\n private stripEmptyQuery(part: HistoryElement) {\n const {name, time, value} = part;\n if (name && typeof value === 'string' && name.toLowerCase() === 'query' && value.trim() === '') {\n return {name, time};\n }\n\n return part;\n }\n\n private stripEmptyQueries(history: HistoryElement[]): HistoryElement[] {\n return history.map((part) => this.stripEmptyQuery(part));\n }\n}\n\nexport interface HistoryElement {\n name: string;\n value?: string;\n time: string;\n internalTime?: number;\n}\n\nexport interface HistoryViewElement extends HistoryElement {\n title?: string;\n}\n\nexport default HistoryStore;\n","import {AnalyticsClientSendEventHook} from '../client/analytics';\nimport {ViewEventRequest, EventType} from '../events';\nimport {HistoryStore, STORE_KEY} from '../history';\n\nexport const enhanceViewEvent: AnalyticsClientSendEventHook = async (eventType, payload) => {\n if (eventType === EventType.view) {\n await addPageViewToHistory(payload.contentIdValue);\n return {\n location: window.location.toString(),\n referrer: document.referrer,\n title: document.title,\n ...payload,\n } as ViewEventRequest;\n }\n\n return payload;\n};\n\nconst addPageViewToHistory = async (pageViewValue: string) => {\n const store = new HistoryStore();\n const historyElement = {\n name: 'PageView',\n value: pageViewValue,\n time: JSON.stringify(new Date()),\n };\n await store.addElementAsync(historyElement);\n};\n","import {hasCryptoRandomValues} from '../detector';\n\nexport const uuidv4 = (a?: number | string): string => {\n if (!!a) {\n return (Number(a) ^ (getRandomValues(new Uint8Array(1))[0] % 16 >> (Number(a) / 4))).toString(16);\n }\n return (`${1e7}` + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, uuidv4);\n};\n\nconst getRandomValues = (rnds: Uint8Array) => {\n if (hasCryptoRandomValues()) {\n return crypto.getRandomValues(rnds);\n }\n for (var i = 0, r = 0; i < rnds.length; i++) {\n if ((i & 0x03) === 0) {\n r = Math.random() * 0x100000000;\n }\n rnds[i] = (r >>> ((i & 0x03) << 3)) & 0xff;\n }\n return rnds;\n};\n","// Object.keys returns `string[]` this adds types\n// see https://github.com/microsoft/TypeScript/pull/12253#issuecomment-393954723\nexport const keysOf = Object.keys as <T>(o: T) => Extract<keyof T, string>[];\n","import {Ticket} from '../../plugins/svc';\nimport {keysOf} from '../utils';\n\nconst ticketKeysMapping: {[key in keyof Ticket]: string} = {\n id: 'svc_ticket_id',\n subject: 'svc_ticket_subject',\n description: 'svc_ticket_description',\n category: 'svc_ticket_category',\n productId: 'svc_ticket_product_id',\n custom: 'svc_ticket_custom',\n};\nconst ticketKeysMappingValues = keysOf(ticketKeysMapping).map((key) => ticketKeysMapping[key]);\nconst ticketSubKeysMatchGroup = [...ticketKeysMappingValues].join('|');\nconst ticketKeyRegex = new RegExp(`^(${ticketSubKeysMatchGroup}$)`);\n\nexport const serviceActionsKeysMapping: {[name: string]: string} = {\n svcAction: 'svc_action',\n svcActionData: 'svc_action_data',\n};\n\nexport const convertTicketToMeasurementProtocol = (ticket: Ticket) => {\n return keysOf(ticket)\n .filter((key) => ticket[key] !== undefined)\n .reduce((mappedTicket, key) => {\n const newKey = ticketKeysMapping[key] || key;\n return {\n ...mappedTicket,\n [newKey]: ticket[key],\n };\n }, {});\n};\n\nconst isTicketKey = (key: string) => ticketKeyRegex.test(key);\n\nexport const isServiceKey = [isTicketKey];\n","import {Product, ImpressionList, BaseImpression} from '../../plugins/ec';\nimport {keysOf} from '../utils';\n\n// Based off: https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#enhanced-ecomm\nconst productKeysMapping: {[key in keyof Product]: string} = {\n id: 'id',\n name: 'nm',\n brand: 'br',\n category: 'ca',\n variant: 'va',\n price: 'pr',\n quantity: 'qt',\n coupon: 'cc',\n position: 'ps',\n // Below are keys that were extended for Coveo\n group: 'group',\n};\n\nconst impressionKeysMapping: {[key in keyof BaseImpression]: string} = {\n id: 'id',\n name: 'nm',\n brand: 'br',\n category: 'ca',\n variant: 'va',\n position: 'ps',\n price: 'pr',\n // Below are keys that were extended for Coveo\n group: 'group',\n};\n\nconst productActionsKeysMapping: {[name: string]: string} = {\n action: 'pa',\n list: 'pal',\n listSource: 'pls',\n};\n\nconst transactionActionsKeysMapping: {[name: string]: string} = {\n id: 'ti',\n revenue: 'tr',\n tax: 'tt',\n shipping: 'ts',\n coupon: 'tcc',\n affiliation: 'ta',\n step: 'cos',\n option: 'col',\n};\n\n// These extension keys do not have direct mappings, we are sending them as-is, thus only requiring an array.\nconst coveoCommerceExtensionKeys: string[] = [\n 'loyaltyCardId',\n 'loyaltyTier',\n 'thirdPartyPersona',\n 'companyName',\n 'favoriteStore',\n 'storeName',\n 'userIndustry',\n 'userRole',\n 'userDepartment',\n 'businessUnit',\n];\n\nconst quoteActionsKeysMapping: {[name: string]: string} = {\n id: 'quoteId',\n affiliation: 'quoteAffiliation',\n};\n\nconst reviewActionsKeysMapping: {[name: string]: string} = {\n id: 'reviewId',\n rating: 'reviewRating',\n comment: 'reviewComment',\n};\n\nexport const commerceActionKeysMappingPerAction: Record<string, {[name: string]: string}> = {\n add: productActionsKeysMapping,\n bookmark_add: productActionsKeysMapping,\n bookmark_remove: productActionsKeysMapping,\n click: productActionsKeysMapping,\n checkout: productActionsKeysMapping,\n checkout_option: productActionsKeysMapping,\n detail: productActionsKeysMapping,\n impression: productActionsKeysMapping,\n remove: productActionsKeysMapping,\n refund: {\n ...productActionsKeysMapping,\n ...transactionActionsKeysMapping,\n },\n purchase: {\n ...productActionsKeysMapping,\n ...transactionActionsKeysMapping,\n },\n quickview: productActionsKeysMapping,\n quote: {\n ...productActionsKeysMapping,\n ...quoteActionsKeysMapping,\n },\n review: {\n ...productActionsKeysMapping,\n ...reviewActionsKeysMapping,\n },\n};\n\nexport const convertProductToMeasurementProtocol = (product: Product, index: number) => {\n return keysOf(product).reduce((mappedProduct, key) => {\n const newKey = `pr${index + 1}${productKeysMapping[key] || key}`;\n return {\n ...mappedProduct,\n [newKey]: product[key],\n };\n }, {});\n};\n\nexport const convertImpressionListToMeasurementProtocol = (\n impressionList: ImpressionList,\n listIndex: number,\n prefix: string\n) => {\n const payload: {[name: string]: any} = impressionList.impressions.reduce(\n (mappedImpressions, impression, productIndex) => {\n return {\n ...mappedImpressions,\n ...convertImpressionToMeasurementProtocol(impression, listIndex, productIndex, prefix),\n };\n },\n {}\n );\n\n if (impressionList.listName) {\n const listNameKey = `il${listIndex + 1}nm`;\n payload[listNameKey] = impressionList.listName;\n }\n return payload;\n};\n\nconst convertImpressionToMeasurementProtocol = (\n impression: BaseImpression,\n listIndex: number,\n productIndex: number,\n prefix: string\n) => {\n return keysOf(impression).reduce((mappedImpression, key) => {\n const newKey = `il${listIndex + 1}${prefix}${productIndex + 1}${impressionKeysMapping[key] || key}`;\n return {\n ...mappedImpression,\n [newKey]: impression[key],\n };\n }, {});\n};\n\nconst productKeysMappingValues = keysOf(productKeysMapping).map((key) => productKeysMapping[key]);\nconst impressionKeysMappingValues = keysOf(impressionKeysMapping).map((key) => impressionKeysMapping[key]);\nconst productActionsKeysMappingValues = keysOf(productActionsKeysMapping).map((key) => productActionsKeysMapping[key]);\nconst transactionActionsKeysMappingValues = keysOf(transactionActionsKeysMapping).map(\n (key) => transactionActionsKeysMapping[key]\n);\nconst reviewKeysMappingValues = keysOf(reviewActionsKeysMapping).map((key) => reviewActionsKeysMapping[key]);\nconst quoteKeysMappingValues = keysOf(quoteActionsKeysMapping).map((key) => quoteActionsKeysMapping[key]);\n\nconst productSubKeysMatchGroup = [...productKeysMappingValues, 'custom'].join('|');\nconst impressionSubKeysMatchGroup = [...impressionKeysMappingValues, 'custom'].join('|');\nconst productPrefixMatchGroup = '(pr[0-9]+)';\nconst impressionPrefixMatchGroup = '(il[0-9]+pi[0-9]+)';\nconst productKeyRegex = new RegExp(`^${productPrefixMatchGroup}(${productSubKeysMatchGroup})$`);\nconst impressionKeyRegex = new RegExp(`^(${impressionPrefixMatchGroup}(${impressionSubKeysMatchGroup}))|(il[0-9]+nm)$`);\nconst productActionsKeyRegex = new RegExp(`^(${productActionsKeysMappingValues.join('|')})$`);\nconst transactionActionsKeyRegex = new RegExp(`^(${transactionActionsKeysMappingValues.join('|')})$`);\nconst customProductKeyRegex = new RegExp(`^${productPrefixMatchGroup}custom$`);\nconst customImpressionKeyRegex = new RegExp(`^${impressionPrefixMatchGroup}custom$`);\nconst coveoCommerceExtensionKeysRegex = new RegExp(\n `^(${[...coveoCommerceExtensionKeys, ...reviewKeysMappingValues, ...quoteKeysMappingValues].join('|')})$`\n);\n\nconst isProductKey = (key: string) => productKeyRegex.test(key);\nconst isImpressionKey = (key: string) => impressionKeyRegex.test(key);\nconst isProductActionsKey = (key: string) => productActionsKeyRegex.test(key);\nconst isTransactionActionsKeyRegex = (key: string) => transactionActionsKeyRegex.test(key);\nconst isCoveoCommerceExtensionKey = (key: string) => coveoCommerceExtensionKeysRegex.test(key);\n\nexport const isCommerceKey = [\n isImpressionKey,\n isProductKey,\n isProductActionsKey,\n isTransactionActionsKeyRegex,\n isCoveoCommerceExtensionKey,\n];\nexport const isCustomCommerceKey = [customProductKeyRegex, customImpressionKeyRegex];\n","import {BasePlugin} from '../../plugins/BasePlugin';\n\ntype DefaultContextInformation = ReturnType<typeof BasePlugin.prototype.getDefaultContextInformation> &\n ReturnType<typeof BasePlugin.prototype.getLocationInformation>;\n\nconst globalParamKeysMapping: {[name: string]: string} = {\n anonymizeIp: 'aip',\n};\n\nconst eventKeysMapping: {[name: string]: string} = {\n eventCategory: 'ec',\n eventAction: 'ea',\n eventLabel: 'el',\n eventValue: 'ev',\n page: 'dp',\n visitorId: 'cid',\n clientId: 'cid',\n userId: 'uid',\n currencyCode: 'cu',\n};\n\nconst contextInformationMapping: {[key in keyof DefaultContextInformation]: string} = {\n hitType: 't',\n pageViewId: 'pid',\n encoding: 'de',\n location: 'dl',\n referrer: 'dr',\n screenColor: 'sd',\n screenResolution: 'sr',\n title: 'dt',\n userAgent: 'ua',\n language: 'ul',\n eventId: 'z',\n time: 'tm',\n};\n\n/* Those are extension keys that are supported by the Coveo collect protocol (but not Google's protocol). They will be forwarded as-is. */\nconst coveoExtensionsKeys = [\n 'contentId',\n 'contentIdKey',\n 'contentType',\n 'searchHub',\n 'tab',\n 'searchUid',\n 'permanentId',\n 'contentLocale',\n];\n\nexport const baseMeasurementProtocolKeysMapping: {[name: string]: string} = {\n ...globalParamKeysMapping,\n ...eventKeysMapping,\n ...contextInformationMapping,\n ...coveoExtensionsKeys.reduce(\n (all, key) => ({\n ...all,\n [key]: key,\n }),\n {}\n ),\n};\n","import {isServiceKey, serviceActionsKeysMapping} from './measurementProtocolMapping/serviceMeasurementProtocolMapper';\nimport {\n commerceActionKeysMappingPerAction,\n isCommerceKey,\n isCustomCommerceKey,\n} from './measurementProtocolMapping/commerceMeasurementProtocolMapper';\nimport {keysOf} from './utils';\nimport {baseMeasurementProtocolKeysMapping} from './measurementProtocolMapping/baseMeasurementProtocolMapper';\n\nconst measurementProtocolKeysMapping: {[name: string]: string} = {\n ...baseMeasurementProtocolKeysMapping,\n ...serviceActionsKeysMapping,\n};\n\nexport const convertKeysToMeasurementProtocol = (params: any) => {\n const keysMappingForAction = (!!params.action && commerceActionKeysMappingPerAction[params.action]) || {};\n return keysOf(params).reduce((mappedKeys, key) => {\n const newKey = keysMappingForAction[key] || measurementProtocolKeysMapping[key] || key;\n return {\n ...mappedKeys,\n [newKey]: params[key],\n };\n }, {});\n};\n\nconst measurementProtocolKeysMappingValues = keysOf(measurementProtocolKeysMapping).map(\n (key) => measurementProtocolKeysMapping[key]\n);\n\nconst isKnownMeasurementProtocolKey = (key: string) => measurementProtocolKeysMappingValues.indexOf(key) !== -1;\nconst isCustomKey = (key: string) => key === 'custom';\n\nexport const isMeasurementProtocolKey = (key: string): boolean => {\n return [...isCommerceKey, ...isServiceKey, isKnownMeasurementProtocolKey, isCustomKey].some((test) => test(key));\n};\n\nexport const convertCustomMeasurementProtocolKeys = (data: {[name: string]: string | {[name: string]: string}}) => {\n return keysOf(data).reduce((all, current) => {\n const match = getFirstCustomMeasurementProtocolKeyMatch(current);\n if (match) {\n return {\n ...all,\n ...convertCustomObject(match, data[current] as {[name: string]: string}),\n };\n } else {\n return {\n ...all,\n [current]: data[current],\n };\n }\n }, {});\n};\n\nconst getFirstCustomMeasurementProtocolKeyMatch = (key: string): string | undefined => {\n let matchedKey: string | undefined = undefined;\n [...isCustomCommerceKey].every((regex) => {\n matchedKey = regex.exec(key)?.[1];\n return !Boolean(matchedKey);\n });\n return matchedKey;\n};\n\nconst convertCustomObject = (prefix: string, customData: {[name: string]: string}) => {\n return keysOf(customData).reduce(\n (allCustom, currentCustomKey) => ({\n ...allCustom,\n [`${prefix}${currentCustomKey}`]: customData[currentCustomKey],\n }),\n {}\n );\n};\n","import {AnalyticsRequestClient, IAnalyticsRequestOptions, IAnalyticsClientOptions} from './analyticsRequestClient';\nimport {EventType, IRequestPayload} from '../events';\n\nexport class AnalyticsBeaconClient implements AnalyticsRequestClient {\n constructor(private opts: IAnalyticsClientOptions) {}\n\n public async sendEvent(eventType: EventType, payload: IRequestPayload): Promise<void> {\n if (!navigator.sendBeacon) {\n throw new Error(\n `navigator.sendBeacon is not supported in this browser. Consider adding a polyfill like \"sendbeacon-polyfill\".`\n );\n }\n\n const {baseUrl, preprocessRequest} = this.opts;\n const parsedRequestData = this.encodeForEventType(eventType, payload);\n const paramsFragments = await this.getQueryParamsForEventType(eventType);\n const defaultOptions: IAnalyticsRequestOptions = {\n url: `${baseUrl}/analytics/${eventType}?${paramsFragments}`,\n body: new Blob([parsedRequestData], {\n type: 'application/x-www-form-urlencoded',\n }),\n };\n const {url, body}: IAnalyticsRequestOptions = {\n ...defaultOptions,\n ...(preprocessRequest ? await preprocessRequest(defaultOptions, 'analyticsBeacon') : {}),\n };\n\n // tslint:disable-next-line: no-console\n console.log(`Sending beacon for \"${eventType}\" with: `, JSON.stringify(payload));\n navigator.sendBeacon(url, body as any); // https://github.com/microsoft/TypeScript/issues/38715\n return;\n }\n\n public deleteHttpCookieVisitorId() {\n return Promise.resolve();\n }\n\n private encodeForEventType(eventType: EventType, payload: IRequestPayload): string {\n return this.isEventTypeLegacy(eventType)\n ? this.encodeForLegacyType(eventType, payload)\n : this.encodeForFormUrlEncoded({\n access_token: this.opts.token,\n ...payload,\n });\n }\n\n private async getQueryParamsForEventType(eventType: EventType): Promise<string> {\n const {token, visitorIdProvider} = this.opts;\n const visitorId = await visitorIdProvider.getCurrentVisitorId();\n return [\n token && this.isEventTypeLegacy(eventType) ? `access_token=${token}` : '',\n visitorId ? `visitorId=${visitorId}` : '',\n 'discardVisitInfo=true',\n ]\n .filter((p) => !!p)\n .join('&');\n }\n\n private isEventTypeLegacy(eventType: EventType) {\n return [EventType.click, EventType.custom, EventType.search, EventType.view].indexOf(eventType) !== -1;\n }\n\n private encodeForLegacyType(eventType: EventType, payload: IRequestPayload): string {\n return `${eventType}Event=${encodeURIComponent(JSON.stringify(payload))}`;\n }\n\n private encodeForFormUrlEncoded(payload: IRequestPayload): string {\n return Object.keys(payload)\n .filter((key) => !!payload[key])\n .map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(this.encodeValue(payload[key]))}`)\n .join('&');\n }\n\n private encodeValue(value: any) {\n return typeof value === 'number' || typeof value === 'string' || typeof value === 'boolean'\n ? value\n : JSON.stringify(value);\n }\n}\n","import {AnyEventResponse, EventType, IRequestPayload} from '../events';\n\nexport interface VisitorIdProvider {\n getCurrentVisitorId: () => Promise<string>;\n setCurrentVisitorId: (visitorId: string) => void;\n}\n\nexport interface AnalyticsRequestClient {\n sendEvent(eventType: string, payload: IRequestPayload): Promise<AnyEventResponse | void>;\n deleteHttpCookieVisitorId: () => Promise<void>;\n}\n\nexport interface IAnalyticsClientOptions {\n baseUrl: string;\n token?: string;\n visitorIdProvider: VisitorIdProvider;\n preprocessRequest?: PreprocessAnalyticsRequest;\n}\n\nexport type AnalyticsClientOrigin = 'analyticsFetch' | 'analyticsBeacon';\n\nexport type PreprocessAnalyticsRequest = (\n request: IAnalyticsRequestOptions,\n clientOrigin: AnalyticsClientOrigin\n) => IAnalyticsRequestOptions | Promise<IAnalyticsRequestOptions>;\n\nexport interface IAnalyticsRequestOptions extends RequestInit {\n url: string;\n}\n\nexport class NoopAnalyticsClient implements AnalyticsRequestClient {\n public async sendEvent(_: EventType, __: IRequestPayload): Promise<void> {\n return Promise.resolve();\n }\n\n public async deleteHttpCookieVisitorId() {\n return Promise.resolve();\n }\n}\n","// This file is to prevent including a fetch polyfill from the \"cross-fetch\" dependency when building for a browser target.\n// Major browsers today provide fetch on the window object, so including a polyfill would needlessly increase the size of the bundle.\nexport const fetch = window.fetch;\n","import {AnalyticsRequestClient, IAnalyticsRequestOptions, IAnalyticsClientOptions} from './analyticsRequestClient';\nimport {AnyEventResponse, EventType, IRequestPayload} from '../events';\nimport {fetch} from 'cross-fetch';\n\nexport class AnalyticsFetchClient implements AnalyticsRequestClient {\n constructor(private opts: IAnalyticsClientOptions) {}\n\n public async sendEvent(eventType: EventType, payload: IRequestPayload): Promise<AnyEventResponse> {\n const {baseUrl, visitorIdProvider, preprocessRequest} = this.opts;\n\n const visitorIdParam = this.shouldAppendVisitorId(eventType) ? await this.getVisitorIdParam() : '';\n const defaultOptions: IAnalyticsRequestOptions = {\n url: `${baseUrl}/analytics/${eventType}${visitorIdParam}`,\n credentials: 'include',\n mode: 'cors',\n headers: this.getHeaders(),\n method: 'POST',\n body: JSON.stringify(payload),\n };\n const {url, ...fetchData}: IAnalyticsRequestOptions = {\n ...defaultOptions,\n ...(preprocessRequest ? await preprocessRequest(defaultOptions, 'analyticsFetch') : {}),\n };\n\n const response = await fetch(url, fetchData);\n if (response.ok) {\n const visit = (await response.json()) as AnyEventResponse;\n\n if (visit.visitorId) {\n visitorIdProvider.setCurrentVisitorId(visit.visitorId);\n }\n\n return visit;\n } else {\n try {\n response.json();\n } catch {\n /* If you don't parse the response, it won't appear in the network tab. */\n }\n console.error(`An error has occured when sending the \"${eventType}\" event.`, response, payload);\n throw new Error(\n `An error has occurred when sending the \"${eventType}\" event. Check the console logs for more details.`\n );\n }\n }\n\n public async deleteHttpCookieVisitorId() {\n const {baseUrl} = this.opts;\n const url = `${baseUrl}/analytics/visit`;\n await fetch(url, {headers: this.getHeaders(), method: 'DELETE'});\n }\n\n private shouldAppendVisitorId(eventType: EventType) {\n return [EventType.click, EventType.custom, EventType.search, EventType.view].indexOf(eventType) !== -1;\n }\n\n private async getVisitorIdParam() {\n const {visitorIdProvider} = this.opts;\n const visitorId = await visitorIdProvider.getCurrentVisitorId();\n return visitorId ? `?visitor=${visitorId}` : '';\n }\n\n private getHeaders(): Record<string, string> {\n const {token} = this.opts;\n return {\n ...(token ? {Authorization: `Bearer ${token}`} : {}),\n 'Content-Type': `application/json`,\n };\n }\n}\n","import {WebStorage, NullStorage, CookieAndLocalStorage} from '../storage';\nimport {AnalyticsBeaconClient} from './analyticsBeaconClient';\nimport {hasLocalStorage, hasCookieStorage} from '../detector';\nimport {AnalyticsRequestClient, IAnalyticsClientOptions, NoopAnalyticsClient} from './analyticsRequestClient';\nimport {AnalyticsFetchClient} from './analyticsFetchClient';\nimport {BufferedRequest} from './analytics';\n\nexport interface IRuntimeEnvironment {\n storage: WebStorage;\n client: AnalyticsRequestClient;\n}\n\nexport class BrowserRuntime implements IRuntimeEnvironment {\n public storage: WebStorage;\n public client: AnalyticsFetchClient;\n private beaconClient: AnalyticsBeaconClient;\n\n constructor(clientOptions: IAnalyticsClientOptions, getUnprocessedRequests: () => Array<BufferedRequest>) {\n if (hasLocalStorage() && hasCookieStorage()) {\n this.storage = new CookieAndLocalStorage();\n } else if (hasLocalStorage()) {\n this.storage = localStorage;\n } else {\n console.warn('BrowserRuntime detected no valid storage available.', this);\n this.storage = new NullStorage();\n }\n this.client = new AnalyticsFetchClient(clientOptions);\n this.beaconClient = new AnalyticsBeaconClient(clientOptions);\n window.addEventListener('beforeunload', () => {\n const requests = getUnprocessedRequests();\n for (let {eventType, payload} of requests) {\n this.beaconClient.sendEvent(eventType, payload);\n }\n });\n }\n}\n\nexport class NodeJSRuntime implements IRuntimeEnvironment {\n public storage: WebStorage;\n public client: AnalyticsFetchClient;\n\n constructor(clientOptions: IAnalyticsClientOptions, storage?: WebStorage) {\n this.storage = storage || new NullStorage();\n this.client = new AnalyticsFetchClient(clientOptions);\n }\n}\n\nexport class NoopRuntime implements IRuntimeEnvironment {\n public storage = new NullStorage();\n public client = new NoopAnalyticsClient();\n}\n","// Read the Mozilla Do Not Track Field Guide\n// (https://developer.mozilla.org/en-US/docs/Web/Security/Do_not_track_field_guide),\n// for information on how to use the donottrack\n// gathering data of actions of an user as long as it is not associated to the\n// identity of that user, doNotTrack is not enabled here.\n\nimport {hasNavigator} from './detector';\n\nconst doNotTrackValues = ['1', 1, 'yes', true];\n\nexport function doNotTrack(): boolean {\n return (\n hasNavigator() &&\n [\n (<any>navigator).globalPrivacyControl,\n (<any>navigator).doNotTrack,\n (<any>navigator).msDoNotTrack,\n (<any>window).doNotTrack,\n ].some((value) => doNotTrackValues.indexOf(value) !== -1)\n );\n}\n\nexport default doNotTrack;\n","import {\n AnyEventResponse,\n ClickEventRequest,\n ClickEventResponse,\n CustomEventRequest,\n CustomEventResponse,\n EventType,\n HealthResponse,\n SearchEventRequest,\n SearchEventResponse,\n ViewEventRequest,\n ViewEventResponse,\n VisitResponse,\n IRequestPayload,\n VariableArgumentsPayload,\n} from '../events';\nimport {IAnalyticsClientOptions, PreprocessAnalyticsRequest, VisitorIdProvider} from './analyticsRequestClient';\nimport {hasWindow, hasDocument} from '../detector';\nimport {addDefaultValues} from '../hook/addDefaultValues';\nimport {enhanceViewEvent} from '../hook/enhanceViewEvent';\nimport {uuidv4} from './crypto';\nimport {\n convertKeysToMeasurementProtocol,\n isMeasurementProtocolKey,\n convertCustomMeasurementProtocolKeys,\n} from './measurementProtocolMapper';\nimport {IRuntimeEnvironment, BrowserRuntime, NodeJSRuntime, NoopRuntime} from './runtimeEnvironment';\nimport HistoryStore from '../history';\nimport {isApiKey} from './token';\nimport {isReactNative, ReactNativeRuntimeWarning} from '../react-native/react-native-utils';\nimport {doNotTrack} from '../donottrack';\nimport {NullStorage} from '../storage';\n\nexport const Version = 'v15';\n\nexport const Endpoints = {\n default: 'https://analytics.cloud.coveo.com/rest/ua',\n production: 'https://analytics.cloud.coveo.com/rest/ua',\n hipaa: 'https://analyticshipaa.cloud.coveo.com/rest/ua',\n};\n\nexport interface ClientOptions {\n token?: string;\n endpoint: string;\n version: string;\n runtimeEnvironment?: IRuntimeEnvironment;\n beforeSendHooks: AnalyticsClientSendEventHook[];\n afterSendHooks: AnalyticsClientSendEventHook[];\n preprocessRequest?: PreprocessAnalyticsRequest;\n}\n\nexport type AnalyticsClientSendEventHook = <TResult>(eventType: string, payload: any) => TResult | Promise<TResult>;\nexport type EventTypeConfig = {\n newEventType: EventType;\n variableLengthArgumentsNames?: string[];\n addVisitorIdParameter?: boolean;\n addClientIdParameter?: boolean;\n usesMeasurementProtocol?: boolean;\n};\n\nexport interface AnalyticsClient {\n getPayload(eventType: string, ...payload: VariableArgumentsPayload): Promise<any>;\n getParameters(eventType: string, ...payload: VariableArgumentsPayload): Promise<any>;\n sendEvent(eventType: string, ...payload: VariableArgumentsPayload): Promise<AnyEventResponse | void>;\n sendSearchEvent(request: SearchEventRequest): Promise<SearchEventResponse | void>;\n sendClickEvent(request: ClickEventRequest): Promise<ClickEventResponse | void>;\n sendCustomEvent(request: CustomEventRequest): Promise<CustomEventResponse | void>;\n sendViewEvent(request: ViewEventRequest): Promise<ViewEventResponse | void>;\n getVisit(): Promise<VisitResponse>;\n getHealth(): Promise<HealthResponse>;\n registerBeforeSendEventHook(hook: AnalyticsClientSendEventHook): void;\n registerAfterSendEventHook(hook: AnalyticsClientSendEventHook): void;\n addEventTypeMapping(eventType: string, eventConfig: EventTypeConfig): void;\n runtime: IRuntimeEnvironment;\n /**\n * @deprecated\n */\n readonly currentVisitorId: string;\n getCurrentVisitorId?(): Promise<string>; // TODO: v3 make required\n}\n\nexport interface BufferedRequest {\n eventType: EventType;\n payload: any;\n}\n\ntype ProcessPayloadStep = (currentPayload: any) => any;\ntype AsyncProcessPayloadStep = (currentPayload: any) => Promise<any>;\n\nexport function buildBaseUrl(endpoint = Endpoints.default, apiVersion = Version) {\n const endpointIsCoveoProxy = endpoint.indexOf('.cloud.coveo.com') !== -1;\n return `${endpoint}${endpointIsCoveoProxy ? '' : '/rest'}/${apiVersion}`;\n}\n\nexport class CoveoAnalyticsClient implements AnalyticsClient, VisitorIdProvider {\n private get defaultOptions(): ClientOptions {\n return {\n endpoint: Endpoints.default,\n token: '',\n version: Version,\n beforeSendHooks: [],\n afterSendHooks: [],\n };\n }\n\n public runtime: IRuntimeEnvironment;\n private visitorId: string;\n private bufferedRequests: BufferedRequest[];\n private beforeSendHooks: AnalyticsClientSendEventHook[];\n private afterSendHooks: AnalyticsClientSendEventHook[];\n private eventTypeMapping: {[name: string]: EventTypeConfig};\n private options: ClientOptions;\n\n constructor(opts: Partial<ClientOptions>) {\n if (!opts) {\n throw new Error('You have to pass options to this constructor');\n }\n\n this.options = {\n ...this.defaultOptions,\n ...opts,\n };\n\n this.visitorId = '';\n this.bufferedRequests = [];\n this.beforeSendHooks = [enhanceViewEvent, addDefaultValues].concat(this.options.beforeSendHooks);\n this.afterSendHooks = this.options.afterSendHooks;\n this.eventTypeMapping = {};\n\n const clientsOptions: IAnalyticsClientOptions = {\n baseUrl: this.baseUrl,\n token: this.options.token,\n visitorIdProvider: this,\n preprocessRequest: this.options.preprocessRequest,\n };\n\n this.runtime = this.options.runtimeEnvironment || this.initRuntime(clientsOptions);\n if (doNotTrack()) {\n this.clear();\n this.runtime.storage = new NullStorage();\n }\n }\n\n private initRuntime(clientsOptions: IAnalyticsClientOptions) {\n if (hasWindow() && hasDocument()) {\n return new BrowserRuntime(clientsOptions, () => {\n const copy = [...this.bufferedRequests];\n this.bufferedRequests = [];\n return copy;\n });\n } else if (isReactNative()) {\n console.warn(ReactNativeRuntimeWarning);\n }\n return new NodeJSRuntime(clientsOptions);\n }\n\n private get storage() {\n return this.runtime.storage;\n }\n\n private async determineVisitorId() {\n try {\n return (await this.storage.getItem('visitorId')) || uuidv4();\n } catch (err) {\n console.log(\n 'Could not get visitor ID from the current runtime environment storage. Using a random ID instead.',\n err\n );\n return uuidv4();\n }\n }\n\n async getCurrentVisitorId() {\n if (!this.visitorId) {\n const id = await this.determineVisitorId();\n await this.setCurrentVisitorId(id);\n }\n return this.visitorId;\n }\n\n async setCurrentVisitorId(visitorId: string) {\n this.visitorId = visitorId;\n await this.storage.setItem('visitorId', visitorId);\n }\n\n async getParameters(eventType: EventType | string, ...payload: VariableArgumentsPayload) {\n return await this.resolveParameters(eventType, ...payload);\n }\n\n async getPayload(eventType: EventType | string, ...payload: VariableArgumentsPayload) {\n const parametersToSend = await this.resolveParameters(eventType, ...payload);\n return await this.resolvePayloadForParameters(eventType, parametersToSend);\n }\n\n /**\n * @deprecated Synchronous method is deprecated, use getCurrentVisitorId instead. This method will NOT work with react-native.\n */\n get currentVisitorId() {\n const visitorId = this.visitorId || this.storage.getItem('visitorId');\n if (typeof visitorId !== 'string') {\n this.setCurrentVisitorId(uuidv4());\n }\n return this.visitorId;\n }\n\n /**\n * @deprecated Synchronous method is deprecated, use setCurrentVisitorId instead. This method will NOT work with react-native.\n */\n set currentVisitorId(visitorId: string) {\n this.visitorId = visitorId;\n this.storage.setItem('visitorId', visitorId);\n }\n\n async resolveParameters(eventType: EventType | string, ...payload: VariableArgumentsPayload) {\n const {\n variableLengthArgumentsNames = [],\n addVisitorIdParameter = false,\n usesMeasurementProtocol = false,\n addClientIdParameter = false,\n } = this.eventTypeMapping[eventType] || {};\n\n const processVariableArgumentNamesStep: ProcessPayloadStep = (currentPayload) =>\n variableLengthArgumentsNames.length > 0\n ? this.parseVariableArgumentsPayload(variableLengthArgumentsNames, currentPayload)\n : currentPayload[0];\n const addVisitorIdStep: AsyncProcessPayloadStep = async (currentPayload) => ({\n ...currentPayload,\n visitorId: addVisitorIdParameter ? await this.getCurrentVisitorId() : '',\n });\n const addClientIdStep: AsyncProcessPayloadStep = async (currentPayload) => {\n if (addClientIdParameter) {\n return {\n ...currentPayload,\n clientId: await this.getCurrentVisitorId(),\n };\n }\n return currentPayload;\n };\n const setAnonymousUserStep: ProcessPayloadStep = (currentPayload) =>\n usesMeasurementProtocol ? this.ensureAnonymousUserWhenUsingApiKey(currentPayload) : currentPayload;\n const processBeforeSendHooksStep: AsyncProcessPayloadStep = (currentPayload) =>\n this.beforeSendHooks.reduce(async (promisePayload, current) => {\n const payload = await promisePayload;\n return await current(eventType, payload);\n }, currentPayload);\n\n const parametersToSend = await [\n processVariableArgumentNamesStep,\n addVisitorIdStep,\n addClientIdStep,\n setAnonymousUserStep,\n processBeforeSendHooksStep,\n ].reduce(async (payloadPromise, step) => {\n const payload = await payloadPromise;\n return await step(payload);\n }, Promise.resolve(payload));\n\n return parametersToSend;\n }\n\n async resolvePayloadForParameters(eventType: EventType | string, parameters: any) {\n const {usesMeasurementProtocol = false} = this.eventTypeMapping[eventType] || {};\n\n const cleanPayloadStep: ProcessPayloadStep = (currentPayload) =>\n this.removeEmptyPayloadValues(currentPayload, eventType);\n const validateParams: ProcessPayloadStep = (currentPayload) => this.validateParams(currentPayload);\n const processMeasurementProtocolConversionStep: ProcessPayloadStep = (currentPayload) =>\n usesMeasurementProtocol ? convertKeysToMeasurementProtocol(currentPayload) : currentPayload;\n const removeUnknownParameters: ProcessPayloadStep = (currentPayload) =>\n usesMeasurementProtocol ? this.removeUnknownParameters(currentPayload) : currentPayload;\n const processCustomParameters: ProcessPayloadStep = (currentPayload) =>\n usesMeasurementProtocol ? this.processCustomParameters(currentPayload) : currentPayload;\n\n const payloadToSend = await [\n cleanPayloadStep,\n validateParams,\n processMeasurementProtocolConversionStep,\n removeUnknownParameters,\n processCustomParameters,\n ].reduce(async (payloadPromise, step) => {\n const payload = await payloadPromise;\n return await step(payload);\n }, Promise.resolve(parameters));\n\n return payloadToSend;\n }\n\n async sendEvent(\n eventType: EventType | string,\n ...payload: VariableArgumentsPayload\n ): Promise<AnyEventResponse | void> {\n const {newEventType: eventTypeToSend = eventType as EventType} = this.eventTypeMapping[eventType] || {};\n\n const parametersToSend = await this.resolveParameters(eventType, ...payload);\n const payloadToSend = await this.resolvePayloadForParameters(eventType, parametersToSend);\n\n this.bufferedRequests.push({\n eventType: eventTypeToSend,\n payload: payloadToSend,\n });\n\n await Promise.all(this.afterSendHooks.map((hook) => hook(eventType, parametersToSend)));\n\n await this.deferExecution();\n\n return await this.sendFromBufferWithFetch();\n }\n\n private deferExecution(): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, 0));\n }\n\n private async sendFromBufferWithFetch(): Promise<AnyEventResponse | void> {\n const popped = this.bufferedRequests.shift();\n if (popped) {\n const {eventType, payload} = popped;\n return this.runtime.client.sendEvent(eventType, payload);\n }\n }\n\n public clear() {\n this.storage.removeItem('visitorId');\n const store = new HistoryStore();\n store.clear();\n }\n\n public deleteHttpOnlyVisitorId() {\n this.runtime.client.deleteHttpCookieVisitorId();\n }\n\n async sendSearchEvent(request: SearchEventRequest): Promise<SearchEventResponse | void> {\n return this.sendEvent(EventType.search, request);\n }\n\n async sendClickEvent(request: ClickEventRequest): Promise<ClickEventResponse | void> {\n return this.sendEvent(EventType.click, request);\n }\n\n async sendCustomEvent(request: CustomEventRequest): Promise<CustomEventResponse | void> {\n return this.sendEvent(EventType.custom, request);\n }\n\n async sendViewEvent(request: ViewEventRequest): Promise<ViewEventResponse | void> {\n return this.sendEvent(EventType.view, request);\n }\n\n async getVisit(): Promise<VisitResponse> {\n // deepcode ignore Ssrf: url is supplied by script owner\n const response = await fetch(`${this.baseUrl}/analytics/visit`);\n const visit = (await response.json()) as VisitResponse;\n this.visitorId = visit.visitorId;\n return visit;\n }\n\n async getHealth(): Promise<HealthResponse> {\n // deepcode ignore Ssrf: url is supplied by script owner\n const response = await fetch(`${this.baseUrl}/analytics/monitoring/health`);\n return (await response.json()) as HealthResponse;\n }\n\n registerBeforeSendEventHook(hook: AnalyticsClientSendEventHook): void {\n this.beforeSendHooks.push(hook);\n }\n\n registerAfterSendEventHook(hook: AnalyticsClientSendEventHook): void {\n this.afterSendHooks.push(hook);\n }\n\n addEventTypeMapping(eventType: string, eventConfig: EventTypeConfig): void {\n this.eventTypeMapping[eventType] = eventConfig;\n }\n\n private parseVariableArgumentsPayload(fieldsOrder: string[], payload: VariableArgumentsPayload) {\n const parsedArguments: {[name: string]: any} = {};\n for (let i = 0, length = payload.length; i < length; i++) {\n const currentArgument = payload[i];\n if (typeof currentArgument === 'string') {\n parsedArguments[fieldsOrder[i]] = currentArgument;\n } else if (typeof currentArgument === 'object') {\n // If the argument is an object, it is considered the last argument of the chain. Its values should be returned as-is.\n return {\n ...parsedArguments,\n ...currentArgument,\n };\n }\n }\n return parsedArguments;\n }\n\n private isKeyAllowedEmpty(evtType: string, key: string) {\n const keysThatCanBeEmpty: Record<string, string[]> = {\n [EventType.search]: ['queryText'],\n };\n\n const match = keysThatCanBeEmpty[evtType] || [];\n return match.indexOf(key) !== -1;\n }\n\n private removeEmptyPayloadValues(payload: IRequestPayload, eventType: string): IRequestPayload {\n const isNotEmptyValue = (value: any) => typeof value !== 'undefined' && value !== null && value !== '';\n return Object.keys(payload)\n .filter((key) => this.isKeyAllowedEmpty(eventType, key) || isNotEmptyValue(payload[key]))\n .reduce(\n (newPayload, key) => ({\n ...newPayload,\n [key]: payload[key],\n }),\n {}\n );\n }\n\n private removeUnknownParameters(payload: IRequestPayload): IRequestPayload {\n const newPayload = Object.keys(payload)\n .filter((key) => {\n if (isMeasurementProtocolKey(key)) {\n return true;\n } else {\n console.log(key, 'is not processed by coveoua');\n }\n })\n .reduce(\n (newPayload, key) => ({\n ...newPayload,\n [key]: payload[key],\n }),\n {}\n );\n return newPayload;\n }\n\n private processCustomParameters(payload: IRequestPayload): IRequestPayload {\n const {custom, ...rest} = payload;\n\n const lowercasedCustom = this.lowercaseKeys(custom);\n\n const newPayload = convertCustomMeasurementProtocolKeys(rest);\n\n return {\n ...lowercasedCustom,\n ...newPayload,\n };\n }\n\n private lowercaseKeys(custom: any) {\n const keys = Object.keys(custom || {});\n\n return keys.reduce(\n (all, key) => ({\n ...all,\n [key.toLowerCase()]: custom[key],\n }),\n {}\n );\n }\n\n private validateParams(payload: IRequestPayload): IRequestPayload {\n const {anonymizeIp, ...rest} = payload;\n if (anonymizeIp !== undefined) {\n if (['0', 'false', 'undefined', 'null', '{}', '[]', ''].indexOf(`${anonymizeIp}`.toLowerCase()) == -1) {\n rest['anonymizeIp'] = 1;\n }\n }\n return rest;\n }\n\n private ensureAnonymousUserWhenUsingApiKey(payload: IRequestPayload): IRequestPayload {\n const {userId, ...rest} = payload;\n if (isApiKey(this.options.token) && !userId) {\n rest['userId'] = 'anonymous';\n return rest;\n } else {\n return payload;\n }\n }\n\n private get baseUrl(): string {\n return buildBaseUrl(this.options.endpoint, this.options.version);\n }\n}\n\nexport default CoveoAnalyticsClient;\n","import {\n CategoryFacetMetadata,\n FacetBaseMeta,\n FacetMetadata,\n FacetRangeMetadata,\n FacetSortMeta,\n InterfaceChangeMetadata,\n PagerMetadata,\n QueryErrorMeta,\n ResultsSortMetadata,\n StaticFilterToggleValueMetadata,\n} from '../searchPage/searchPageEvents';\n\nexport enum InsightEvents {\n /**\n * Identifies the search event that gets logged when the query context is updated as a result of updating one of the case context fields.\n */\n contextChanged = 'contextChanged',\n /**\n * Identifies the event that gets logged when the user opens the full search page from the insight panel.\n */\n expandToFullUI = 'expandToFullUI',\n}\n\nexport interface CaseMetadata {\n caseId?: string;\n caseNumber?: string;\n caseContext?: Record<string, string>;\n}\n\nexport interface ExpandToFullUIMetadata extends CaseMetadata {\n fullSearchComponentName: string;\n triggeredBy: string;\n}\n\nexport interface InsightInterfaceChangeMetadata extends InterfaceChangeMetadata, CaseMetadata {}\n\nexport interface InsightFacetMetadata extends FacetMetadata, CaseMetadata {}\n\nexport interface InsightStaticFilterToggleValueMetadata extends StaticFilterToggleValueMetadata, CaseMetadata {}\n\nexport interface InsightFacetRangeMetadata extends FacetRangeMetadata, CaseMetadata {}\n\nexport interface InsightCategoryFacetMetadata extends CategoryFacetMetadata, CaseMetadata {}\n\nexport interface InsightFacetSortMeta extends FacetSortMeta, CaseMetadata {}\n\nexport interface InsightFacetBaseMeta extends FacetBaseMeta, CaseMetadata {}\n\nexport interface InsightQueryErrorMeta extends QueryErrorMeta, CaseMetadata {}\n\nexport interface InsightPagerMetadata extends PagerMetadata, CaseMetadata {}\n\nexport interface InsightResultsSortMetadata extends ResultsSortMetadata, CaseMetadata {}\n","import {DocumentInformation, FacetStateRequest} from '../events';\nimport {InsightEvents} from '../insight/insightEvents';\n\nexport enum SearchPageEvents {\n /**\n * Identifies the search event that gets logged when the initial query is performed as a result of loading a search interface.\n */\n interfaceLoad = 'interfaceLoad',\n /**\n * Identifies the search event that gets logged when a new tab is selected in the search interface.\n */\n interfaceChange = 'interfaceChange',\n /**\n * Identifies the search event that gets logged when `enableAutoCorrection: true` and the query is automatically corrected.\n */\n didyoumeanAutomatic = 'didyoumeanAutomatic',\n /**\n * Identifies the search event that gets logged when the query suggestion with the corrected term is selected and successfully updates the query.\n */\n didyoumeanClick = 'didyoumeanClick',\n /**\n * Identifies the search event that gets logged when a sorting method is selected.\n */\n resultsSort = 'resultsSort',\n /**\n * Identifies the search event that gets logged when a submit button is selected on a search box.\n */\n searchboxSubmit = 'searchboxSubmit',\n /**\n * Identifies the search event that gets logged when a clear button is selected on a search box.\n */\n searchboxClear = 'searchboxClear',\n /**\n * The search-as-you-type event that gets logged when a query is automatically generated, and results are displayed while a user is entering text in the search box before they voluntarily submit the query.\n */\n searchboxAsYouType = 'searchboxAsYouType',\n /**\n * The event that gets logged when a breadcrumb facet is selected and the query is updated.\n */\n breadcrumbFacet = 'breadcrumbFacet',\n /**\n * Identifies the search event that gets logged when the event to clear the current breadcrumbs is triggered.\n */\n breadcrumbResetAll = 'breadcrumbResetAll',\n /**\n * Identifies the click event that gets logged when the Quick View element is selected and a Quick View modal of the document is displayed.\n */\n documentQuickview = 'documentQuickview',\n /**\n * Identifies the click event that gets logged when a user clicks on a search result to open an item.\n */\n documentOpen = 'documentOpen',\n /**\n * Identifies the search event that gets logged when a user clicks a query suggestion based on the usage analytics recorded queries.\n */\n omniboxAnalytics = 'omniboxAnalytics',\n /**\n * Identifies the search event that gets logged when a suggested search query is selected from a standalone searchbox.\n */\n omniboxFromLink = 'omniboxFromLink',\n /**\n * Identifies the search event that gets logged when the search page loads with a query, such as when a user clicks a link pointing to a search results page with a query or enters a query in a standalone search box that points to a search page.\n */\n searchFromLink = 'searchFromLink',\n /**\n * Identifies the custom event that gets logged when a user action triggers a notification set in the effective query pipeline on the search page.\n */\n triggerNotify = 'notify',\n /**\n * Identifies the custom event that gets logged when a user action executes a JavaScript function set in the effective query pipeline on the search page.\n */\n triggerExecute = 'execute',\n /**\n * Identifies the custom event that gets logged when a user action triggers a new query set in the effective query pipeline on the search page.\n */\n triggerQuery = 'query',\n /**\n * Identifies the custom event that gets logged when a user undoes a query set in the effective query pipeline on the search page.\n */\n undoTriggerQuery = 'undoQuery',\n /**\n * Identifies the custom event that gets logged when a user action redirects them to a URL set in the effective query pipeline on the search page.\n */\n triggerRedirect = 'redirect',\n /**\n * Identifies the custom event that gets logged when the Results per page component is selected.\n */\n pagerResize = 'pagerResize',\n /**\n * Identifies the custom event that gets logged when a page number is selected and more items are loaded.\n */\n pagerNumber = 'pagerNumber',\n /**\n * Identifies the custom event that gets logged when the Next Page link is selected and more items are loaded.\n */\n pagerNext = 'pagerNext',\n /**\n * Identifies the custom event that gets logged when the Previous Page link is selected and more items are loaded.\n */\n pagerPrevious = 'pagerPrevious',\n /**\n * Identifies the custom event that gets logged when the user scrolls to the bottom of the item page and more results are loaded.\n */\n pagerScrolling = 'pagerScrolling',\n /**\n * Identifies the search event that gets logged when the clearing all selected values of a static filter.\n */\n staticFilterClearAll = 'staticFilterClearAll',\n /**\n * Identifies the search event that gets logged when a static filter check box is selected and the query is updated.\n */\n staticFilterSelect = 'staticFilterSelect',\n /**\n * Identifies the search event that gets logged when a static filter check box is deselected and the query is updated.\n */\n staticFilterDeselect = 'staticFilterDeselect',\n /**\n * Identifies the search event that gets logged when the Clear Facet button is selected.\n */\n facetClearAll = 'facetClearAll',\n /**\n * Identifies the custom event that gets logged when a query is being typed into the facet search box.\n */\n facetSearch = 'facetSearch',\n /**\n * Identifies the search event that gets logged when a facet check box is selected and the query is updated.\n */\n facetSelect = 'facetSelect',\n /**\n * Identifies the search event that gets logged when all filters on a facet are selected.\n */\n facetSelectAll = 'facetSelectAll',\n /**\n * Identifies the search event that gets logged when a facet check box is deselected and the query is updated.\n */\n facetDeselect = 'facetDeselect',\n /**\n * Identifies the search event that gets logged when a user clicks a facet value to filter out results containing the facet value.\n */\n facetExclude = 'facetExclude',\n /**\n * Identifies the search event that gets logged when a user clicks a facet value to not filter out results containing the facet value.\n */\n facetUnexclude = 'facetUnexclude',\n /**\n * Identifies the search event that gets logged when the sort criteria on a facet is updated.\n */\n facetUpdateSort = 'facetUpdateSort',\n /**\n * The custom event that gets logged when an end-user expands a facet to see additional values.\n */\n facetShowMore = 'showMoreFacetResults',\n /**\n * The custom event that gets logged when an end-user collapses a facet to see less values.\n */\n facetShowLess = 'showLessFacetResults',\n /**\n * Identifies the custom event that gets logged when a user query encounters an error during execution.\n */\n queryError = 'query',\n /**\n * Identifies the search and custom event that gets logged when a user clicks the Go Back link after an error page.\n */\n queryErrorBack = 'errorBack',\n /**\n * Identifies the search and custom event that gets logged when a user clears the query box after an error page.\n */\n queryErrorClear = 'errorClearQuery',\n /**\n * Identifies the search and custom event that gets logged when a user clicks the Retry link after an error page.\n */\n queryErrorRetry = 'errorRetry',\n /**\n * Identifies the custom event that gets logged when a user performs a query that returns recommendations in the Recommendations panel.\n */\n recommendation = 'recommendation',\n /**\n * Identifies the search event that gets logged when a user action (that is not a query) reloads the Recommendations panel with new recommendations.\n */\n recommendationInterfaceLoad = 'recommendationInterfaceLoad',\n /**\n * Identifies the click event that gets logged when a user clicks a recommendation in the Recommendations panel.\n */\n recommendationOpen = 'recommendationOpen',\n /**\n * Identifies the custom event that gets logged when a user identifies a smart snippet answer as relevant.\n */\n likeSmartSnippet = 'likeSmartSnippet',\n /**\n * Identifies the custom event that gets logged when a user identifies a smart snippet answer as irrelevant.\n */\n dislikeSmartSnippet = 'dislikeSmartSnippet',\n /**\n * Identifies the custom event that gets logged when a user expand a smart snippet answer.\n */\n expandSmartSnippet = 'expandSmartSnippet',\n /**\n * Identifies the custom event that gets logged when a user collapse a smart snippet answer.\n */\n collapseSmartSnippet = 'collapseSmartSnippet',\n /**\n * Identifies the custom event that gets logged when a user open a smart snippet explanation modal for feedback.\n */\n openSmartSnippetFeedbackModal = 'openSmartSnippetFeedbackModal',\n /**\n * Identifies the custom event that gets logged when a user close a smart snippet explanation modal for feedback.\n */\n closeSmartSnippetFeedbackModal = 'closeSmartSnippetFeedbackModal',\n /**\n * Identifies the custom event that gets logged when a user sends an explanation for a smart snippet irrelevant answer.\n */\n sendSmartSnippetReason = 'sendSmartSnippetReason',\n /**\n * Identifies the custom event that gets logged when a snippet suggestion for a related question is expanded.\n */\n expandSmartSnippetSuggestion = 'expandSmartSnippetSuggestion',\n /**\n * Identifies the custom event that gets logged when a snippet suggestion for a related question is collapsed.\n */\n collapseSmartSnippetSuggestion = 'collapseSmartSnippetSuggestion',\n /**\n * Identifies the custom event that gets logged when the user presses \"show more\" on a snippet suggestion for a related question.\n *\n * @deprecated\n */\n showMoreSmartSnippetSuggestion = 'showMoreSmartSnippetSuggestion',\n /**\n * Identifies the custom event that gets logged when the user presses \"show less\" on a snippet suggestion for a related question.\n *\n * @deprecated\n */\n showLessSmartSnippetSuggestion = 'showLessSmartSnippetSuggestion',\n /**\n * Identifies the custom event that gets logged when a user clicks on the source of an answer in a smart snippet.\n */\n openSmartSnippetSource = 'openSmartSnippetSource',\n /**\n * Identifies the custom event that gets logged when a user clicks on the source of a snippet suggestion for a related question.\n */\n openSmartSnippetSuggestionSource = 'openSmartSnippetSuggestionSource',\n /**\n * Identifies the custom event that gets logged when a user clicks on a link in the answer of a smart snippet.\n */\n openSmartSnippetInlineLink = 'openSmartSnippetInlineLink',\n /**\n * Identifies the custom event that gets logged when a user clicks on a link in the snippet suggestion for a related question.\n */\n openSmartSnippetSuggestionInlineLink = 'openSmartSnippetSuggestionInlineLink',\n /**\n * Identifies the search event that gets logged when a recent queries list item gets clicked.\n */\n recentQueryClick = 'recentQueriesClick',\n /**\n * Identifies the custom event that gets logged when a recent queries list gets cleared.\n */\n clearRecentQueries = 'clearRecentQueries',\n /**\n * Identifies the custom event that gets logged when a recently clicked results list item gets clicked.\n */\n recentResultClick = 'recentResultClick',\n /**\n * Identifies the custom event that gets logged when a recently clicked results list gets cleared.\n */\n clearRecentResults = 'clearRecentResults',\n /**\n * Identifies the search event that gets logged when a user clicks the Cancel last action link when no results are returned following their last action.\n */\n noResultsBack = 'noResultsBack',\n /**\n * Identifies the click event that gets logged when a user clicks the Show More link under a search result that support the folding component.\n */\n showMoreFoldedResults = 'showMoreFoldedResults',\n /**\n * Identifies the custom event that gets logged when a user clicks the Show Less link under a search result that support the folding component.\n */\n showLessFoldedResults = 'showLessFoldedResults',\n}\n\nexport const CustomEventsTypes: Partial<Record<SearchPageEvents | InsightEvents, string>> = {\n [SearchPageEvents.triggerNotify]: 'queryPipelineTriggers',\n [SearchPageEvents.triggerExecute]: 'queryPipelineTriggers',\n [SearchPageEvents.triggerQuery]: 'queryPipelineTriggers',\n [SearchPageEvents.triggerRedirect]: 'queryPipelineTriggers',\n [SearchPageEvents.queryError]: 'errors',\n [SearchPageEvents.queryErrorBack]: 'errors',\n [SearchPageEvents.queryErrorClear]: 'errors',\n [SearchPageEvents.queryErrorRetry]: 'errors',\n [SearchPageEvents.pagerNext]: 'getMoreResults',\n [SearchPageEvents.pagerPrevious]: 'getMoreResults',\n [SearchPageEvents.pagerNumber]: 'getMoreResults',\n [SearchPageEvents.pagerResize]: 'getMoreResults',\n [SearchPageEvents.pagerScrolling]: 'getMoreResults',\n [SearchPageEvents.facetSearch]: 'facet',\n [SearchPageEvents.facetShowLess]: 'facet',\n [SearchPageEvents.facetShowMore]: 'facet',\n [SearchPageEvents.recommendation]: 'recommendation',\n [SearchPageEvents.likeSmartSnippet]: 'smartSnippet',\n [SearchPageEvents.dislikeSmartSnippet]: 'smartSnippet',\n [SearchPageEvents.expandSmartSnippet]: 'smartSnippet',\n [SearchPageEvents.collapseSmartSnippet]: 'smartSnippet',\n [SearchPageEvents.openSmartSnippetFeedbackModal]: 'smartSnippet',\n [SearchPageEvents.closeSmartSnippetFeedbackModal]: 'smartSnippet',\n [SearchPageEvents.sendSmartSnippetReason]: 'smartSnippet',\n [SearchPageEvents.expandSmartSnippetSuggestion]: 'smartSnippetSuggestions',\n [SearchPageEvents.collapseSmartSnippetSuggestion]: 'smartSnippetSuggestions',\n [SearchPageEvents.showMoreSmartSnippetSuggestion]: 'smartSnippetSuggestions',\n [SearchPageEvents.showLessSmartSnippetSuggestion]: 'smartSnippetSuggestions',\n [SearchPageEvents.clearRecentQueries]: 'recentQueries',\n [SearchPageEvents.recentResultClick]: 'recentlyClickedDocuments',\n [SearchPageEvents.clearRecentResults]: 'recentlyClickedDocuments',\n [SearchPageEvents.showLessFoldedResults]: 'folding',\n [InsightEvents.expandToFullUI]: 'interface',\n};\n\nexport interface StaticFilterMetadata {\n staticFilterId: string;\n}\n\nexport interface StaticFilterToggleValueMetadata extends StaticFilterMetadata {\n staticFilterValue: StaticFilterValueMetadata;\n}\n\ninterface StaticFilterValueMetadata {\n caption: string;\n expression: string;\n}\n\nexport interface FacetMetadata {\n facetId: string;\n facetField: string;\n facetValue: string;\n facetTitle: string;\n}\n\nexport type FacetStateMetadata = FacetStateRequest;\nexport interface FacetRangeMetadata extends Omit<FacetMetadata, 'facetValue'> {\n facetRangeStart: string;\n facetRangeEnd: string;\n facetRangeEndInclusive: boolean;\n}\n\nexport interface CategoryFacetMetadata {\n categoryFacetId: string;\n categoryFacetField: string;\n categoryFacetPath: string[];\n categoryFacetTitle: string;\n}\n\nexport interface OmniboxSuggestionsMetadata {\n suggestionRanking: number;\n partialQueries: string | string[];\n suggestions: string | string[];\n partialQuery: string;\n querySuggestResponseId: string;\n}\n\nexport interface DocumentIdentifier {\n contentIDKey: string;\n contentIDValue: string;\n}\n\nexport interface InterfaceChangeMetadata {\n interfaceChangeTo: string;\n}\n\nexport interface ResultsSortMetadata {\n resultsSortBy: string;\n}\n\nexport interface TriggerNotifyMetadata {\n notifications: string[];\n}\n\nexport interface TriggerExecution {\n functionName: string;\n params: (string | number | boolean)[];\n}\n\nexport interface TriggerExecuteMetadata {\n executions: TriggerExecution[];\n}\n\nexport interface UndoTriggerRedirectMetadata {\n undoneQuery: string;\n}\n\nexport interface TriggerRedirectMetadata {\n redirectedTo: string;\n}\n\nexport interface PagerResizeMetadata {\n currentResultsPerPage: number;\n}\n\nexport interface PagerMetadata {\n pagerNumber: number;\n}\n\nexport interface FacetBaseMeta {\n facetId: string;\n facetField: string;\n facetTitle: string;\n}\n\nexport interface FacetMetadata extends FacetBaseMeta {\n facetValue: string;\n}\n\nexport interface FacetRangeMetadata extends FacetBaseMeta {\n facetRangeStart: string;\n facetRangeEnd: string;\n}\n\nexport interface FacetSortMeta extends FacetBaseMeta {\n criteria: string;\n}\n\nexport interface QueryErrorMeta {\n query: string;\n aq: string;\n cq: string;\n dq: string;\n errorType: string;\n errorMessage: string;\n}\n\nexport type SmartSnippetFeedbackReason = 'does_not_answer' | 'partially_answers' | 'was_not_a_question' | 'other';\n\nexport interface SmartSnippetSuggestionMeta {\n question: string;\n answerSnippet: string;\n documentId: SmartSnippetDocumentIdentifier;\n}\n\nexport interface SmartSnippetLinkMeta {\n linkText: string;\n linkURL: string;\n}\n\nexport interface SmartSnippetDocumentIdentifier {\n contentIdKey: string;\n contentIdValue: string;\n}\n\nexport type PartialDocumentInformation = Omit<DocumentInformation, 'actionCause' | 'searchQueryUid'>;\n","export const ReactNativeRuntimeWarning = `\n We've detected you're using React Native but have not provided the corresponding runtime, \n for an optimal experience please use the \"coveo.analytics/react-native\" subpackage.\n Follow the Readme on how to set it up: https://github.com/coveo/coveo.analytics.js#using-react-native\n `;\n\nexport function isReactNative() {\n return typeof navigator != 'undefined' && navigator.product == 'ReactNative';\n}\n","const API_KEY_PREFIX = 'xx';\n\nexport const isApiKey = (token?: string) => token?.startsWith(API_KEY_PREFIX) || false;\n","export const getFormattedLocation = (location: Location) =>\n `${location.protocol}//${location.hostname}${\n location.pathname.indexOf('/') === 0 ? location.pathname : `/${location.pathname}`\n }${location.search}`;\n","import {AnalyticsClient} from '../client/analytics';\nimport {uuidv4} from '../client/crypto';\nimport {getFormattedLocation} from '../client/location';\nimport {UAPluginOptions} from '../coveoua/plugins';\n\ntype PluginWithId = {\n readonly Id: string;\n};\n\nexport type PluginClass = typeof BasePlugin & PluginWithId;\n\nexport const BasePluginEventTypes = {\n pageview: 'pageview',\n event: 'event',\n};\n\nexport type PluginOptions = {client: AnalyticsClient; uuidGenerator?: typeof uuidv4};\n\nexport abstract class BasePlugin {\n protected client: AnalyticsClient;\n protected uuidGenerator: typeof uuidv4;\n protected action?: string;\n protected actionData: {[name: string]: string} = {};\n private pageViewId: string;\n private nextPageViewId: string;\n private hasSentFirstPageView?: boolean;\n private currentLocation: string;\n private lastReferrer: string;\n\n constructor({client, uuidGenerator = uuidv4}: PluginOptions) {\n this.client = client;\n this.uuidGenerator = uuidGenerator;\n this.pageViewId = uuidGenerator();\n this.nextPageViewId = this.pageViewId;\n this.currentLocation = getFormattedLocation(window.location);\n this.lastReferrer = document.referrer;\n\n this.addHooks();\n }\n\n protected abstract addHooks(): void;\n protected abstract clearPluginData(): void;\n\n public setAction(action: string, options?: any) {\n this.action = action;\n this.actionData = options;\n }\n\n public clearData() {\n this.clearPluginData();\n this.action = undefined;\n this.actionData = {};\n }\n\n public getLocationInformation(eventType: string, payload: any) {\n return {\n hitType: eventType,\n ...this.getNextValues(eventType, payload),\n };\n }\n\n public updateLocationInformation(eventType: string, payload: any) {\n this.updateLocationForNextPageView(eventType, payload);\n }\n\n public getDefaultContextInformation(eventType: string) {\n const documentContext = {\n title: document.title,\n encoding: document.characterSet,\n };\n const screenContext = {\n screenResolution: `${screen.width}x${screen.height}`,\n screenColor: `${screen.colorDepth}-bit`,\n };\n const navigatorContext = {\n language: navigator.language,\n userAgent: navigator.userAgent,\n };\n const eventContext = {\n time: Date.now().toString(),\n eventId: this.uuidGenerator(),\n };\n return {\n ...eventContext,\n ...screenContext,\n ...navigatorContext,\n ...documentContext,\n };\n }\n\n private updateLocationForNextPageView(eventType: string, payload: any) {\n const {pageViewId, referrer, location} = this.getNextValues(eventType, payload);\n\n this.lastReferrer = referrer;\n this.pageViewId = pageViewId;\n this.currentLocation = location;\n\n if (eventType === BasePluginEventTypes.pageview) {\n this.nextPageViewId = this.uuidGenerator();\n this.hasSentFirstPageView = true;\n }\n }\n\n /*\n When calling getPayload or getParameters, we need to return what would be sent by the API without updating our internal reference. \n For instance, if you getPayload(\"pageview\"), we want to return the same payload as if you did coveoua(\"send\", \"pageview\").\n */\n private getNextValues(eventType: string, payload: any) {\n /*\n When sending a pageview, we need to generate a new pageview ID.\n For instance, with the following sequence: 1. pageview, 2. event, 3. pageview, 4. event, 1 and 2 will have the pageviewid, whereas 3 and 4 will have a different pageviewid.\n We pre-generate the \"nextPageViewId\" in case you send the following sequence: 1. pageview, 2. event, 3. getPayload, 4. pageview. This ensures that 3 and 4 have the same pageviewid.\n We applied the same logic to the referrer and the location.\n */\n return {\n pageViewId: eventType === BasePluginEventTypes.pageview ? this.nextPageViewId : this.pageViewId,\n referrer:\n eventType === BasePluginEventTypes.pageview && this.hasSentFirstPageView\n ? this.currentLocation\n : this.lastReferrer,\n location:\n eventType === BasePluginEventTypes.pageview\n ? this.getCurrentLocationFromPayload(payload)\n : this.currentLocation,\n };\n }\n\n private getCurrentLocationFromPayload(payload: any) {\n if (!!payload.page) {\n const removeStartingSlash = (page: string) => page.replace(/^\\/?(.*)$/, '/$1');\n const extractHostnamePart = (location: string) => location.split('/').slice(0, 3).join('/');\n return `${extractHostnamePart(this.currentLocation)}${removeStartingSlash(payload.page)}`;\n } else {\n return getFormattedLocation(window.location);\n }\n }\n}\n","import {EventType} from '../events';\nimport {uuidv4} from '../client/crypto';\nimport {\n convertProductToMeasurementProtocol,\n convertImpressionListToMeasurementProtocol,\n} from '../client/measurementProtocolMapping/commerceMeasurementProtocolMapper';\nimport {BasePlugin, BasePluginEventTypes, PluginClass, PluginOptions} from './BasePlugin';\n\nexport const ECPluginEventTypes = {\n ...BasePluginEventTypes,\n};\n\nconst allECEventTypes = Object.keys(ECPluginEventTypes).map(\n (key) => ECPluginEventTypes[key as keyof typeof ECPluginEventTypes]\n);\n\n// From https://stackoverflow.com/a/49725198/497731\ntype RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> &\n {\n [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;\n }[Keys];\n\nexport type CustomValues = {\n [key: string]: string | number | boolean;\n};\n\nexport interface CoveoExtensionProperties {\n group?: string;\n}\n\nexport interface ProductProperties extends CoveoExtensionProperties {\n id?: string;\n name?: string;\n brand?: string;\n category?: string;\n variant?: string;\n price?: number;\n quantity?: number;\n coupon?: string;\n position?: number;\n custom?: CustomValues;\n}\n\nexport type Product = RequireAtLeastOne<ProductProperties, 'id' | 'name'>;\n\nexport interface ImpressionProperties extends CoveoExtensionProperties {\n id?: string;\n name?: string;\n list?: string;\n brand?: string;\n category?: string;\n variant?: string;\n position?: number;\n price?: number;\n custom?: CustomValues;\n}\n\nexport type Impression = RequireAtLeastOne<ImpressionProperties, 'id' | 'name'>;\nexport type BaseImpression = Omit<Impression, 'list'>;\nexport interface ImpressionList {\n listName?: string;\n impressions: BaseImpression[];\n}\n\nexport class ECPlugin extends BasePlugin {\n public static readonly Id = 'ec';\n private products: Product[] = [];\n private impressions: Impression[] = [];\n\n constructor({client, uuidGenerator = uuidv4}: PluginOptions) {\n super({client, uuidGenerator});\n }\n\n protected addHooks(): void {\n this.addHooksForPageView();\n this.addHooksForEvent();\n this.addHooksForECEvents();\n }\n\n addProduct(product: Product) {\n this.products.push(product);\n }\n\n addImpression(impression: Impression) {\n this.impressions.push(impression);\n }\n\n protected clearPluginData() {\n this.products = [];\n this.impressions = [];\n }\n\n private addHooksForECEvents() {\n this.client.registerBeforeSendEventHook((eventType, ...[payload]) => {\n return allECEventTypes.indexOf(eventType) !== -1 ? this.addECDataToPayload(eventType, payload) : payload;\n });\n this.client.registerAfterSendEventHook((eventType, ...[payload]) => {\n if (allECEventTypes.indexOf(eventType) !== -1) {\n this.updateLocationInformation(eventType, payload);\n }\n return payload;\n });\n }\n\n private addHooksForPageView() {\n this.client.addEventTypeMapping(ECPluginEventTypes.pageview, {\n newEventType: EventType.collect,\n variableLengthArgumentsNames: ['page'],\n addVisitorIdParameter: true,\n usesMeasurementProtocol: true,\n });\n }\n\n private addHooksForEvent() {\n this.client.addEventTypeMapping(ECPluginEventTypes.event, {\n newEventType: EventType.collect,\n variableLengthArgumentsNames: ['eventCategory', 'eventAction', 'eventLabel', 'eventValue'],\n addVisitorIdParameter: true,\n usesMeasurementProtocol: true,\n });\n }\n\n private addECDataToPayload(eventType: string, payload: any) {\n const ecPayload = {\n ...this.getLocationInformation(eventType, payload),\n ...this.getDefaultContextInformation(eventType),\n ...(this.action ? {action: this.action} : {}),\n ...(this.actionData || {}),\n };\n\n const productPayload = this.getProductPayload();\n const impressionPayload = this.getImpressionPayload();\n\n this.clearData();\n\n return {\n ...impressionPayload,\n ...productPayload,\n ...ecPayload,\n ...payload,\n };\n }\n\n private getProductPayload() {\n return this.products\n .map((product) => this.assureProductValidity(product))\n .reduce((newPayload, product, index) => {\n return {\n ...newPayload,\n ...convertProductToMeasurementProtocol(product, index),\n };\n }, {});\n }\n\n private getImpressionPayload() {\n const impressionsByList = this.getImpressionsByList();\n return impressionsByList\n .map(\n ({impressions, ...rest}) =>\n ({\n ...rest,\n impressions: impressions.map((baseImpression) =>\n this.assureBaseImpressionValidity(baseImpression)\n ),\n } as ImpressionList)\n )\n .reduce((newPayload, impressionList, index) => {\n return {\n ...newPayload,\n ...convertImpressionListToMeasurementProtocol(impressionList, index, 'pi'),\n };\n }, {});\n }\n\n private assureProductValidity(product: Product) {\n const {position, ...productRest} = product;\n if (position !== undefined && position < 1) {\n console.warn(\n `The position for product '${product.name || product.id}' must be greater ` + `than 0 when provided.`\n );\n\n return productRest;\n }\n\n return product;\n }\n\n private assureBaseImpressionValidity(baseImpression: BaseImpression) {\n const {position, ...baseImpressionRest} = baseImpression;\n if (position !== undefined && position < 1) {\n console.warn(\n `The position for impression '${baseImpression.name || baseImpression.id}'` +\n ` must be greater than 0 when provided.`\n );\n\n return baseImpressionRest;\n }\n\n return baseImpression;\n }\n\n private getImpressionsByList() {\n return this.impressions.reduce((lists, impression) => {\n const {list: listName, ...baseImpression} = impression;\n const list = lists.find((list) => list.listName === listName);\n if (list) {\n list.impressions.push(baseImpression);\n } else {\n lists.push({listName: listName, impressions: [baseImpression]});\n }\n return lists;\n }, [] as ImpressionList[]);\n }\n}\n\nexport const EC: PluginClass = ECPlugin;\n","import {EventType} from '../events';\nimport {uuidv4} from '../client/crypto';\nimport {convertTicketToMeasurementProtocol} from '../client/measurementProtocolMapping/serviceMeasurementProtocolMapper';\nimport {BasePlugin, BasePluginEventTypes, PluginClass, PluginOptions} from './BasePlugin';\n\nexport const SVCPluginEventTypes = {\n ...BasePluginEventTypes,\n};\n\nconst allSVCEventTypes = Object.keys(SVCPluginEventTypes).map(\n (key) => SVCPluginEventTypes[key as keyof typeof SVCPluginEventTypes]\n);\n\nexport type CustomValues = {\n [key: string]: string | number | boolean;\n};\n\nexport interface TicketProperties {\n id?: string;\n subject?: string;\n description?: string;\n category?: string;\n productId?: string;\n custom?: CustomValues;\n}\n\nexport type Ticket = TicketProperties;\n\nexport class SVCPlugin extends BasePlugin {\n public static readonly Id = 'svc';\n private ticket: Ticket = {};\n\n constructor({client, uuidGenerator = uuidv4}: PluginOptions) {\n super({client, uuidGenerator});\n }\n\n protected addHooks(): void {\n this.addHooksForEvent();\n this.addHooksForPageView();\n this.addHooksForSVCEvents();\n }\n\n setTicket(ticket: Ticket) {\n this.ticket = ticket;\n }\n\n protected clearPluginData() {\n this.ticket = {};\n }\n\n private addHooksForSVCEvents() {\n this.client.registerBeforeSendEventHook((eventType, ...[payload]) => {\n return allSVCEventTypes.indexOf(eventType) !== -1 ? this.addSVCDataToPayload(eventType, payload) : payload;\n });\n this.client.registerAfterSendEventHook((eventType, ...[payload]) => {\n if (allSVCEventTypes.indexOf(eventType) !== -1) {\n this.updateLocationInformation(eventType, payload);\n }\n return payload;\n });\n }\n\n private addHooksForPageView() {\n this.client.addEventTypeMapping(SVCPluginEventTypes.pageview, {\n newEventType: EventType.collect,\n variableLengthArgumentsNames: ['page'],\n addVisitorIdParameter: true,\n usesMeasurementProtocol: true,\n });\n }\n\n private addHooksForEvent() {\n this.client.addEventTypeMapping(SVCPluginEventTypes.event, {\n newEventType: EventType.collect,\n variableLengthArgumentsNames: ['eventCategory', 'eventAction', 'eventLabel', 'eventValue'],\n addVisitorIdParameter: true,\n usesMeasurementProtocol: true,\n });\n }\n\n private addSVCDataToPayload(eventType: string, payload: any) {\n const svcPayload = {\n ...this.getLocationInformation(eventType, payload),\n ...this.getDefaultContextInformation(eventType),\n ...(this.action ? {svcAction: this.action} : {}),\n ...(Object.keys(this.actionData ?? {}).length > 0 ? {svcActionData: this.actionData} : {}),\n };\n\n const ticketPayload = this.getTicketPayload();\n this.clearData();\n\n return {\n ...ticketPayload,\n ...svcPayload,\n ...payload,\n };\n }\n\n private getTicketPayload() {\n return convertTicketToMeasurementProtocol(this.ticket);\n }\n}\n\nexport const SVC: PluginClass = SVCPlugin;\n","import {PluginClass, PluginOptions, BasePlugin} from '../plugins/BasePlugin';\nimport {EC} from '../plugins/ec';\nimport {SVC} from '../plugins/svc';\n\nexport type UAPluginOptions = any[];\nexport type Plugin = BasePlugin & {[propName: string]: unknown};\n\nexport class Plugins {\n public static readonly DefaultPlugins: string[] = [EC.Id, SVC.Id];\n private registeredPluginsMap: Record<string, PluginClass> = {\n [EC.Id]: EC,\n [SVC.Id]: SVC,\n };\n private requiredPlugins: Record<string, BasePlugin> = {};\n\n require(name: string, options: PluginOptions): void {\n const pluginClass = this.registeredPluginsMap[name];\n if (!pluginClass) {\n throw new Error(\n `No plugin named \"${name}\" is currently registered. If you use a custom plugin, use 'provide' first.`\n );\n }\n this.requiredPlugins[name] = new pluginClass(options);\n }\n\n provide(name: string, plugin: PluginClass) {\n this.registeredPluginsMap[name] = plugin;\n }\n\n clearRequired(): void {\n this.requiredPlugins = {};\n }\n\n execute(name: string, fn: string, ...pluginOptions: UAPluginOptions) {\n const plugin = this.requiredPlugins[name] as Plugin;\n if (!plugin) {\n throw new Error(`The plugin \"${name}\" is not required. Check that you required it on initialization.`);\n }\n const actionFunction = plugin[fn];\n if (!actionFunction) {\n throw new Error(`The function \"${fn}\" does not exists on the plugin \"${name}\".`);\n }\n if (typeof actionFunction !== 'function') {\n throw new Error(`\"${fn}\" of the plugin \"${name}\" is not a function.`);\n }\n return actionFunction.apply(plugin, pluginOptions);\n }\n}\n","import {AnyEventResponse, EventType, SendEventArguments, VariableArgumentsPayload} from '../events';\nimport {AnalyticsClient, CoveoAnalyticsClient, Endpoints} from '../client/analytics';\nimport {Plugins} from './plugins';\nimport {PluginOptions} from '../plugins/BasePlugin';\nimport {PluginClass} from '../plugins/BasePlugin';\n\nexport type AvailableActions = keyof CoveoUA;\n\nexport interface CoveoUAOptions {\n endpoint?: string;\n plugins?: string[];\n}\n\n// CoveoUA mimics the GoogleAnalytics API.\nexport class CoveoUA {\n public client?: AnalyticsClient;\n private plugins: Plugins = new Plugins();\n private params: {[name: string]: string} = {};\n\n // init initializes a new SimpleAPI client.\n // @param token is your coveo access_token / api_key / ...\n // @param endpoint is the endpoint you want to target defaults to the\n // usage analytics production endpoint\n init(token: string | AnalyticsClient, optionsOrEndpoint: string | CoveoUAOptions): void {\n if (!token) {\n throw new Error(`You must pass your token when you call 'init'`);\n }\n\n if (typeof token === 'string') {\n this.client = new CoveoAnalyticsClient({\n token: token,\n endpoint: this.getEndpoint(optionsOrEndpoint),\n });\n } else if (this.isAnalyticsClient(token)) {\n this.client = token;\n }\n\n if (this.client) {\n const pluginOptions: PluginOptions = {client: this.client};\n this.plugins.clearRequired();\n this.getPluginKeys(optionsOrEndpoint).forEach((pluginKey) =>\n this.plugins.require(pluginKey, pluginOptions)\n );\n this.client.registerBeforeSendEventHook((eventType, payload) => ({\n ...payload,\n ...this.params,\n }));\n this.client.addEventTypeMapping(EventType.view, {newEventType: EventType.view, addClientIdParameter: true});\n } else {\n throw new Error(`You must pass either your token or a valid object when you call 'init'`);\n }\n }\n\n private isAnalyticsClient(token: AnalyticsClient): token is AnalyticsClient {\n return typeof token === 'object' && typeof token.sendEvent !== 'undefined';\n }\n\n private getPluginKeys(optionsOrEndpoint: string | CoveoUAOptions): string[] {\n if (typeof optionsOrEndpoint === 'string') {\n return Plugins.DefaultPlugins;\n }\n return Array.isArray(optionsOrEndpoint?.plugins) ? optionsOrEndpoint.plugins : Plugins.DefaultPlugins;\n }\n\n private getEndpoint(optionsOrEndpoint: string | CoveoUAOptions) {\n if (typeof optionsOrEndpoint === 'string') {\n return optionsOrEndpoint || Endpoints.default;\n } else if (optionsOrEndpoint?.endpoint) {\n return optionsOrEndpoint.endpoint;\n }\n return Endpoints.default;\n }\n\n // init initializes a new client intended to be used with a proxy that injects the access token.\n // @param endpoint is the endpoint of your proxy.\n initForProxy(endpoint: string): void {\n if (!endpoint) {\n throw new Error(`You must pass your endpoint when you call 'initForProxy'`);\n }\n\n if (typeof endpoint !== 'string') {\n throw new Error(`You must pass a string as the endpoint parameter when you call 'initForProxy'`);\n }\n\n this.client = new CoveoAnalyticsClient({\n endpoint: endpoint,\n });\n }\n\n set(keyOrObject: string | any, value: string): void {\n if (typeof keyOrObject === 'string') {\n this.params[keyOrObject] = value;\n } else {\n Object.keys(keyOrObject).map((key) => {\n this.params[key] = keyOrObject[key];\n });\n }\n }\n\n send(...[event, ...payload]: SendEventArguments): Promise<AnyEventResponse | void> {\n if (typeof this.client == 'undefined') {\n throw new Error(`You must call init before sending an event`);\n }\n\n if (!event) {\n throw new Error(`You must provide an event type when calling \"send\".`);\n }\n\n return this.client.sendEvent(event.toLowerCase(), ...(payload as VariableArgumentsPayload));\n }\n\n onLoad(callback: Function) {\n if (typeof callback == 'undefined') {\n throw new Error(`You must pass a function when you call 'onLoad'`);\n }\n\n callback();\n }\n\n provide(name: string, plugin: PluginClass) {\n this.plugins.provide(name, plugin);\n }\n\n require(name: string, options: Omit<PluginOptions, 'client'>) {\n if (!this.client) {\n throw new Error(`You must call init before requiring a plugin`);\n }\n this.plugins.require(name, {...options, client: this.client});\n }\n\n callPlugin(pluginName: string, fn: string, ...args: any): void {\n this.plugins.execute(pluginName, fn, ...args);\n }\n\n reset() {\n this.client = undefined;\n this.plugins = new Plugins();\n this.params = {};\n }\n}\n\nexport const coveoua = new CoveoUA();\nexport const getCurrentClient = () => coveoua.client;\n\nexport const handleOneAnalyticsEvent = (command: string, ...params: any[]) => {\n const [, trackerName, pluginName, fn] = /^(?:(\\w+)\\.)?(?:(\\w+):)?(\\w+)$/.exec(command)!;\n\n const actionFunction = (<any>coveoua)[fn];\n if (pluginName && fn) {\n return coveoua.callPlugin(pluginName as string, fn, ...params);\n } else if (actionFunction) {\n return actionFunction.apply(coveoua, params);\n } else {\n const actions: AvailableActions[] = [\n 'init',\n 'set',\n 'send',\n 'onLoad',\n 'callPlugin',\n 'reset',\n 'require',\n 'provide',\n ];\n throw new Error(`The action \"${command}\" does not exist. Available actions: ${actions.join(', ')}.`);\n }\n};\n\nexport default handleOneAnalyticsEvent;\n","import {AnalyticsClient} from './analytics';\nimport {\n AnyEventResponse,\n SearchEventResponse,\n ClickEventResponse,\n CustomEventResponse,\n VisitResponse,\n HealthResponse,\n ViewEventResponse,\n} from '../events';\nimport {NoopRuntime} from './runtimeEnvironment';\n\nexport class NoopAnalytics implements AnalyticsClient {\n getPayload(): Promise<any> {\n return Promise.resolve();\n }\n getParameters(): Promise<any> {\n return Promise.resolve();\n }\n sendEvent(): Promise<AnyEventResponse | void> {\n return Promise.resolve();\n }\n sendSearchEvent(): Promise<SearchEventResponse | void> {\n return Promise.resolve();\n }\n sendClickEvent(): Promise<ClickEventResponse | void> {\n return Promise.resolve();\n }\n sendCustomEvent(): Promise<CustomEventResponse | void> {\n return Promise.resolve();\n }\n sendViewEvent(): Promise<ViewEventResponse | void> {\n return Promise.resolve();\n }\n getVisit(): Promise<VisitResponse> {\n return Promise.resolve({id: '', visitorId: ''});\n }\n getHealth(): Promise<HealthResponse> {\n return Promise.resolve({status: ''});\n }\n registerBeforeSendEventHook(): void {}\n registerAfterSendEventHook(): void {}\n addEventTypeMapping(): void {}\n runtime = new NoopRuntime();\n currentVisitorId = '';\n}\n","function filterConsecutiveRepeatedValues(rawData: string[]) {\n let prev = '';\n return rawData.filter((value) => {\n const isDifferent = value !== prev;\n prev = value;\n return isDifferent;\n });\n}\n\nfunction removeSemicolons(rawData: string[]) {\n return rawData.map((value) => {\n return value.replace(/;/g, '');\n });\n}\n\nfunction getDataString(data: string[]): string {\n const ANALYTICS_LENGTH_LIMIT = 256;\n\n const formattedData = data.join(';');\n if (formattedData.length <= ANALYTICS_LENGTH_LIMIT) {\n return formattedData;\n }\n return getDataString(data.slice(1));\n}\n\nexport const formatArrayForCoveoCustomData = (rawData: string[]): string => {\n const dataWithoutSemicolons = removeSemicolons(rawData);\n const dataWithoutRepeatedValues = filterConsecutiveRepeatedValues(dataWithoutSemicolons);\n\n return getDataString(dataWithoutRepeatedValues);\n};\n","import {OmniboxSuggestionsMetadata} from '../searchPage/searchPageEvents';\nimport {formatArrayForCoveoCustomData} from './format-array-for-coveo-custom-data';\n\nexport function formatOmniboxMetadata(meta: OmniboxSuggestionsMetadata): OmniboxSuggestionsMetadata {\n const partialQueries =\n typeof meta.partialQueries === 'string'\n ? meta.partialQueries\n : formatArrayForCoveoCustomData(meta.partialQueries);\n const suggestions =\n typeof meta.suggestions === 'string' ? meta.suggestions : formatArrayForCoveoCustomData(meta.suggestions);\n\n return {\n ...meta,\n partialQueries,\n suggestions,\n };\n}\n","import CoveoAnalyticsClient, {ClientOptions, AnalyticsClient} from '../client/analytics';\nimport {\n SearchEventRequest,\n ClickEventRequest,\n CustomEventRequest,\n SearchEventResponse,\n AnyEventResponse,\n ClickEventResponse,\n CustomEventResponse,\n} from '../events';\nimport {\n SearchPageEvents,\n OmniboxSuggestionsMetadata,\n FacetMetadata,\n FacetRangeMetadata,\n CategoryFacetMetadata,\n DocumentIdentifier,\n InterfaceChangeMetadata,\n ResultsSortMetadata,\n PartialDocumentInformation,\n CustomEventsTypes,\n TriggerNotifyMetadata,\n TriggerExecuteMetadata,\n TriggerRedirectMetadata,\n PagerResizeMetadata,\n PagerMetadata,\n FacetBaseMeta,\n FacetSortMeta,\n QueryErrorMeta,\n FacetStateMetadata,\n SmartSnippetFeedbackReason,\n SmartSnippetSuggestionMeta,\n SmartSnippetDocumentIdentifier,\n StaticFilterMetadata,\n StaticFilterToggleValueMetadata,\n UndoTriggerRedirectMetadata,\n SmartSnippetLinkMeta,\n} from './searchPageEvents';\nimport {NoopAnalytics} from '../client/noopAnalytics';\nimport {formatOmniboxMetadata} from '../formatting/format-omnibox-metadata';\nimport doNotTrack from '../donottrack';\n\nexport interface SearchPageClientProvider {\n getBaseMetadata: () => Record<string, any>;\n getSearchEventRequestPayload: () => Omit<SearchEventRequest, 'actionCause' | 'searchQueryUid'>;\n getSearchUID: () => string;\n getPipeline: () => string;\n getOriginContext?: () => string;\n getOriginLevel1: () => string;\n getOriginLevel2: () => string;\n getOriginLevel3: () => string;\n getLanguage: () => string;\n getIsAnonymous: () => boolean;\n getFacetState?: () => FacetStateMetadata[];\n getSplitTestRunName?: () => string | undefined;\n getSplitTestRunVersion?: () => string | undefined;\n}\n\nexport interface SearchPageClientOptions extends ClientOptions {\n enableAnalytics: boolean;\n}\n\nexport type EventDescription = Pick<SearchEventRequest, 'actionCause' | 'customData'>;\n\nexport interface EventBuilder<T extends AnyEventResponse = AnyEventResponse> {\n description: EventDescription;\n log: () => Promise<T | void>;\n}\n\nexport class CoveoSearchPageClient {\n public coveoAnalyticsClient: AnalyticsClient;\n\n constructor(private opts: Partial<SearchPageClientOptions>, private provider: SearchPageClientProvider) {\n const shouldDisableAnalytics = opts.enableAnalytics === false || doNotTrack();\n this.coveoAnalyticsClient = shouldDisableAnalytics ? new NoopAnalytics() : new CoveoAnalyticsClient(opts);\n }\n\n public disable() {\n if (this.coveoAnalyticsClient instanceof CoveoAnalyticsClient) {\n this.coveoAnalyticsClient.clear();\n }\n\n this.coveoAnalyticsClient = new NoopAnalytics();\n }\n\n public enable() {\n this.coveoAnalyticsClient = new CoveoAnalyticsClient(this.opts);\n }\n\n public makeInterfaceLoad() {\n return this.makeSearchEvent(SearchPageEvents.interfaceLoad);\n }\n\n public logInterfaceLoad() {\n return this.makeInterfaceLoad().log();\n }\n\n public makeRecommendationInterfaceLoad() {\n return this.makeSearchEvent(SearchPageEvents.recommendationInterfaceLoad);\n }\n\n public logRecommendationInterfaceLoad() {\n return this.makeRecommendationInterfaceLoad().log();\n }\n\n public makeRecommendation() {\n return this.makeCustomEvent(SearchPageEvents.recommendation);\n }\n\n public logRecommendation() {\n return this.makeRecommendation().log();\n }\n\n public makeRecommendationOpen(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeClickEvent(SearchPageEvents.recommendationOpen, info, identifier);\n }\n\n public logRecommendationOpen(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeRecommendationOpen(info, identifier).log();\n }\n\n public makeStaticFilterClearAll(meta: StaticFilterMetadata) {\n return this.makeSearchEvent(SearchPageEvents.staticFilterClearAll, meta);\n }\n\n public logStaticFilterClearAll(meta: StaticFilterMetadata) {\n return this.makeStaticFilterClearAll(meta).log();\n }\n\n public makeStaticFilterSelect(meta: StaticFilterToggleValueMetadata) {\n return this.makeSearchEvent(SearchPageEvents.staticFilterSelect, meta);\n }\n\n public logStaticFilterSelect(meta: StaticFilterToggleValueMetadata) {\n return this.makeStaticFilterSelect(meta).log();\n }\n\n public makeStaticFilterDeselect(meta: StaticFilterToggleValueMetadata) {\n return this.makeSearchEvent(SearchPageEvents.staticFilterDeselect, meta);\n }\n\n public logStaticFilterDeselect(meta: StaticFilterToggleValueMetadata) {\n return this.makeStaticFilterDeselect(meta).log();\n }\n\n public makeFetchMoreResults() {\n return this.makeCustomEvent(SearchPageEvents.pagerScrolling, {type: 'getMoreResults'});\n }\n\n public logFetchMoreResults() {\n return this.makeFetchMoreResults().log();\n }\n\n public makeInterfaceChange(metadata: InterfaceChangeMetadata) {\n return this.makeSearchEvent(SearchPageEvents.interfaceChange, metadata);\n }\n\n public logInterfaceChange(metadata: InterfaceChangeMetadata) {\n return this.makeInterfaceChange(metadata).log();\n }\n\n public makeDidYouMeanAutomatic() {\n return this.makeSearchEvent(SearchPageEvents.didyoumeanAutomatic);\n }\n\n public logDidYouMeanAutomatic() {\n return this.makeDidYouMeanAutomatic().log();\n }\n\n public makeDidYouMeanClick() {\n return this.makeSearchEvent(SearchPageEvents.didyoumeanClick);\n }\n\n public logDidYouMeanClick() {\n return this.makeDidYouMeanClick().log();\n }\n\n public makeResultsSort(metadata: ResultsSortMetadata) {\n return this.makeSearchEvent(SearchPageEvents.resultsSort, metadata);\n }\n\n public logResultsSort(metadata: ResultsSortMetadata) {\n return this.makeResultsSort(metadata).log();\n }\n\n public makeSearchboxSubmit() {\n return this.makeSearchEvent(SearchPageEvents.searchboxSubmit);\n }\n\n public logSearchboxSubmit() {\n return this.makeSearchboxSubmit().log();\n }\n\n public makeSearchboxClear() {\n return this.makeSearchEvent(SearchPageEvents.searchboxClear);\n }\n\n public logSearchboxClear() {\n return this.makeSearchboxClear().log();\n }\n\n public makeSearchboxAsYouType() {\n return this.makeSearchEvent(SearchPageEvents.searchboxAsYouType);\n }\n\n public logSearchboxAsYouType() {\n return this.makeSearchboxAsYouType().log();\n }\n\n public makeBreadcrumbFacet(metadata: FacetMetadata | FacetRangeMetadata | CategoryFacetMetadata) {\n return this.makeSearchEvent(SearchPageEvents.breadcrumbFacet, metadata);\n }\n\n public logBreadcrumbFacet(metadata: FacetMetadata | FacetRangeMetadata | CategoryFacetMetadata) {\n return this.makeBreadcrumbFacet(metadata).log();\n }\n\n public makeBreadcrumbResetAll() {\n return this.makeSearchEvent(SearchPageEvents.breadcrumbResetAll);\n }\n\n public logBreadcrumbResetAll() {\n return this.makeBreadcrumbResetAll().log();\n }\n\n public makeDocumentQuickview(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeClickEvent(SearchPageEvents.documentQuickview, info, identifier);\n }\n\n public logDocumentQuickview(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeDocumentQuickview(info, identifier).log();\n }\n\n public makeDocumentOpen(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeClickEvent(SearchPageEvents.documentOpen, info, identifier);\n }\n\n public logDocumentOpen(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeDocumentOpen(info, identifier).log();\n }\n\n public makeOmniboxAnalytics(meta: OmniboxSuggestionsMetadata) {\n return this.makeSearchEvent(SearchPageEvents.omniboxAnalytics, formatOmniboxMetadata(meta));\n }\n\n public logOmniboxAnalytics(meta: OmniboxSuggestionsMetadata) {\n return this.makeOmniboxAnalytics(meta).log();\n }\n\n public makeOmniboxFromLink(meta: OmniboxSuggestionsMetadata) {\n return this.makeSearchEvent(SearchPageEvents.omniboxFromLink, formatOmniboxMetadata(meta));\n }\n\n public logOmniboxFromLink(meta: OmniboxSuggestionsMetadata) {\n return this.makeOmniboxFromLink(meta).log();\n }\n\n public makeSearchFromLink() {\n return this.makeSearchEvent(SearchPageEvents.searchFromLink);\n }\n\n public logSearchFromLink() {\n return this.makeSearchFromLink().log();\n }\n\n public makeTriggerNotify(meta: TriggerNotifyMetadata) {\n return this.makeCustomEvent(SearchPageEvents.triggerNotify, meta);\n }\n\n public logTriggerNotify(meta: TriggerNotifyMetadata) {\n return this.makeTriggerNotify(meta).log();\n }\n\n public makeTriggerExecute(meta: TriggerExecuteMetadata) {\n return this.makeCustomEvent(SearchPageEvents.triggerExecute, meta);\n }\n\n public logTriggerExecute(meta: TriggerExecuteMetadata) {\n return this.makeTriggerExecute(meta).log();\n }\n\n public makeTriggerQuery() {\n return this.makeCustomEvent(\n SearchPageEvents.triggerQuery,\n {query: this.provider.getSearchEventRequestPayload().queryText},\n 'queryPipelineTriggers'\n );\n }\n\n public logTriggerQuery() {\n return this.makeTriggerQuery().log();\n }\n\n public makeUndoTriggerQuery(meta: UndoTriggerRedirectMetadata) {\n return this.makeSearchEvent(SearchPageEvents.undoTriggerQuery, meta);\n }\n\n public logUndoTriggerQuery(meta: UndoTriggerRedirectMetadata) {\n return this.makeUndoTriggerQuery(meta).log();\n }\n\n public makeTriggerRedirect(meta: TriggerRedirectMetadata) {\n return this.makeCustomEvent(SearchPageEvents.triggerRedirect, {\n ...meta,\n query: this.provider.getSearchEventRequestPayload().queryText,\n });\n }\n\n public logTriggerRedirect(meta: TriggerRedirectMetadata) {\n return this.makeTriggerRedirect(meta).log();\n }\n\n public makePagerResize(meta: PagerResizeMetadata) {\n return this.makeCustomEvent(SearchPageEvents.pagerResize, meta);\n }\n\n public logPagerResize(meta: PagerResizeMetadata) {\n return this.makePagerResize(meta).log();\n }\n\n public makePagerNumber(meta: PagerMetadata) {\n return this.makeCustomEvent(SearchPageEvents.pagerNumber, meta);\n }\n\n public logPagerNumber(meta: PagerMetadata) {\n return this.makePagerNumber(meta).log();\n }\n\n public makePagerNext(meta: PagerMetadata) {\n return this.makeCustomEvent(SearchPageEvents.pagerNext, meta);\n }\n\n public logPagerNext(meta: PagerMetadata) {\n return this.makePagerNext(meta).log();\n }\n\n public makePagerPrevious(meta: PagerMetadata) {\n return this.makeCustomEvent(SearchPageEvents.pagerPrevious, meta);\n }\n\n public logPagerPrevious(meta: PagerMetadata) {\n return this.makePagerPrevious(meta).log();\n }\n\n public makePagerScrolling() {\n return this.makeCustomEvent(SearchPageEvents.pagerScrolling);\n }\n\n public logPagerScrolling() {\n return this.makePagerScrolling().log();\n }\n\n public makeFacetClearAll(meta: FacetBaseMeta) {\n return this.makeSearchEvent(SearchPageEvents.facetClearAll, meta);\n }\n\n public logFacetClearAll(meta: FacetBaseMeta) {\n return this.makeFacetClearAll(meta).log();\n }\n\n public makeFacetSearch(meta: FacetBaseMeta) {\n return this.makeSearchEvent(SearchPageEvents.facetSearch, meta);\n }\n\n public logFacetSearch(meta: FacetBaseMeta) {\n return this.makeFacetSearch(meta).log();\n }\n\n public makeFacetSelect(meta: FacetMetadata) {\n return this.makeSearchEvent(SearchPageEvents.facetSelect, meta);\n }\n\n public logFacetSelect(meta: FacetMetadata) {\n return this.makeFacetSelect(meta).log();\n }\n\n public makeFacetDeselect(meta: FacetMetadata) {\n return this.makeSearchEvent(SearchPageEvents.facetDeselect, meta);\n }\n\n public logFacetDeselect(meta: FacetMetadata) {\n return this.makeFacetDeselect(meta).log();\n }\n\n public makeFacetExclude(meta: FacetMetadata) {\n return this.makeSearchEvent(SearchPageEvents.facetExclude, meta);\n }\n\n public logFacetExclude(meta: FacetMetadata) {\n return this.makeFacetExclude(meta).log();\n }\n\n public makeFacetUnexclude(meta: FacetMetadata) {\n return this.makeSearchEvent(SearchPageEvents.facetUnexclude, meta);\n }\n\n public logFacetUnexclude(meta: FacetMetadata) {\n return this.makeFacetUnexclude(meta).log();\n }\n\n public makeFacetSelectAll(meta: FacetBaseMeta) {\n return this.makeSearchEvent(SearchPageEvents.facetSelectAll, meta);\n }\n\n public logFacetSelectAll(meta: FacetBaseMeta) {\n return this.makeFacetSelectAll(meta).log();\n }\n\n public makeFacetUpdateSort(meta: FacetSortMeta) {\n return this.makeSearchEvent(SearchPageEvents.facetUpdateSort, meta);\n }\n\n public logFacetUpdateSort(meta: FacetSortMeta) {\n return this.makeFacetUpdateSort(meta).log();\n }\n\n public makeFacetShowMore(meta: FacetBaseMeta) {\n return this.makeCustomEvent(SearchPageEvents.facetShowMore, meta);\n }\n\n public logFacetShowMore(meta: FacetBaseMeta) {\n return this.makeFacetShowMore(meta).log();\n }\n\n public makeFacetShowLess(meta: FacetBaseMeta) {\n return this.makeCustomEvent(SearchPageEvents.facetShowLess, meta);\n }\n\n public logFacetShowLess(meta: FacetBaseMeta) {\n return this.makeFacetShowLess(meta).log();\n }\n\n public makeQueryError(meta: QueryErrorMeta) {\n return this.makeCustomEvent(SearchPageEvents.queryError, meta);\n }\n\n public logQueryError(meta: QueryErrorMeta) {\n return this.makeQueryError(meta).log();\n }\n\n public makeQueryErrorBack(): EventBuilder<SearchEventResponse> {\n return {\n description: this.makeDescription(SearchPageEvents.queryErrorBack),\n log: async () => {\n await this.logCustomEvent(SearchPageEvents.queryErrorBack);\n return this.logSearchEvent(SearchPageEvents.queryErrorBack);\n },\n };\n }\n\n public logQueryErrorBack() {\n return this.makeQueryErrorBack().log();\n }\n\n public makeQueryErrorRetry(): EventBuilder<SearchEventResponse> {\n return {\n description: this.makeDescription(SearchPageEvents.queryErrorRetry),\n log: async () => {\n await this.logCustomEvent(SearchPageEvents.queryErrorRetry);\n return this.logSearchEvent(SearchPageEvents.queryErrorRetry);\n },\n };\n }\n\n public logQueryErrorRetry() {\n return this.makeQueryErrorRetry().log();\n }\n\n public makeQueryErrorClear(): EventBuilder<SearchEventResponse> {\n return {\n description: this.makeDescription(SearchPageEvents.queryErrorClear),\n log: async () => {\n await this.logCustomEvent(SearchPageEvents.queryErrorClear);\n return this.logSearchEvent(SearchPageEvents.queryErrorClear);\n },\n };\n }\n\n public logQueryErrorClear() {\n return this.makeQueryErrorClear().log();\n }\n\n public makeLikeSmartSnippet() {\n return this.makeCustomEvent(SearchPageEvents.likeSmartSnippet);\n }\n\n public logLikeSmartSnippet() {\n return this.makeLikeSmartSnippet().log();\n }\n\n public makeDislikeSmartSnippet() {\n return this.makeCustomEvent(SearchPageEvents.dislikeSmartSnippet);\n }\n\n public logDislikeSmartSnippet() {\n return this.makeDislikeSmartSnippet().log();\n }\n\n public makeExpandSmartSnippet() {\n return this.makeCustomEvent(SearchPageEvents.expandSmartSnippet);\n }\n\n public logExpandSmartSnippet() {\n return this.makeExpandSmartSnippet().log();\n }\n\n public makeCollapseSmartSnippet() {\n return this.makeCustomEvent(SearchPageEvents.collapseSmartSnippet);\n }\n\n public logCollapseSmartSnippet() {\n return this.makeCollapseSmartSnippet().log();\n }\n\n public makeOpenSmartSnippetFeedbackModal() {\n return this.makeCustomEvent(SearchPageEvents.openSmartSnippetFeedbackModal);\n }\n\n public logOpenSmartSnippetFeedbackModal() {\n return this.makeOpenSmartSnippetFeedbackModal().log();\n }\n\n public makeCloseSmartSnippetFeedbackModal() {\n return this.makeCustomEvent(SearchPageEvents.closeSmartSnippetFeedbackModal);\n }\n\n public logCloseSmartSnippetFeedbackModal() {\n return this.makeCloseSmartSnippetFeedbackModal().log();\n }\n\n public makeSmartSnippetFeedbackReason(reason: SmartSnippetFeedbackReason, details?: string) {\n return this.makeCustomEvent(SearchPageEvents.sendSmartSnippetReason, {reason, details});\n }\n\n public logSmartSnippetFeedbackReason(reason: SmartSnippetFeedbackReason, details?: string) {\n return this.makeSmartSnippetFeedbackReason(reason, details).log();\n }\n\n public makeExpandSmartSnippetSuggestion(snippet: SmartSnippetSuggestionMeta | SmartSnippetDocumentIdentifier) {\n return this.makeCustomEvent(\n SearchPageEvents.expandSmartSnippetSuggestion,\n 'documentId' in snippet ? snippet : {documentId: snippet}\n );\n }\n\n public logExpandSmartSnippetSuggestion(snippet: SmartSnippetSuggestionMeta | SmartSnippetDocumentIdentifier) {\n return this.makeExpandSmartSnippetSuggestion(snippet).log();\n }\n\n public makeCollapseSmartSnippetSuggestion(snippet: SmartSnippetSuggestionMeta | SmartSnippetDocumentIdentifier) {\n return this.makeCustomEvent(\n SearchPageEvents.collapseSmartSnippetSuggestion,\n 'documentId' in snippet ? snippet : {documentId: snippet}\n );\n }\n\n public logCollapseSmartSnippetSuggestion(snippet: SmartSnippetSuggestionMeta | SmartSnippetDocumentIdentifier) {\n return this.makeCollapseSmartSnippetSuggestion(snippet).log();\n }\n\n /**\n * @deprecated\n */\n private makeShowMoreSmartSnippetSuggestion(snippet: SmartSnippetSuggestionMeta) {\n return this.makeCustomEvent(SearchPageEvents.showMoreSmartSnippetSuggestion, snippet);\n }\n\n /**\n * @deprecated\n */\n public logShowMoreSmartSnippetSuggestion(snippet: SmartSnippetSuggestionMeta) {\n return this.makeShowMoreSmartSnippetSuggestion(snippet).log();\n }\n\n /**\n * @deprecated\n */\n private makeShowLessSmartSnippetSuggestion(snippet: SmartSnippetSuggestionMeta) {\n return this.makeCustomEvent(SearchPageEvents.showLessSmartSnippetSuggestion, snippet);\n }\n\n /**\n * @deprecated\n */\n public logShowLessSmartSnippetSuggestion(snippet: SmartSnippetSuggestionMeta) {\n return this.makeShowLessSmartSnippetSuggestion(snippet).log();\n }\n\n public makeOpenSmartSnippetSource(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeClickEvent(SearchPageEvents.openSmartSnippetSource, info, identifier);\n }\n\n public logOpenSmartSnippetSource(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeOpenSmartSnippetSource(info, identifier).log();\n }\n\n public makeOpenSmartSnippetSuggestionSource(info: PartialDocumentInformation, snippet: SmartSnippetSuggestionMeta) {\n return this.makeClickEvent(\n SearchPageEvents.openSmartSnippetSuggestionSource,\n info,\n {contentIDKey: snippet.documentId.contentIdKey, contentIDValue: snippet.documentId.contentIdValue},\n snippet\n );\n }\n\n public logOpenSmartSnippetSuggestionSource(info: PartialDocumentInformation, snippet: SmartSnippetSuggestionMeta) {\n return this.makeOpenSmartSnippetSuggestionSource(info, snippet).log();\n }\n\n public makeOpenSmartSnippetInlineLink(\n info: PartialDocumentInformation,\n identifierAndLink: DocumentIdentifier & SmartSnippetLinkMeta\n ) {\n return this.makeClickEvent(\n SearchPageEvents.openSmartSnippetInlineLink,\n info,\n {contentIDKey: identifierAndLink.contentIDKey, contentIDValue: identifierAndLink.contentIDValue},\n identifierAndLink\n );\n }\n\n public logOpenSmartSnippetInlineLink(\n info: PartialDocumentInformation,\n identifierAndLink: DocumentIdentifier & SmartSnippetLinkMeta\n ) {\n return this.makeOpenSmartSnippetInlineLink(info, identifierAndLink).log();\n }\n\n public makeOpenSmartSnippetSuggestionInlineLink(\n info: PartialDocumentInformation,\n snippetAndLink: SmartSnippetSuggestionMeta & SmartSnippetLinkMeta\n ) {\n return this.makeClickEvent(\n SearchPageEvents.openSmartSnippetSuggestionInlineLink,\n info,\n {\n contentIDKey: snippetAndLink.documentId.contentIdKey,\n contentIDValue: snippetAndLink.documentId.contentIdValue,\n },\n snippetAndLink\n );\n }\n\n public logOpenSmartSnippetSuggestionInlineLink(\n info: PartialDocumentInformation,\n snippetAndLink: SmartSnippetSuggestionMeta & SmartSnippetLinkMeta\n ) {\n return this.makeOpenSmartSnippetSuggestionInlineLink(info, snippetAndLink).log();\n }\n\n public makeRecentQueryClick() {\n return this.makeSearchEvent(SearchPageEvents.recentQueryClick);\n }\n\n public logRecentQueryClick() {\n return this.makeRecentQueryClick().log();\n }\n\n public makeClearRecentQueries() {\n return this.makeCustomEvent(SearchPageEvents.clearRecentQueries);\n }\n\n public logClearRecentQueries() {\n return this.makeClearRecentQueries().log();\n }\n\n public makeRecentResultClick(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeCustomEvent(SearchPageEvents.recentResultClick, {info, identifier});\n }\n\n public logRecentResultClick(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeRecentResultClick(info, identifier).log();\n }\n\n public makeClearRecentResults() {\n return this.makeCustomEvent(SearchPageEvents.clearRecentResults);\n }\n\n public logClearRecentResults() {\n return this.makeClearRecentResults().log();\n }\n\n public makeNoResultsBack() {\n return this.makeSearchEvent(SearchPageEvents.noResultsBack);\n }\n\n public logNoResultsBack() {\n return this.makeNoResultsBack().log();\n }\n\n public makeShowMoreFoldedResults(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeClickEvent(SearchPageEvents.showMoreFoldedResults, info, identifier);\n }\n\n public logShowMoreFoldedResults(info: PartialDocumentInformation, identifier: DocumentIdentifier) {\n return this.makeShowMoreFoldedResults(info, identifier).log();\n }\n\n public makeShowLessFoldedResults() {\n return this.makeCustomEvent(SearchPageEvents.showLessFoldedResults);\n }\n\n public logShowLessFoldedResults() {\n return this.makeShowLessFoldedResults().log();\n }\n\n public makeCustomEvent(\n event: SearchPageEvents,\n metadata?: Record<string, any>,\n eventType: string = CustomEventsTypes[event]!\n ): EventBuilder<CustomEventResponse> {\n const customData = {...this.provider.getBaseMetadata(), ...metadata};\n return {\n description: this.makeDescription(event, metadata),\n log: async () => {\n const payload: CustomEventRequest = {\n ...(await this.getBaseCustomEventRequest(customData)),\n eventType,\n eventValue: event,\n };\n\n return this.coveoAnalyticsClient.sendCustomEvent(payload);\n },\n };\n }\n\n public logCustomEvent(\n event: SearchPageEvents,\n metadata?: Record<string, any>,\n eventType: string = CustomEventsTypes[event]!\n ) {\n return this.makeCustomEvent(event, metadata, eventType).log();\n }\n\n public makeCustomEventWithType(eventValue: string, eventType: string, metadata?: Record<string, any>) {\n const customData = {...this.provider.getBaseMetadata(), ...metadata};\n return {\n description: <EventDescription>{actionCause: eventValue, customData},\n log: async () => {\n const payload: CustomEventRequest = {\n ...(await this.getBaseCustomEventRequest(customData)),\n eventType,\n eventValue,\n };\n return this.coveoAnalyticsClient.sendCustomEvent(payload);\n },\n };\n }\n\n public logCustomEventWithType(eventValue: string, eventType: string, metadata?: Record<string, any>) {\n return this.makeCustomEventWithType(eventValue, eventType, metadata).log();\n }\n\n public async logSearchEvent(event: SearchPageEvents, metadata?: Record<string, any>) {\n return this.coveoAnalyticsClient.sendSearchEvent(await this.getBaseSearchEventRequest(event, metadata));\n }\n\n private makeDescription(actionCause: SearchPageEvents, metadata?: Record<string, any>): EventDescription {\n return {actionCause, customData: {...this.provider.getBaseMetadata(), ...metadata}};\n }\n\n public makeSearchEvent(event: SearchPageEvents, metadata?: Record<string, any>): EventBuilder<SearchEventResponse> {\n return {\n description: this.makeDescription(event, metadata),\n log: () => this.logSearchEvent(event, metadata),\n };\n }\n\n public async logClickEvent(\n event: SearchPageEvents,\n info: PartialDocumentInformation,\n identifier: DocumentIdentifier,\n metadata?: Record<string, any>\n ) {\n const payload: ClickEventRequest = {\n ...info,\n ...(await this.getBaseEventRequest({...identifier, ...metadata})),\n searchQueryUid: this.provider.getSearchUID(),\n queryPipeline: this.provider.getPipeline(),\n actionCause: event,\n };\n\n return this.coveoAnalyticsClient.sendClickEvent(payload);\n }\n\n public makeClickEvent(\n event: SearchPageEvents,\n info: PartialDocumentInformation,\n identifier: DocumentIdentifier,\n metadata?: Record<string, any>\n ): EventBuilder<ClickEventResponse> {\n return {\n description: this.makeDescription(event, {...identifier, ...metadata}),\n log: () => this.logClickEvent(event, info, identifier, metadata),\n };\n }\n\n private async getBaseSearchEventRequest(\n event: SearchPageEvents,\n metadata?: Record<string, any>\n ): Promise<SearchEventRequest> {\n return {\n ...(await this.getBaseEventRequest(metadata)),\n ...this.provider.getSearchEventRequestPayload(),\n searchQueryUid: this.provider.getSearchUID(),\n queryPipeline: this.provider.getPipeline(),\n actionCause: event,\n };\n }\n\n private async getBaseCustomEventRequest(metadata?: Record<string, any>) {\n return {\n ...(await this.getBaseEventRequest(metadata)),\n lastSearchQueryUid: this.provider.getSearchUID(),\n };\n }\n\n private async getBaseEventRequest(metadata?: Record<string, any>) {\n const customData = {...this.provider.getBaseMetadata(), ...metadata};\n return {\n ...this.getOrigins(),\n ...this.getSplitTestRun(),\n customData,\n language: this.provider.getLanguage(),\n facetState: this.provider.getFacetState ? this.provider.getFacetState() : [],\n anonymous: this.provider.getIsAnonymous(),\n clientId: await this.getClientId(),\n };\n }\n\n private getOrigins() {\n return {\n originContext: this.provider.getOriginContext?.(),\n originLevel1: this.provider.getOriginLevel1(),\n originLevel2: this.provider.getOriginLevel2(),\n originLevel3: this.provider.getOriginLevel3(),\n };\n }\n\n private getClientId() {\n return this.coveoAnalyticsClient instanceof CoveoAnalyticsClient\n ? this.coveoAnalyticsClient.getCurrentVisitorId()\n : undefined;\n }\n\n private getSplitTestRun() {\n const splitTestRunName = this.provider.getSplitTestRunName ? this.provider.getSplitTestRunName() : '';\n const splitTestRunVersion = this.provider.getSplitTestRunVersion ? this.provider.getSplitTestRunVersion() : '';\n return {\n ...(splitTestRunName && {splitTestRunName}),\n ...(splitTestRunVersion && {splitTestRunVersion}),\n };\n }\n}\n","import {TicketProperties} from '../plugins/svc';\n\nexport enum CaseAssistEvents {\n click = 'click',\n flowStart = 'flowStart',\n}\n\nexport enum CaseAssistActions {\n enterInterface = 'ticket_create_start',\n fieldUpdate = 'ticket_field_update',\n fieldSuggestionClick = 'ticket_classification_click',\n suggestionClick = 'suggestion_click',\n suggestionRate = 'suggestion_rate',\n nextCaseStep = 'ticket_next_stage',\n caseCancelled = 'ticket_cancel',\n caseSolved = 'ticket_cancel',\n caseCreated = 'ticket_create',\n}\n\nexport enum CaseCancelledReasons {\n quit = 'Quit',\n solved = 'Solved',\n}\n\nexport interface EnterInterfaceMetadata {\n ticket: TicketProperties;\n}\n\nexport interface UpdateCaseFieldMetadata {\n fieldName: string;\n ticket: TicketProperties;\n}\n\nexport interface SelectFieldSuggestionMetadata {\n suggestion: FieldSuggestion;\n ticket: TicketProperties;\n}\n\nexport interface SelectDocumentSuggestionMetadata {\n suggestion: DocumentSuggestion;\n ticket: TicketProperties;\n}\n\nexport interface RateDocumentSuggestionMetadata {\n rating: number;\n suggestion: DocumentSuggestion;\n ticket: TicketProperties;\n}\n\nexport interface MoveToNextCaseStepMetadata {\n ticket: TicketProperties;\n stage?: string;\n}\n\nexport interface CaseCancelledMetadata {\n ticket: TicketProperties;\n}\n\nexport interface CaseSolvedMetadata {\n ticket: TicketProperties;\n}\n\nexport interface CaseCreatedMetadata {\n ticket: TicketProperties;\n}\n\nexport interface FieldSuggestion {\n classificationId: string;\n responseId: string;\n fieldName: string;\n classification: {\n value: string;\n confidence: number;\n };\n autoSelection?: boolean;\n}\n\nexport interface DocumentSuggestion {\n suggestionId: string;\n responseId: string;\n suggestion: {\n documentUri: string;\n documentUriHash: string;\n documentTitle: string;\n documentUrl: string;\n documentPosition: number;\n };\n fromQuickview?: boolean;\n openDocument?: boolean;\n}\n","import CoveoAnalyticsClient, {AnalyticsClient, ClientOptions} from '../client/analytics';\nimport {NoopAnalytics} from '../client/noopAnalytics';\nimport doNotTrack from '../donottrack';\nimport {SVCPlugin} from '../plugins/svc';\nimport {\n CaseAssistActions,\n CaseAssistEvents,\n CaseCancelledMetadata,\n CaseCancelledReasons,\n CaseCreatedMetadata,\n CaseSolvedMetadata,\n EnterInterfaceMetadata,\n MoveToNextCaseStepMetadata,\n RateDocumentSuggestionMetadata,\n SelectDocumentSuggestionMetadata,\n SelectFieldSuggestionMetadata,\n UpdateCaseFieldMetadata,\n} from './caseAssistActions';\n\nexport interface CaseAssistClientProvider {\n getOriginLevel1: () => string;\n}\n\nexport interface CaseAssistClientOptions extends ClientOptions {\n enableAnalytics?: boolean;\n}\n\nexport class CaseAssistClient {\n public coveoAnalyticsClient: AnalyticsClient;\n private svc: SVCPlugin;\n\n constructor(private options: Partial<CaseAssistClientOptions>, private provider?: CaseAssistClientProvider) {\n const analyticsEnabled = (options.enableAnalytics ?? true) && !doNotTrack();\n\n this.coveoAnalyticsClient = analyticsEnabled ? new CoveoAnalyticsClient(options) : new NoopAnalytics();\n this.svc = new SVCPlugin({client: this.coveoAnalyticsClient});\n }\n\n public disable() {\n if (this.coveoAnalyticsClient instanceof CoveoAnalyticsClient) {\n this.coveoAnalyticsClient.clear();\n }\n this.coveoAnalyticsClient = new NoopAnalytics();\n this.svc = new SVCPlugin({client: this.coveoAnalyticsClient});\n }\n\n public enable() {\n this.coveoAnalyticsClient = new CoveoAnalyticsClient(this.options);\n this.svc = new SVCPlugin({client: this.coveoAnalyticsClient});\n }\n\n public logEnterInterface(meta: EnterInterfaceMetadata) {\n this.svc.setAction(CaseAssistActions.enterInterface);\n this.svc.setTicket(meta.ticket);\n return this.sendFlowStartEvent();\n }\n\n public logUpdateCaseField(meta: UpdateCaseFieldMetadata) {\n this.svc.setAction(CaseAssistActions.fieldUpdate, {\n fieldName: meta.fieldName,\n });\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n\n public logSelectFieldSuggestion(meta: SelectFieldSuggestionMetadata) {\n this.svc.setAction(CaseAssistActions.fieldSuggestionClick, meta.suggestion);\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n\n public logSelectDocumentSuggestion(meta: SelectDocumentSuggestionMetadata) {\n this.svc.setAction(CaseAssistActions.suggestionClick, meta.suggestion);\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n\n public logRateDocumentSuggestion(meta: RateDocumentSuggestionMetadata) {\n this.svc.setAction(CaseAssistActions.suggestionRate, {\n rate: meta.rating,\n ...meta.suggestion,\n });\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n\n public logMoveToNextCaseStep(meta: MoveToNextCaseStepMetadata) {\n this.svc.setAction(CaseAssistActions.nextCaseStep, {\n stage: meta?.stage,\n });\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n\n public logCaseCancelled(meta: CaseCancelledMetadata) {\n this.svc.setAction(CaseAssistActions.caseCancelled, {\n reason: CaseCancelledReasons.quit,\n });\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n\n public logCaseSolved(meta: CaseSolvedMetadata) {\n this.svc.setAction(CaseAssistActions.caseSolved, {\n reason: CaseCancelledReasons.solved,\n });\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n\n public logCaseCreated(meta: CaseCreatedMetadata) {\n this.svc.setAction(CaseAssistActions.caseCreated);\n this.svc.setTicket(meta.ticket);\n return this.sendClickEvent();\n }\n\n private sendFlowStartEvent() {\n return this.coveoAnalyticsClient.sendEvent(\n 'event',\n 'svc',\n CaseAssistEvents.flowStart,\n this.provider\n ? {\n searchHub: this.provider.getOriginLevel1(),\n }\n : null\n );\n }\n\n private sendClickEvent() {\n return this.coveoAnalyticsClient.sendEvent(\n 'event',\n 'svc',\n CaseAssistEvents.click,\n this.provider\n ? {\n searchHub: this.provider.getOriginLevel1(),\n }\n : null\n );\n }\n}\n","import CoveoAnalyticsClient, {AnalyticsClient, ClientOptions} from '../client/analytics';\nimport {NoopAnalytics} from '../client/noopAnalytics';\nimport doNotTrack from '../donottrack';\nimport {ClickEventRequest, CustomEventRequest, SearchEventRequest} from '../events';\nimport {\n CustomEventsTypes,\n DocumentIdentifier,\n FacetStateMetadata,\n PartialDocumentInformation,\n SearchPageEvents,\n} from '../searchPage/searchPageEvents';\nimport {\n ExpandToFullUIMetadata,\n InsightEvents,\n InsightFacetMetadata,\n InsightInterfaceChangeMetadata,\n InsightStaticFilterToggleValueMetadata,\n InsightFacetRangeMetadata,\n InsightCategoryFacetMetadata,\n CaseMetadata,\n InsightFacetSortMeta,\n InsightFacetBaseMeta,\n InsightQueryErrorMeta,\n InsightPagerMetadata,\n InsightResultsSortMetadata,\n} from './insightEvents';\n\nexport interface InsightClientProvider {\n getSearchEventRequestPayload: () => Omit<SearchEventRequest, 'actionCause' | 'searchQueryUid'>;\n getSearchUID: () => string;\n getBaseMetadata: () => Record<string, any>;\n getPipeline: () => string;\n getOriginContext?: () => string;\n getOriginLevel1: () => string;\n getOriginLevel2: () => string;\n getOriginLevel3: () => string;\n getLanguage: () => string;\n getIsAnonymous: () => boolean;\n getFacetState?: () => FacetStateMetadata[];\n}\n\nexport interface InsightClientOptions extends ClientOptions {\n enableAnalytics: boolean;\n}\n\nconst extractContextFromMetadata = (meta: {caseContext?: Record<string, string>}) => {\n const context: Record<string, string> = {};\n if (meta.caseContext) {\n Object.keys(meta.caseContext).forEach((contextKey) => {\n const value = meta.caseContext?.[contextKey];\n if (value) {\n const keyToBeSent = `context_${contextKey}`;\n context[keyToBeSent] = value;\n }\n });\n }\n return context;\n};\n\nconst generateMetadataToSend = (metadata: CaseMetadata, includeContext = true) => {\n const {caseContext, caseId, caseNumber, ...metadataWithoutContext} = metadata;\n const context = extractContextFromMetadata(metadata);\n\n return {\n CaseId: caseId,\n CaseNumber: caseNumber,\n ...metadataWithoutContext,\n ...(!!context.context_Case_Subject && {CaseSubject: context.context_Case_Subject}),\n ...(includeContext && context),\n };\n};\n\nexport class CoveoInsightClient {\n public coveoAnalyticsClient: AnalyticsClient;\n\n constructor(private opts: Partial<InsightClientOptions>, private provider: InsightClientProvider) {\n const shouldDisableAnalytics = opts.enableAnalytics === false || doNotTrack();\n this.coveoAnalyticsClient = shouldDisableAnalytics ? new NoopAnalytics() : new CoveoAnalyticsClient(opts);\n }\n\n public disable() {\n if (this.coveoAnalyticsClient instanceof CoveoAnalyticsClient) {\n this.coveoAnalyticsClient.clear();\n }\n this.coveoAnalyticsClient = new NoopAnalytics();\n }\n\n public enable() {\n this.coveoAnalyticsClient = new CoveoAnalyticsClient(this.opts);\n }\n\n public logInterfaceLoad(metadata?: CaseMetadata) {\n if (metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.interfaceLoad, metadataToSend);\n }\n return this.logSearchEvent(SearchPageEvents.interfaceLoad);\n }\n\n public logInterfaceChange(metadata: InsightInterfaceChangeMetadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.interfaceChange, metadataToSend);\n }\n\n public logStaticFilterDeselect(metadata: InsightStaticFilterToggleValueMetadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.staticFilterDeselect, metadataToSend);\n }\n\n public logFetchMoreResults(metadata?: CaseMetadata) {\n if (metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logCustomEvent(SearchPageEvents.pagerScrolling, {...metadataToSend, type: 'getMoreResults'});\n }\n return this.logCustomEvent(SearchPageEvents.pagerScrolling, {type: 'getMoreResults'});\n }\n\n public logBreadcrumbFacet(\n metadata: InsightFacetMetadata | InsightFacetRangeMetadata | InsightCategoryFacetMetadata\n ) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.breadcrumbFacet, metadataToSend);\n }\n\n public logBreadcrumbResetAll(metadata?: CaseMetadata) {\n if (metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.breadcrumbResetAll, metadataToSend);\n }\n return this.logSearchEvent(SearchPageEvents.breadcrumbResetAll);\n }\n\n public logFacetSelect(metadata: InsightFacetMetadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.facetSelect, metadataToSend);\n }\n\n public logFacetDeselect(metadata: InsightFacetMetadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.facetDeselect, metadataToSend);\n }\n\n public logFacetUpdateSort(metadata: InsightFacetSortMeta) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.facetUpdateSort, metadataToSend);\n }\n\n public logFacetClearAll(metadata: InsightFacetBaseMeta) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.facetClearAll, metadataToSend);\n }\n\n public logFacetShowMore(metadata: InsightFacetBaseMeta) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(SearchPageEvents.facetShowMore, metadataToSend);\n }\n\n public logFacetShowLess(metadata: InsightFacetBaseMeta) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(SearchPageEvents.facetShowLess, metadataToSend);\n }\n\n public logQueryError(metadata: InsightQueryErrorMeta) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(SearchPageEvents.queryError, metadataToSend);\n }\n\n public logPagerNumber(metadata: InsightPagerMetadata) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(SearchPageEvents.pagerNumber, metadataToSend);\n }\n\n public logPagerNext(metadata: InsightPagerMetadata) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(SearchPageEvents.pagerNext, metadataToSend);\n }\n\n public logPagerPrevious(metadata: InsightPagerMetadata) {\n const metadataToSend = generateMetadataToSend(metadata, false);\n return this.logCustomEvent(SearchPageEvents.pagerPrevious, metadataToSend);\n }\n\n public logDidYouMeanAutomatic(metadata?: CaseMetadata) {\n if (metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.didyoumeanAutomatic, metadataToSend);\n }\n return this.logSearchEvent(SearchPageEvents.didyoumeanAutomatic);\n }\n\n public logDidYouMeanClick(metadata?: CaseMetadata) {\n if (metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.didyoumeanClick, metadataToSend);\n }\n return this.logSearchEvent(SearchPageEvents.didyoumeanClick);\n }\n\n public logResultsSort(metadata: InsightResultsSortMetadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.resultsSort, metadataToSend);\n }\n\n public logSearchboxSubmit(metadata?: CaseMetadata) {\n if (metadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(SearchPageEvents.searchboxSubmit, metadataToSend);\n }\n return this.logSearchEvent(SearchPageEvents.searchboxSubmit);\n }\n\n public logContextChanged(metadata: CaseMetadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logSearchEvent(InsightEvents.contextChanged, metadataToSend);\n }\n\n public logExpandToFullUI(metadata: ExpandToFullUIMetadata) {\n const metadataToSend = generateMetadataToSend(metadata);\n return this.logCustomEvent(InsightEvents.expandToFullUI, metadataToSend);\n }\n\n public logDocumentOpen(info: PartialDocumentInformation, identifier: DocumentIdentifier, metadata?: CaseMetadata) {\n return this.logClickEvent(\n SearchPageEvents.documentOpen,\n info,\n identifier,\n metadata ? generateMetadataToSend(metadata, false) : undefined);\n }\n\n public async logCustomEvent(event: SearchPageEvents | InsightEvents, metadata?: Record<string, any>) {\n const customData = {...this.provider.getBaseMetadata(), ...metadata};\n\n const payload: CustomEventRequest = {\n ...(await this.getBaseCustomEventRequest(customData)),\n eventType: CustomEventsTypes[event]!,\n eventValue: event,\n };\n\n return this.coveoAnalyticsClient.sendCustomEvent(payload);\n }\n\n public async logSearchEvent(event: SearchPageEvents | InsightEvents, metadata?: Record<string, any>) {\n return this.coveoAnalyticsClient.sendSearchEvent(await this.getBaseSearchEventRequest(event, metadata));\n }\n\n public async logClickEvent(\n event: SearchPageEvents,\n info: PartialDocumentInformation,\n identifier: DocumentIdentifier,\n metadata?: Record<string, any>\n ) {\n const payload: ClickEventRequest = {\n ...info,\n ...(await this.getBaseEventRequest({...identifier, ...metadata})),\n searchQueryUid: this.provider.getSearchUID(),\n queryPipeline: this.provider.getPipeline(),\n actionCause: event,\n };\n\n return this.coveoAnalyticsClient.sendClickEvent(payload);\n }\n\n private async getBaseCustomEventRequest(metadata?: Record<string, any>) {\n return {\n ...(await this.getBaseEventRequest(metadata)),\n lastSearchQueryUid: this.provider.getSearchUID(),\n };\n }\n\n private async getBaseSearchEventRequest(\n event: SearchPageEvents | InsightEvents,\n metadata?: Record<string, any>\n ): Promise<SearchEventRequest> {\n return {\n ...(await this.getBaseEventRequest(metadata)),\n ...this.provider.getSearchEventRequestPayload(),\n searchQueryUid: this.provider.getSearchUID(),\n queryPipeline: this.provider.getPipeline(),\n actionCause: event,\n };\n }\n\n private async getBaseEventRequest(metadata?: Record<string, any>) {\n const customData = {...this.provider.getBaseMetadata(), ...metadata};\n return {\n ...this.getOrigins(),\n customData,\n language: this.provider.getLanguage(),\n facetState: this.provider.getFacetState ? this.provider.getFacetState() : [],\n anonymous: this.provider.getIsAnonymous(),\n clientId: await this.getClientId(),\n };\n }\n\n private getOrigins() {\n return {\n originContext: this.provider.getOriginContext?.(),\n originLevel1: this.provider.getOriginLevel1(),\n originLevel2: this.provider.getOriginLevel2(),\n originLevel3: this.provider.getOriginLevel3(),\n };\n }\n\n private getClientId() {\n return this.coveoAnalyticsClient instanceof CoveoAnalyticsClient\n ? this.coveoAnalyticsClient.getCurrentVisitorId()\n : undefined;\n }\n}\n","import * as analytics from './library';\nimport handleOneAnalyticsEvent from './simpleanalytics';\n\ndeclare const self: any;\n\nconst promise = (window as any)['Promise'];\nif (!(promise instanceof Function)) {\n console.error(\n `This script uses window.Promise which is not supported in your browser. Consider adding a polyfill like \"es6-promise\".`\n );\n}\nconst fetch = (window as any)['fetch'];\nif (!(fetch instanceof Function)) {\n console.error(\n `This script uses window.fetch which is not supported in your browser. Consider adding a polyfill like \"fetch\".`\n );\n}\n\n// CoveoUAGlobal is the interface for the global function which also has a\n// queue `q` of unexecuted parameters\nexport interface CoveoUAGlobal {\n (action: string, ...params: any[]): void;\n // CoveoAnalytics.q is the queue of last called actions before lib was included\n q?: [string, any[]][];\n}\n\n// On load of this script we get the global object `coveoua` (which would be)\n// on `window` in a browser\nconst coveoua: CoveoUAGlobal = self.coveoua || handleOneAnalyticsEvent;\n\n// Replace the quick shim with the real thing.\nself.coveoua = handleOneAnalyticsEvent;\n\nself.coveoanalytics = analytics;\n\n// On normal execution this library should be loaded after the snippet execution\n// so we will execute the actions in the `q` array\nif (coveoua.q) {\n const initEvents = coveoua.q.filter((args: [string, any[]]) => args[0] === 'init');\n const otherEvents = coveoua.q.filter((args: [string, any[]]) => args[0] !== 'init');\n [...initEvents, ...otherEvents].forEach((args: [string, any[]]) => handleOneAnalyticsEvent.apply(void 0, args));\n}\n\nexport default self.coveoua;\n"],"names":["EventType","hasNavigator","navigator","hasDocument","document","hasLocalStorage","localStorage","error","hasCookieStorage","cookieEnabled","hasCryptoRandomValues","crypto","getRandomValues","eventTypesForDefaultValues","click","custom","search","view","addDefaultValues","eventType","payload","indexOf","language","documentElement","lang","userAgent","Cookie","set","name","value","expiration","domainParts","date","expires","host","Date","setTime","getTime","toGMTString","window","location","hostname","cookie","split","shift","writeCookie","domain","join","get","cookiePrefix","cookieArray","i","length","replace","substring","erase","details","getAvailableStorage","detector.hasLocalStorage","detector.hasCookieStorage","CookieStorage","sessionStorage","detector.hasSessionStorage","NullStorage","prototype","getItem","key","prefix","removeItem","setItem","data","CookieAndLocalStorage","this","cookieStorage","STORE_KEY","HistoryStore","store","addElement","elem","internalTime","cropQueryElement","stripEmptyQuery","currentHistory","getHistoryWithInternalTime","isValidEntry","setHistory","concat","addElementAsync","getHistoryWithInternalTimeAsync","_a","sent","getHistory","history","stripEmptyQueries","stripInternalTime","getHistoryAsync","elements","JSON","parse","e","stringify","slice","clear","getMostRecentElement","sort","first","second","part","toLowerCase","lastEntry","map","time","trim","_this","enhanceViewEvent","__awaiter","addPageViewToHistory","contentIdValue","__assign","toString","referrer","title","pageViewValue","historyElement","uuidv4","a","Number","Uint8Array","rnds","r","Math","random","keysOf","Object","keys","ticketKeysMapping","id","subject","description","category","productId","ticketSubKeysMatchGroup","__spreadArrays","ticketKeyRegex","RegExp","isServiceKey","test","productKeysMapping","brand","variant","price","quantity","coupon","position","group","impressionKeysMapping","productActionsKeysMapping","action","list","listSource","transactionActionsKeysMapping","revenue","tax","shipping","affiliation","step","option","quoteActionsKeysMapping","reviewActionsKeysMapping","rating","comment","commerceActionKeysMappingPerAction","add","bookmark_add","bookmark_remove","checkout","checkout_option","detail","impression","remove","refund","purchase","quickview","quote","review","convertImpressionToMeasurementProtocol","listIndex","productIndex","reduce","mappedImpression","newKey","productKeysMappingValues","impressionKeysMappingValues","productActionsKeysMappingValues","transactionActionsKeysMappingValues","reviewKeysMappingValues","quoteKeysMappingValues","productSubKeysMatchGroup","impressionSubKeysMatchGroup","productKeyRegex","impressionKeyRegex","productActionsKeyRegex","transactionActionsKeyRegex","customProductKeyRegex","customImpressionKeyRegex","coveoCommerceExtensionKeysRegex","isCommerceKey","isCustomCommerceKey","baseMeasurementProtocolKeysMapping","anonymizeIp","eventCategory","eventAction","eventLabel","eventValue","page","visitorId","clientId","userId","currencyCode","hitType","pageViewId","encoding","screenColor","screenResolution","eventId","all","measurementProtocolKeysMapping","svcAction","svcActionData","measurementProtocolKeysMappingValues","isKnownMeasurementProtocolKey","isCustomKey","getFirstCustomMeasurementProtocolKeyMatch","matchedKey","undefined","every","regex","exec","Boolean","convertCustomObject","customData","allCustom","currentCustomKey","AnalyticsBeaconClient","opts","sendEvent","sendBeacon","Error","baseUrl","preprocessRequest","parsedRequestData","encodeForEventType","getQueryParamsForEventType","paramsFragments","_e","defaultOptions","url","body","Blob","type","_d","_b","apply","_c","console","log","deleteHttpCookieVisitorId","Promise","resolve","isEventTypeLegacy","encodeForLegacyType","encodeForFormUrlEncoded","access_token","token","visitorIdProvider","getCurrentVisitorId","filter","p","encodeURIComponent","encodeValue","NoopAnalyticsClient","_","__","fetch","AnalyticsFetchClient","shouldAppendVisitorId","getVisitorIdParam","_f","credentials","mode","headers","getHeaders","method","fetchData","__rest","response","ok","json","visit","setCurrentVisitorId","_g","Authorization","BrowserRuntime","clientOptions","getUnprocessedRequests","storage","warn","client","beaconClient","addEventListener","requests_1","_i","NodeJSRuntime","NoopRuntime","doNotTrackValues","doNotTrack","globalPrivacyControl","msDoNotTrack","some","Version","Endpoints","default","production","hipaa","buildBaseUrl","endpoint","apiVersion","endpointIsCoveoProxy","InsightEvents","SearchPageEvents","CoveoAnalyticsClient","options","bufferedRequests","beforeSendHooks","afterSendHooks","eventTypeMapping","clientsOptions","runtime","runtimeEnvironment","initRuntime","defineProperty","version","copy","product","determineVisitorId","err_1","getParameters","arguments","resolveParameters","getPayload","parametersToSend","resolvePayloadForParameters","variableLengthArgumentsNames","addVisitorIdParameter","usesMeasurementProtocol","addClientIdParameter","addVisitorIdStep","currentPayload","addClientIdStep","processBeforeSendHooksStep","promisePayload","current","parseVariableArgumentsPayload","ensureAnonymousUserWhenUsingApiKey","payloadPromise","parameters","processMeasurementProtocolConversionStep","keysMappingForAction","params","mappedKeys","removeEmptyPayloadValues","validateParams","removeUnknownParameters","processCustomParameters","eventTypeToSend","payloadToSend","push","hook","deferExecution","sendFromBufferWithFetch","setTimeout","popped","deleteHttpOnlyVisitorId","sendSearchEvent","request","sendClickEvent","sendCustomEvent","sendViewEvent","getVisit","getHealth","registerBeforeSendEventHook","registerAfterSendEventHook","addEventTypeMapping","eventConfig","fieldsOrder","parsedArguments","length_1","currentArgument","isKeyAllowedEmpty","evtType","newPayload","isMeasurementProtocolKey","rest","lowercasedCustom","lowercaseKeys","match","startsWith","getFormattedLocation","protocol","pathname","BasePluginEventTypes","pageview","event","BasePlugin","uuidGenerator","actionData","nextPageViewId","currentLocation","lastReferrer","addHooks","setAction","clearData","clearPluginData","getLocationInformation","getNextValues","updateLocationInformation","updateLocationForNextPageView","getDefaultContextInformation","documentContext","characterSet","screenContext","screen","width","height","colorDepth","navigatorContext","eventContext","now","hasSentFirstPageView","getCurrentLocationFromPayload","ECPluginEventTypes","allECEventTypes","ECPlugin","_super","call","products","impressions","__extends","addHooksForPageView","addHooksForEvent","addHooksForECEvents","addProduct","addImpression","addECDataToPayload","newEventType","collect","ecPayload","productPayload","getProductPayload","impressionPayload","getImpressionPayload","assureProductValidity","index","mappedProduct","convertProductToMeasurementProtocol","getImpressionsByList","baseImpression","assureBaseImpressionValidity","impressionList","mappedImpressions","listName","convertImpressionListToMeasurementProtocol","productRest","baseImpressionRest","lists","find","Id","EC","SVCPluginEventTypes","allSVCEventTypes","SVCPlugin","ticket","addHooksForSVCEvents","setTicket","addSVCDataToPayload","svcPayload","ticketPayload","getTicketPayload","mappedTicket","SVC","Plugins","registeredPluginsMap","requiredPlugins","require","pluginClass","provide","plugin","clearRequired","execute","fn","pluginOptions","actionFunction","DefaultPlugins","CoveoUA","plugins","init","optionsOrEndpoint","getEndpoint","isAnalyticsClient","pluginOptions_1","getPluginKeys","forEach","pluginKey","Array","isArray","initForProxy","keyOrObject","send","onLoad","callback","callPlugin","pluginName","args","reset","coveoua","getCurrentClient","handleOneAnalyticsEvent","command","actions","CustomEventsTypes","triggerNotify","triggerExecute","triggerQuery","triggerRedirect","queryError","queryErrorBack","queryErrorClear","queryErrorRetry","pagerNext","pagerPrevious","pagerNumber","pagerResize","pagerScrolling","facetSearch","facetShowLess","facetShowMore","recommendation","likeSmartSnippet","dislikeSmartSnippet","expandSmartSnippet","collapseSmartSnippet","openSmartSnippetFeedbackModal","closeSmartSnippetFeedbackModal","sendSmartSnippetReason","expandSmartSnippetSuggestion","collapseSmartSnippetSuggestion","showMoreSmartSnippetSuggestion","showLessSmartSnippetSuggestion","clearRecentQueries","recentResultClick","clearRecentResults","showLessFoldedResults","expandToFullUI","NoopAnalytics","currentVisitorId","status","getDataString","formattedData","formatArrayForCoveoCustomData","rawData","dataWithoutSemicolons","removeSemicolons","dataWithoutRepeatedValues","prev","isDifferent","filterConsecutiveRepeatedValues","formatOmniboxMetadata","meta","partialQueries","suggestions","CaseAssistEvents","CaseAssistActions","CaseCancelledReasons","CoveoSearchPageClient","provider","shouldDisableAnalytics","enableAnalytics","coveoAnalyticsClient","disable","enable","makeInterfaceLoad","makeSearchEvent","interfaceLoad","logInterfaceLoad","makeRecommendationInterfaceLoad","recommendationInterfaceLoad","logRecommendationInterfaceLoad","makeRecommendation","makeCustomEvent","logRecommendation","makeRecommendationOpen","info","identifier","makeClickEvent","recommendationOpen","logRecommendationOpen","makeStaticFilterClearAll","staticFilterClearAll","logStaticFilterClearAll","makeStaticFilterSelect","staticFilterSelect","logStaticFilterSelect","makeStaticFilterDeselect","staticFilterDeselect","logStaticFilterDeselect","makeFetchMoreResults","logFetchMoreResults","makeInterfaceChange","metadata","interfaceChange","logInterfaceChange","makeDidYouMeanAutomatic","didyoumeanAutomatic","logDidYouMeanAutomatic","makeDidYouMeanClick","didyoumeanClick","logDidYouMeanClick","makeResultsSort","resultsSort","logResultsSort","makeSearchboxSubmit","searchboxSubmit","logSearchboxSubmit","makeSearchboxClear","searchboxClear","logSearchboxClear","makeSearchboxAsYouType","searchboxAsYouType","logSearchboxAsYouType","makeBreadcrumbFacet","breadcrumbFacet","logBreadcrumbFacet","makeBreadcrumbResetAll","breadcrumbResetAll","logBreadcrumbResetAll","makeDocumentQuickview","documentQuickview","logDocumentQuickview","makeDocumentOpen","documentOpen","logDocumentOpen","makeOmniboxAnalytics","omniboxAnalytics","logOmniboxAnalytics","makeOmniboxFromLink","omniboxFromLink","logOmniboxFromLink","makeSearchFromLink","searchFromLink","logSearchFromLink","makeTriggerNotify","logTriggerNotify","makeTriggerExecute","logTriggerExecute","makeTriggerQuery","query","getSearchEventRequestPayload","queryText","logTriggerQuery","makeUndoTriggerQuery","undoTriggerQuery","logUndoTriggerQuery","makeTriggerRedirect","logTriggerRedirect","makePagerResize","logPagerResize","makePagerNumber","logPagerNumber","makePagerNext","logPagerNext","makePagerPrevious","logPagerPrevious","makePagerScrolling","logPagerScrolling","makeFacetClearAll","facetClearAll","logFacetClearAll","makeFacetSearch","logFacetSearch","makeFacetSelect","facetSelect","logFacetSelect","makeFacetDeselect","facetDeselect","logFacetDeselect","makeFacetExclude","facetExclude","logFacetExclude","makeFacetUnexclude","facetUnexclude","logFacetUnexclude","makeFacetSelectAll","facetSelectAll","logFacetSelectAll","makeFacetUpdateSort","facetUpdateSort","logFacetUpdateSort","makeFacetShowMore","logFacetShowMore","makeFacetShowLess","logFacetShowLess","makeQueryError","logQueryError","makeQueryErrorBack","makeDescription","logCustomEvent","logSearchEvent","logQueryErrorBack","makeQueryErrorRetry","logQueryErrorRetry","makeQueryErrorClear","logQueryErrorClear","makeLikeSmartSnippet","logLikeSmartSnippet","makeDislikeSmartSnippet","logDislikeSmartSnippet","makeExpandSmartSnippet","logExpandSmartSnippet","makeCollapseSmartSnippet","logCollapseSmartSnippet","makeOpenSmartSnippetFeedbackModal","logOpenSmartSnippetFeedbackModal","makeCloseSmartSnippetFeedbackModal","logCloseSmartSnippetFeedbackModal","makeSmartSnippetFeedbackReason","reason","logSmartSnippetFeedbackReason","makeExpandSmartSnippetSuggestion","snippet","documentId","logExpandSmartSnippetSuggestion","makeCollapseSmartSnippetSuggestion","logCollapseSmartSnippetSuggestion","makeShowMoreSmartSnippetSuggestion","logShowMoreSmartSnippetSuggestion","makeShowLessSmartSnippetSuggestion","logShowLessSmartSnippetSuggestion","makeOpenSmartSnippetSource","openSmartSnippetSource","logOpenSmartSnippetSource","makeOpenSmartSnippetSuggestionSource","openSmartSnippetSuggestionSource","contentIDKey","contentIdKey","contentIDValue","logOpenSmartSnippetSuggestionSource","makeOpenSmartSnippetInlineLink","identifierAndLink","openSmartSnippetInlineLink","logOpenSmartSnippetInlineLink","makeOpenSmartSnippetSuggestionInlineLink","snippetAndLink","openSmartSnippetSuggestionInlineLink","logOpenSmartSnippetSuggestionInlineLink","makeRecentQueryClick","recentQueryClick","logRecentQueryClick","makeClearRecentQueries","logClearRecentQueries","makeRecentResultClick","logRecentResultClick","makeClearRecentResults","logClearRecentResults","makeNoResultsBack","noResultsBack","logNoResultsBack","makeShowMoreFoldedResults","showMoreFoldedResults","logShowMoreFoldedResults","makeShowLessFoldedResults","logShowLessFoldedResults","getBaseMetadata","getBaseCustomEventRequest","makeCustomEventWithType","actionCause","logCustomEventWithType","getBaseSearchEventRequest","logClickEvent","getBaseEventRequest","searchQueryUid","getSearchUID","queryPipeline","getPipeline","lastSearchQueryUid","getOrigins","getSplitTestRun","getLanguage","facetState","getFacetState","anonymous","getIsAnonymous","getClientId","originContext","getOriginContext","originLevel1","getOriginLevel1","originLevel2","getOriginLevel2","originLevel3","getOriginLevel3","splitTestRunName","getSplitTestRunName","splitTestRunVersion","getSplitTestRunVersion","CaseAssistClient","analyticsEnabled","svc","logEnterInterface","enterInterface","sendFlowStartEvent","logUpdateCaseField","fieldUpdate","fieldName","logSelectFieldSuggestion","fieldSuggestionClick","suggestion","logSelectDocumentSuggestion","suggestionClick","logRateDocumentSuggestion","suggestionRate","rate","logMoveToNextCaseStep","nextCaseStep","stage","logCaseCancelled","caseCancelled","quit","logCaseSolved","caseSolved","solved","logCaseCreated","caseCreated","flowStart","searchHub","generateMetadataToSend","includeContext","caseContext","caseId","caseNumber","metadataWithoutContext","context","contextKey","extractContextFromMetadata","CaseId","CaseNumber","context_Case_Subject","CaseSubject","CoveoInsightClient","metadataToSend","logContextChanged","contextChanged","logExpandToFullUI","Function","self","coveoanalytics","analytics","q"],"mappings":"oXAEYA,wiECEIC,IACZ,MAA4B,oBAAdC,SAClB,UAEgBC,IACZ,MAA2B,oBAAbC,QAClB,UAEgBC,IACZ,IACI,MAA+B,oBAAjBC,YAGjB,CAFC,MAAOC,GACL,OAAO,CACV,CACL,UAUgBC,IACZ,OAAOP,KAAkBC,UAAUO,aACvC,UAMgBC,IACZ,MAJyB,oBAAXC,aAI0C,IAA3BA,OAAOC,eACxC,EDpCA,SAAYZ,GACRA,EAAA,OAAA,SACAA,EAAA,MAAA,QACAA,EAAA,OAAA,SACAA,EAAA,KAAA,OACAA,EAAA,QAAA,SACH,CAND,CAAYA,IAAAA,EAMX,CAAA,IEJD,IAAMa,EAAuC,CAACb,EAAUc,MAAOd,EAAUe,OAAQf,EAAUgB,OAAQhB,EAAUiB,MAEhGC,EAAiD,SAACC,EAAWC,GACtE,OAA0D,IAAnDP,EAA2BQ,QAAQF,MAEhCG,SAAUnB,IAAgBC,SAASmB,gBAAgBC,KAAO,UAC1DC,UAAWxB,IAAiBC,UAAUuB,UAAY,WAC/CL,GAEPA,CACV,ECNAM,EAAA,WAAA,SAAAA,IA2DC,CAAD,OA1DWA,EAAAC,IAAP,SAAWC,EAAcC,EAAeC,GACpC,IAAoBC,EAAuBC,EAAWC,EAAiBC,EAEnEJ,IACAE,EAAO,IAAIG,MACNC,QAAQJ,EAAKK,UAAYP,GAC9BG,EAAU,aAAeD,EAAKM,eAE9BL,EAAU,IAIa,KAD3BC,EAAOK,OAAOC,SAASC,UACdpB,QAAQ,KAEbjB,SAASsC,OAASd,EAAO,IAAMC,EAAQI,EAAU,aAWjDF,EAAcG,EAAKS,MAAM,MACbC,QAGZC,EAAY,CAACjB,KAAIA,EAAEC,MAAKA,EAAEI,UAASa,OAF1B,IAAMf,EAAYgB,KAAK,OAMR,MAApBrB,EAAOsB,IAAIpB,IAAiBF,EAAOsB,IAAIpB,IAASC,GAGhDgB,EAAY,CAACjB,KAAIA,EAAEC,MAAKA,EAAEI,UAASa,OAD1B,IAAMZ,MAMpBR,EAAGsB,IAAV,SAAWpB,GAGP,IAFA,IAAIqB,EAAerB,EAAO,IACtBsB,EAAc9C,SAASsC,OAAOC,MAAM,KAC/BQ,EAAI,EAAGA,EAAID,EAAYE,OAAQD,IAAK,CACzC,IAAIT,EAASQ,EAAYC,GAGzB,GAAoC,IAFpCT,EAASA,EAAOW,QAAQ,OAAQ,KAErBhC,QAAQ4B,GACf,OAAOP,EAAOY,UAAUL,EAAaG,OAAQV,EAAOU,OAE3D,CACD,OAAO,MAGJ1B,EAAK6B,MAAZ,SAAa3B,GACTF,EAAOC,IAAIC,EAAM,IAAK,IAE7BF,CAAD,IAEA,SAASmB,EAAYW,GACV,IAAA5B,EAAgC4B,OAA1B3B,EAA0B2B,EAAO3B,MAA1BI,EAAmBuB,EAAZvB,QAAEa,EAAUU,SACvCpD,SAASsC,OAAYd,EAAI,IAAIC,EAAQI,EAAO,oBAAoBa,EAAM,gBAC1E,UC7DgBW,IAIZ,OAAIC,IACOpD,aAEPqD,IACO,IAAIC,aHEf,IACI,MAAiC,oBAAnBC,cAGjB,CAFC,MAAOtD,GACL,OAAO,CACV,CACL,CGLQuD,GACOD,eAEJ,IAAIE,CACf,CAEA,IAAAH,EAAA,WAAA,SAAAA,IAWC,CAAD,OATIA,EAAOI,UAAAC,QAAP,SAAQC,GACJ,OAAOxC,EAAOsB,IAAI,GAAGY,EAAcO,OAASD,IAEhDN,EAAUI,UAAAI,WAAV,SAAWF,GACPxC,EAAO6B,MAAM,GAAGK,EAAcO,OAASD,IAE3CN,EAAAI,UAAAK,QAAA,SAAQH,EAAaI,GACjB5C,EAAOC,IAAI,GAAGiC,EAAcO,OAASD,EAAOI,IARzCV,EAAMO,OAAG,SAUnBP,CAAA,IAEDW,EAAA,WAAA,SAAAA,IACYC,KAAAC,cAAgB,IAAIb,CAe/B,CAAD,OAbIW,EAAOP,UAAAC,QAAP,SAAQC,GACJ,OAAO5D,aAAa2D,QAAQC,IAAQM,KAAKC,cAAcR,QAAQC,IAGnEK,EAAUP,UAAAI,WAAV,SAAWF,GACPM,KAAKC,cAAcL,WAAWF,GAC9B5D,aAAa8D,WAAWF,IAG5BK,EAAAP,UAAAK,QAAA,SAAQH,EAAaI,GACjBhE,aAAa+D,QAAQH,EAAKI,GAC1BE,KAAKC,cAAcJ,QAAQH,EAAKI,IAEvCC,CAAD,IAEAR,EAAA,WAAA,SAAAA,IAUC,CAAD,OATIA,EAAOC,UAAAC,QAAP,SAAQC,GACJ,OAAO,MAEXH,EAAUC,UAAAI,WAAV,SAAWF,KAGXH,EAAAC,UAAAK,QAAA,SAAQH,EAAaI,KAGxBP,CAAD,qDAjEiD,mFCDpCW,EAAoB,4BAKjCC,EAAA,WAEI,SAAAA,EAAYC,GACRJ,KAAKI,MAAQA,GAASnB,GACzB,CA6IL,OAxIIkB,EAAUX,UAAAa,WAAV,SAAWC,GACPA,EAAKC,cAAe,IAAI5C,MAAOE,UAC/ByC,EAAON,KAAKQ,iBAAiBR,KAAKS,gBAAgBH,IAClD,IAAII,EAAiBV,KAAKW,6BACJ,MAAlBD,EACIV,KAAKY,aAAaN,IAClBN,KAAKa,WAAW,CAACP,GAAMQ,OAAOJ,IAGlCV,KAAKa,WAAW,CAACP,KAInBH,EAAeX,UAAAuB,gBAArB,SAAsBT,mGAGG,OAFrBA,EAAKC,cAAe,IAAI5C,MAAOE,UAC/ByC,EAAON,KAAKQ,iBAAiBR,KAAKS,gBAAgBH,IAC7B,CAAA,EAAMN,KAAKgB,iDACV,OADlBN,EAAiBO,EAA4CC,QAEzDlB,KAAKY,aAAaN,IAClBN,KAAKa,WAAW,CAACP,GAAMQ,OAAOJ,IAGlCV,KAAKa,WAAW,CAACP,cAExB,EAKDH,EAAAX,UAAA2B,WAAA,WACI,IAAMC,EAAUpB,KAAKW,6BACrB,OAAOX,KAAKqB,kBAAkBrB,KAAKsB,kBAAkBF,KAGnDjB,EAAAX,UAAA+B,gBAAN,oGACoB,KAAA,EAAA,MAAA,CAAA,EAAMvB,KAAKgB,0CAC3B,OADMI,EAAUH,EAA4CC,OACrD,CAAA,EAAAlB,KAAKqB,kBAAkBrB,KAAKsB,kBAAkBF,WACxD,EAEOjB,EAAAX,UAAAmB,2BAAR,WACI,IACI,IAAMa,EAAWxB,KAAKI,MAAMX,QAAQS,GACpC,OAAIsB,GAAgC,iBAAbA,EACZC,KAAKC,MAAMF,GAEX,EAOd,CALC,MAAOG,GAIL,MAAO,EACV,GAGSxB,EAAAX,UAAAwB,gCAAd,2GAEyB,6BAAM,CAAA,EAAAhB,KAAKI,MAAMX,QAAQS,WAC1C,OADMsB,EAAWP,EAAmCC,QAEhD,CAAA,EAAOO,KAAKC,MAAMF,IAElB,CAAA,EAAO,WAMX,gBAAA,CAAA,EAAO,2BAEd,EAEDrB,EAAUX,UAAAqB,WAAV,SAAWO,GACP,IACIpB,KAAKI,MAAMP,QAAQK,EAAWuB,KAAKG,UAAUR,EAAQS,MAAM,EAtFjB,KAyF7C,CAFC,MAAOF,GAER,GAGLxB,EAAAX,UAAAsC,MAAA,WACI,IACI9B,KAAKI,MAAMR,WAAWM,EAGzB,CAFC,MAAOyB,GAER,GAGLxB,EAAAX,UAAAuC,qBAAA,WACI,IAAIrB,EAAiBV,KAAKW,6BAC1B,OAAsB,MAAlBD,EACeA,EAAesB,MAAK,SAACC,EAAuBC,GAGvD,OAAQA,EAAO3B,cAAgB,IAAM0B,EAAM1B,cAAgB,EAC/D,IACc,GAEX,MAGHJ,EAAgBX,UAAAgB,iBAAxB,SAAyB2B,GAKrB,OAJIA,EAAK/E,MAAQ+E,EAAK9E,OAAqC,UAA5B8E,EAAK/E,KAAKgF,gBACrCD,EAAK9E,MAAQ8E,EAAK9E,MAAMwE,MAAM,EAjHZ,KAoHfM,GAGHhC,EAAYX,UAAAoB,aAApB,SAAqBN,GACjB,IAAI+B,EAAYrC,KAAK+B,uBAErB,OAAIM,GAAaA,EAAUhF,OAASiD,EAAKjD,QAC7BiD,EAAKC,cAAgB,IAAM8B,EAAU9B,cAAgB,GA5HhB,KAiI7CJ,EAAiBX,UAAA8B,kBAAzB,SAA0BF,GACtB,OAAOA,EAAQkB,KAAI,SAACH,GAEhB,MAAO,CAAC/E,KADoB+E,EAAI/E,KAClBmF,KADcJ,EAAII,KACZlF,MADQ8E,QAEhC,KAGIhC,EAAeX,UAAAiB,gBAAvB,SAAwB0B,GACb,IAAA/E,EAAqB+E,EAAI/E,KAAnBmF,EAAeJ,EAAII,KAAblF,EAAS8E,QAC5B,OAAI/E,GAAyB,iBAAVC,GAA6C,UAAvBD,EAAKgF,eAA8C,KAAjB/E,EAAMmF,OACtE,CAACpF,KAAIA,EAAEmF,KAAIA,GAGfJ,GAGHhC,EAAiBX,UAAA6B,kBAAzB,SAA0BD,GAA1B,IAECqB,EAAAzC,KADG,OAAOoB,EAAQkB,KAAI,SAACH,GAAS,OAAAM,EAAKhC,gBAAgB0B,EAArB,KAEpChC,CAAD,+EArJsD,qCACG,mBAC3B,8BCDjBuC,EAAiD,SAAO/F,EAAWC,GAAO,OAAA+F,OAAA,OAAA,OAAA,GAAA,6DAC/E,OAAAhG,IAAcnB,EAAUiB,KAAI,CAAA,EAAA,GAC5B,CAAA,EAAMmG,EAAqBhG,EAAQiG,wBACnC,OADA5B,EAAAC,OACO,CAAA,EAAA4B,EAAA,CACH9E,SAAUD,OAAOC,SAAS+E,WAC1BC,SAAUpH,SAASoH,SACnBC,MAAOrH,SAASqH,OACbrG,IAIX,KAAA,EAAA,MAAA,CAAA,EAAOA,WAGLgG,EAAuB,SAAOM,GAAqB,OAAAP,OAAA,OAAA,OAAA,GAAA,qEAOrD,OANMvC,EAAQ,IAAID,EACZgD,EAAiB,CACnB/F,KAAM,WACNC,MAAO6F,EACPX,KAAMd,KAAKG,UAAU,IAAIjE,OAE7B,CAAA,EAAMyC,EAAMW,gBAAgBoC,kBAA5BlC,EAAAC,iBACH,ECxBYkC,EAAS,SAACC,GACnB,OAAMA,GACMC,OAAOD,GAAMjH,EAAgB,IAAImH,WAAW,IAAI,GAAK,IAAOD,OAAOD,GAAK,GAAKN,SAAS,IAE3F,uCAAwClE,QAAQ,SAAUuE,EACrE,EAEMhH,EAAkB,SAACoH,GACrB,GAAItH,IACA,OAAOC,OAAOC,gBAAgBoH,GAElC,IAAK,IAAI7E,EAAI,EAAG8E,EAAI,EAAG9E,EAAI6E,EAAK5E,OAAQD,IACjB,IAAV,EAAJA,KACD8E,EAAoB,WAAhBC,KAAKC,UAEbH,EAAK7E,GAAM8E,MAAY,EAAJ9E,IAAa,GAAM,IAE1C,OAAO6E,CACX,EClBaI,EAASC,OAAOC,KCCvBC,EAAqD,CACvDC,GAAI,gBACJC,QAAS,qBACTC,YAAa,yBACbC,SAAU,sBACVC,UAAW,wBACX7H,OAAQ,qBAGN8H,EAA0BC,EADAV,EAAOG,GAAmBzB,KAAI,SAAC5C,GAAQ,OAAAqE,EAAkBrE,EAAI,KAChCnB,KAAK,KAC5DgG,EAAiB,IAAIC,OAAO,KAAKH,EAA2B,MAqBrDI,EAAe,CAFR,SAAC/E,GAAgB,OAAA6E,EAAeG,KAAKhF,KC5BnDiF,EAAuD,CACzDX,GAAI,KACJ5G,KAAM,KACNwH,MAAO,KACPT,SAAU,KACVU,QAAS,KACTC,MAAO,KACPC,SAAU,KACVC,OAAQ,KACRC,SAAU,KAEVC,MAAO,SAGLC,EAAiE,CACnEnB,GAAI,KACJ5G,KAAM,KACNwH,MAAO,KACPT,SAAU,KACVU,QAAS,KACTI,SAAU,KACVH,MAAO,KAEPI,MAAO,SAGLE,EAAsD,CACxDC,OAAQ,KACRC,KAAM,MACNC,WAAY,OAGVC,EAA0D,CAC5DxB,GAAI,KACJyB,QAAS,KACTC,IAAK,KACLC,SAAU,KACVX,OAAQ,MACRY,YAAa,KACbC,KAAM,MACNC,OAAQ,OAiBNC,EAAoD,CACtD/B,GAAI,UACJ4B,YAAa,oBAGXI,EAAqD,CACvDhC,GAAI,WACJiC,OAAQ,eACRC,QAAS,iBAGAC,EAA+E,CACxFC,IAAKhB,EACLiB,aAAcjB,EACdkB,gBAAiBlB,EACjB9I,MAAO8I,EACPmB,SAAUnB,EACVoB,gBAAiBpB,EACjBqB,OAAQrB,EACRsB,WAAYtB,EACZuB,OAAQvB,EACRwB,OACO9D,EAAAA,EAAA,CAAA,EAAAsC,GACAI,GAEPqB,SACO/D,EAAAA,EAAA,CAAA,EAAAsC,GACAI,GAEPsB,UAAW1B,EACX2B,MACOjE,EAAAA,EAAA,CAAA,EAAAsC,GACAW,GAEPiB,OACOlE,EAAAA,EAAA,CAAA,EAAAsC,GACAY,IAoCLiB,EAAyC,SAC3CP,EACAQ,EACAC,EACAxH,GAEA,OAAOiE,EAAO8C,GAAYU,QAAO,SAACC,EAAkB3H,SAC1C4H,EAAS,MAAKJ,EAAY,GAAIvH,GAASwH,EAAe,IAAIhC,EAAsBzF,IAAQA,GAC9F,OACOoD,EAAAA,EAAA,CAAA,EAAAuE,WACFC,GAASZ,EAAWhH,GACvBuB,GACL,GAAE,CAAE,EACT,EAEMsG,EAA2B3D,EAAOe,GAAoBrC,KAAI,SAAC5C,GAAQ,OAAAiF,EAAmBjF,EAAI,IAC1F8H,EAA8B5D,EAAOuB,GAAuB7C,KAAI,SAAC5C,GAAQ,OAAAyF,EAAsBzF,EAAI,IACnG+H,EAAkC7D,EAAOwB,GAA2B9C,KAAI,SAAC5C,GAAQ,OAAA0F,EAA0B1F,EAAI,IAC/GgI,EAAsC9D,EAAO4B,GAA+BlD,KAC9E,SAAC5C,GAAQ,OAAA8F,EAA8B9F,EAAI,IAEzCiI,EAA0B/D,EAAOoC,GAA0B1D,KAAI,SAAC5C,GAAQ,OAAAsG,EAAyBtG,EAAI,IACrGkI,EAAyBhE,EAAOmC,GAAyBzD,KAAI,SAAC5C,GAAQ,OAAAqG,EAAwBrG,EAAI,IAElGmI,EAA2BvD,EAAIiD,EAAwB,CAAE,WAAUhJ,KAAK,KACxEuJ,EAA8BxD,EAAIkD,EAA2B,CAAE,WAAUjJ,KAAK,KAG9EwJ,EAAkB,IAAIvD,OAAO,eAA+BqD,EAA4B,MACxFG,EAAqB,IAAIxD,OAAO,wBAAmCsD,EAA6C,oBAChHG,EAAyB,IAAIzD,OAAO,KAAKiD,EAAgClJ,KAAK,KAAI,MAClF2J,EAA6B,IAAI1D,OAAO,KAAKkD,EAAoCnJ,KAAK,KAAI,MAC1F4J,GAAwB,IAAI3D,OAAO,sBACnC4D,GAA2B,IAAI5D,OAAO,8BACtC6D,GAAkC,IAAI7D,OACxC,KAAKF,EAxHoC,CACzC,gBACA,cACA,oBACA,cACA,gBACA,YACA,eACA,WACA,iBACA,gBA8GwCqD,EAA4BC,GAAwBrJ,KAAK,KAAI,MAS5F+J,GAAgB,CALL,SAAC5I,GAAgB,OAAAsI,EAAmBtD,KAAKhF,IAD5C,SAACA,GAAgB,OAAAqI,EAAgBrD,KAAKhF,IAE/B,SAACA,GAAgB,OAAAuI,EAAuBvD,KAAKhF,IACpC,SAACA,GAAgB,OAAAwI,EAA2BxD,KAAKhF,IAClD,SAACA,GAAgB,OAAA2I,GAAgC3D,KAAKhF,KAS7E6I,GAAsB,CAACJ,GAAuBC,ICxI9CI,GACN1F,EAAAA,EAAAA,EAAAA,EAAA,CAAA,EA5CkD,CACrD2F,YAAa,QAGkC,CAC/CC,cAAe,KACfC,YAAa,KACbC,WAAY,KACZC,WAAY,KACZC,KAAM,KACNC,UAAW,MACXC,SAAU,MACVC,OAAQ,MACRC,aAAc,OAGoE,CAClFC,QAAS,IACTC,WAAY,MACZC,SAAU,KACVrL,SAAU,KACVgF,SAAU,KACVsG,YAAa,KACbC,iBAAkB,KAClBtG,MAAO,KACPhG,UAAW,KACXH,SAAU,KACV0M,QAAS,IACTjH,KAAM,OAIkB,CACxB,YACA,eACA,cACA,YACA,MACA,YACA,cACA,iBAOuB6E,QACnB,SAACqC,EAAK/J,SAAQ,cACP+J,KAAGxI,EAAA,CAAA,GACLvB,GAAMA,EACTuB,GAHY,GAId,CAAE,IChDJyI,GACC5G,EAAAA,EAAA,CAAA,EAAA0F,IHK4D,CAC/DmB,UAAW,aACXC,cAAe,oBGQbC,GAAuCjG,EAAO8F,IAAgCpH,KAChF,SAAC5C,GAAQ,OAAAgK,GAA+BhK,EAAI,IAG1CoK,GAAgC,SAACpK,GAAgB,OAAuD,IAAvDmK,GAAqChN,QAAQ6C,IAC9FqK,GAAc,SAACrK,GAAgB,MAAQ,WAARA,CAAA,EAuB/BsK,GAA4C,SAACtK,GAC/C,IAAIuK,OAAiCC,EAKrC,OAJA5F,EAAIiE,IAAqB4B,OAAM,SAACC,SAE5B,OADAH,EAA4B,QAAlBhJ,EAAGmJ,EAAMC,KAAK3K,UAAI,IAAAuB,OAAA,EAAAA,EAAG,IACvBqJ,QAAQL,EACpB,IACOA,CACX,EAEMM,GAAsB,SAAC5K,EAAgB6K,GACzC,OAAO5G,EAAO4G,GAAYpD,QACtB,SAACqD,EAAWC,SAAqB,OAC1B5H,EAAAA,EAAA,CAAA,EAAA2H,KACFxJ,EAAA,IAAA,GAAGtB,EAAS+K,GAAqBF,EAAWE,GAC/CzJ,GAAA,GACF,CAAE,EAEV,ECnEA0J,GAAA,WACI,SAAAA,EAAoBC,GAAA5K,KAAI4K,KAAJA,CAAiC,CA0EzD,OAxEiBD,EAAAnL,UAAAqL,UAAb,SAAuBlO,EAAsBC,uHACzC,IAAKlB,UAAUoP,WACX,MAAM,IAAIC,MACN,iHAMgB,OAFlB9J,EAA+BjB,KAAK4K,KAAnCI,EAAO/J,EAAA+J,QAAEC,EAAiBhK,EAAAgK,kBAC3BC,EAAoBlL,KAAKmL,mBAAmBxO,EAAWC,GACrC,CAAA,EAAMoD,KAAKoL,2BAA2BzO,WAStD,OATF0O,EAAkBC,EAAgDpK,OAClEqK,EAA2C,CAC7CC,IAAQR,EAAqB,cAAArO,MAAa0O,EAC1CI,KAAM,IAAIC,KAAK,CAACR,GAAoB,CAChCS,KAAM,+CAIPJ,IACCN,EAAoB,CAAA,EAAMA,EAAkBM,EAAgB,oBAA3C,CAAA,EAAA,iBAAGK,EAAAN,sBAA6DM,EAAA,CAAA,mBAMzF,OARMC,EAAA/I,EAAAgJ,WAAA,EAAAC,EAAAjL,OAAA,MAAC0K,EAAGK,EAAAL,IAAEC,EAAII,EAAAJ,KAMhBO,QAAQC,IAAI,uBAAuBtP,EAAmB,WAAE8E,KAAKG,UAAUhF,IACvElB,UAAUoP,WAAWU,EAAKC,GACnB,CAAA,SACV,EAEMd,EAAAnL,UAAA0M,0BAAP,WACI,OAAOC,QAAQC,WAGXzB,EAAAnL,UAAA2L,mBAAR,SAA2BxO,EAAsBC,GAC7C,OAAOoD,KAAKqM,kBAAkB1P,GACxBqD,KAAKsM,oBAAoB3P,EAAWC,GACpCoD,KAAKuM,2BACDC,aAAcxM,KAAK4K,KAAK6B,OACrB7P,KAIH+N,EAA0BnL,UAAA4L,2BAAxC,SAAyCzO,uGAEnB,OADZsE,EAA6BjB,KAAK4K,KAAjC6B,EAAKxL,EAAAwL,MACM,CAAA,EADaxL,EAAAyL,kBACWC,8BAC1C,OADM5D,EAAY8C,EAA6C3K,OACxD,CAAA,EAAA,CACHuL,GAASzM,KAAKqM,kBAAkB1P,GAAa,gBAAgB8P,EAAU,GACvE1D,EAAY,aAAaA,EAAc,GACvC,yBAEC6D,QAAO,SAACC,GAAM,QAAEA,CAAF,IACdtO,KAAK,YACb,EAEOoM,EAAiBnL,UAAA6M,kBAAzB,SAA0B1P,GACtB,OAAqG,IAA9F,CAACnB,EAAUc,MAAOd,EAAUe,OAAQf,EAAUgB,OAAQhB,EAAUiB,MAAMI,QAAQF,IAGjFgO,EAAAnL,UAAA8M,oBAAR,SAA4B3P,EAAsBC,GAC9C,OAAUD,EAAkB,SAAAmQ,mBAAmBrL,KAAKG,UAAUhF,KAG1D+N,EAAuBnL,UAAA+M,wBAA/B,SAAgC3P,GAAhC,IAKC6F,EAAAzC,KAJG,OAAO6D,OAAOC,KAAKlH,GACdgQ,QAAO,SAAClN,GAAQ,QAAE9C,EAAQ8C,MAC1B4C,KAAI,SAAC5C,GAAQ,OAAGoN,mBAAmBpN,GAAI,IAAIoN,mBAAmBrK,EAAKsK,YAAYnQ,EAAQ8C,IAA1E,IACbnB,KAAK,MAGNoM,EAAWnL,UAAAuN,YAAnB,SAAoB1P,GAChB,MAAwB,iBAAVA,GAAuC,iBAAVA,GAAuC,kBAAVA,EAClEA,EACAoE,KAAKG,UAAUvE,IAE5BsN,CAAD,IChDAqC,GAAA,WAAA,SAAAA,IAQC,CAAD,OAPiBA,EAAAxN,UAAAqL,UAAb,SAAuBoC,EAAcC,sEACjC,MAAA,CAAA,EAAOf,QAAQC,gBAClB,EAEYY,EAAAxN,UAAA0M,0BAAb,8EACI,MAAA,CAAA,EAAOC,QAAQC,gBAClB,EACJY,CAAD,ICpCaG,GAAQpP,OAAOoP,MCE5BC,GAAA,WACI,SAAAA,EAAoBxC,GAAA5K,KAAI4K,KAAJA,CAAiC,CAgEzD,OA9DiBwC,EAAA5N,UAAAqL,UAAb,SAAuBlO,EAAsBC,2HAGlB,OAFjBqE,EAAkDjB,KAAK4K,KAAtDI,EAAO/J,EAAA+J,QAAE0B,EAAiBzL,EAAAyL,kBAAEzB,EAAiBhK,EAAAgK,kBAE7BjL,KAAKqN,sBAAsB1Q,GAAa,CAAA,EAAMqD,KAAKsN,qBAAd,CAAA,EAAA,iBAAGzB,EAAA0B,sBAAiC1B,EAAA,oBAWxF,OAVFN,EAA2C,CAC7CC,IAAQR,EAAqB,cAAArO,EAFiEkP,EAG9F2B,YAAa,UACbC,KAAM,OACNC,QAAS1N,KAAK2N,aACdC,OAAQ,OACRnC,KAAMhK,KAAKG,UAAUhF,YAGlB2O,IACCN,EAAoB,CAAA,EAAMA,EAAkBM,EAAgB,mBAA3C,CAAA,EAAA,iBAAGD,EAAAiC,sBAA4DjC,EAAA,CAAA,mBAGvE,OALXS,EAECjJ,EAAAgJ,WAAA,EAAAF,EAAA9K,OAAA,CAAA,KAFA0K,QAAQqC,EAATC,EAAA/B,EAAA,CAAA,QAKW,CAAA,EAAMoB,GAAM3B,EAAKqC,kBAA5BE,EAAWR,EAA2BrM,QAC/B8M,GACM,CAAA,EAAMD,EAASE,QADnB,CAAA,EAAA,UAOX,OANMC,EAASX,EAAArM,QAEL6H,WACN2D,EAAkByB,oBAAoBD,EAAMnF,WAGhD,CAAA,EAAOmF,UAEP,IACIH,EAASE,MAGZ,CAFC,MAAMG,GAEP,CAED,MADApC,QAAQjQ,MAAM,0CAA0CY,EAAmB,WAAEoR,EAAUnR,GACjF,IAAImO,MACN,2CAA2CpO,EAAS,2DAG/D,EAEYyQ,EAAA5N,UAAA0M,0BAAb,2GAGI,OAFOlB,EAAWhL,KAAK4K,aAEvB,CAAA,EAAMuC,GADSnC,EAAO,mBACL,CAAC0C,QAAS1N,KAAK2N,aAAcC,OAAQ,0BAAtD3M,EAAAC,iBACH,EAEOkM,EAAqB5N,UAAA6N,sBAA7B,SAA8B1Q,GAC1B,OAAqG,IAA9F,CAACnB,EAAUc,MAAOd,EAAUe,OAAQf,EAAUgB,OAAQhB,EAAUiB,MAAMI,QAAQF,IAG3EyQ,EAAA5N,UAAA8N,kBAAd,2GAEsB,MAAA,CAAA,EADUtN,KAAK4K,uBACS+B,8BAC1C,MAAO,CAAA,GADD5D,EAAY9H,EAA6CC,QAC5C,YAAY6H,EAAc,UAChD,EAEOqE,EAAA5N,UAAAmO,WAAR,WACW,IAAAlB,EAASzM,KAAK4K,WACrB,OACO9H,EAAAA,EAAA,CAAA,EAAC2J,EAAQ,CAAC4B,cAAe,UAAU5B,GAAW,CAAA,IACjD,eAAgB,sBAG3BW,CAAD,ICzDAkB,GAKI,SAAYC,EAAwCC,GAApD,IAiBC/L,EAAAzC,KAhBOnE,KAAqBG,IACrBgE,KAAKyO,QAAU,IAAI1O,EACZlE,IACPmE,KAAKyO,QAAU3S,cAEfkQ,QAAQ0C,KAAK,sDAAuD1O,MACpEA,KAAKyO,QAAU,IAAIlP,GAEvBS,KAAK2O,OAAS,IAAIvB,GAAqBmB,GACvCvO,KAAK4O,aAAe,IAAIjE,GAAsB4D,GAC9CxQ,OAAO8Q,iBAAiB,gBAAgB,WAEpC,IADA,QACiCC,EADhBN,IACgBO,EAAQD,EAAAlQ,OAARmQ,IAAU,CAAlC,IAAA9N,OAACtE,EAASsE,EAAAtE,UAAEC,EAAOqE,EAAArE,QACxB6F,EAAKmM,aAAa/D,UAAUlO,EAAWC,EAC1C,CACL,GACH,EAGLoS,GAII,SAAYT,EAAwCE,GAChDzO,KAAKyO,QAAUA,GAAW,IAAIlP,EAC9BS,KAAK2O,OAAS,IAAIvB,GAAqBmB,EAC1C,EAGLU,GAAA,WACWjP,KAAAyO,QAAU,IAAIlP,EACdS,KAAA2O,OAAS,IAAI3B,EACvB,EC1CD,IAAMkC,GAAmB,CAAC,IAAK,EAAG,OAAO,YAEzBC,KACZ,OACI1T,KACA,CACUC,UAAW0T,qBACX1T,UAAWyT,WACXzT,UAAW2T,aACXtR,OAAQoR,YAChBG,MAAK,SAACjS,GAAU,OAAqC,IAArC6R,GAAiBrS,QAAQQ,KAEnD,iECaakS,GAAU,MAEVC,GAAY,CACrBC,QAAS,4CACTC,WAAY,4CACZC,MAAO,kDAmDK,SAAAC,GAAaC,EAA8BC,QAA9B,IAAAD,IAAAA,EAAWL,GAAUC,cAAS,IAAAK,IAAAA,EAAoBP,IAC3E,IAAMQ,GAAiE,IAA1CF,EAAShT,QAAQ,oBAC9C,OAAUgT,GAAWE,EAAuB,GAAK,SAAO,IAAID,CAChE,CAEA,ICjFYE,MCVAC,GF2FZC,GAAA,WAmBI,SAAAA,EAAYtF,GACR,IAAKA,EACD,MAAM,IAAIG,MAAM,gDAGpB/K,KAAKmQ,QACErN,EAAAA,EAAA,CAAA,EAAA9C,KAAKuL,gBACLX,GAGP5K,KAAK+I,UAAY,GACjB/I,KAAKoQ,iBAAmB,GACxBpQ,KAAKqQ,gBAAkB,CAAC3N,EAAkBhG,GAAkBoE,OAAOd,KAAKmQ,QAAQE,iBAChFrQ,KAAKsQ,eAAiBtQ,KAAKmQ,QAAQG,eACnCtQ,KAAKuQ,iBAAmB,GAExB,IAAMC,EAA0C,CAC5CxF,QAAShL,KAAKgL,QACdyB,MAAOzM,KAAKmQ,QAAQ1D,MACpBC,kBAAmB1M,KACnBiL,kBAAmBjL,KAAKmQ,QAAQlF,mBAGpCjL,KAAKyQ,QAAUzQ,KAAKmQ,QAAQO,oBAAsB1Q,KAAK2Q,YAAYH,GAC/DrB,OACAnP,KAAK8B,QACL9B,KAAKyQ,QAAQhC,QAAU,IAAIlP,EAElC,CAiVL,OA/XIsE,OAAA+M,eAAYV,EAAc1Q,UAAA,iBAAA,CAA1BhB,IAAA,WACI,MAAO,CACHqR,SAAUL,GAAUC,QACpBhD,MAAO,GACPoE,QAAStB,GACTc,gBAAiB,GACjBC,eAAgB,GAEvB,kCAwCOJ,EAAW1Q,UAAAmR,YAAnB,SAAoBH,GAApB,IAWC/N,EAAAzC,KAVG,MlB/IqB,oBAAXjC,QkB+ISpC,IACR,IAAI2S,GAAekC,GAAgB,WACtC,IAAMM,EAAWxM,EAAA7B,EAAK2N,kBAEtB,OADA3N,EAAK2N,iBAAmB,GACjBU,CACX,KG9ImB,oBAAbpV,WAAiD,eAArBA,UAAUqV,SHgJ5C/E,QAAQ0C,KGvJqB,4THyJ1B,IAAIM,GAAcwB,KAG7B3M,OAAA+M,eAAYV,EAAO1Q,UAAA,UAAA,CAAnBhB,IAAA,WACI,OAAOwB,KAAKyQ,QAAQhC,OACvB,kCAEayB,EAAA1Q,UAAAwR,mBAAd,2GAEgB,6BAAM,CAAA,EAAAhR,KAAKyO,QAAQhP,QAAQ,cAAnC,KAAA,EAAA,MAAA,CAAA,EAAQwB,EAAuCC,QAAKkC,YAMpD,kBAJA4I,QAAQC,IACJ,oGACAgF,GAEG,CAAA,EAAA7N,4BAEd,EAEK8M,EAAA1Q,UAAAmN,oBAAN,2GACQ,OAAC3M,KAAK+I,UAAS,CAAA,EAAA,GACJ,CAAA,EAAM/I,KAAKgR,6BACtB,OADMhN,EAAK/C,EAA+BC,OAC1C,CAAA,EAAMlB,KAAKmO,oBAAoBnK,WAA/B/C,EAAAC,wBAEJ,MAAO,CAAA,EAAAlB,KAAK+I,iBACf,EAEKmH,EAAmB1Q,UAAA2O,oBAAzB,SAA0BpF,6FAEtB,OADA/I,KAAK+I,UAAYA,EACX,CAAA,EAAA/I,KAAKyO,QAAQ5O,QAAQ,YAAakJ,kBAAxC9H,EAAAC,iBACH,EAEKgP,EAAa1Q,UAAA0R,cAAnB,SAAoBvU,OAA+B,IAAoCC,EAAA,GAAAmS,EAAA,EAApCA,EAAoCoC,UAAAvS,OAApCmQ,IAAAnS,EAAoCmS,EAAA,GAAAoC,UAAApC,6FAC5E,MAAM,CAAA,EAAA/O,KAAKoR,kBAAiBtF,MAAtB9L,KAAuBsE,EAAA,CAAA3H,GAAcC,KAAlD,KAAA,EAAA,MAAA,CAAA,EAAOqE,gBACV,EAEKiP,EAAU1Q,UAAA6R,WAAhB,SAAiB1U,OAA+B,IAAoCC,EAAA,GAAAmS,EAAA,EAApCA,EAAoCoC,UAAAvS,OAApCmQ,IAAAnS,EAAoCmS,EAAA,GAAAoC,UAAApC,mGACvD,MAAM,CAAA,EAAA/O,KAAKoR,kBAAiBtF,MAAtB9L,KAAuBsE,EAAA,CAAA3H,GAAcC,YAC7D,OADD0U,EAAmBrQ,EAAmDC,OAC/D,CAAA,EAAAlB,KAAKuR,4BAA4B5U,EAAW2U,IAAzD,KAAA,EAAA,MAAA,CAAA,EAAOrQ,gBACV,EAKD4C,OAAA+M,eAAIV,EAAgB1Q,UAAA,mBAAA,CAApBhB,IAAA,WAKI,MAHyB,iBADPwB,KAAK+I,WAAa/I,KAAKyO,QAAQhP,QAAQ,eAErDO,KAAKmO,oBAAoB/K,KAEtBpD,KAAK+I,SACf,EAKD5L,IAAA,SAAqB4L,GACjB/I,KAAK+I,UAAYA,EACjB/I,KAAKyO,QAAQ5O,QAAQ,YAAakJ,EACrC,kCAEKmH,EAAiB1Q,UAAA4R,kBAAvB,SAAwBzU,OAA+B,IAAoCC,EAAA,GAAAmS,EAAA,EAApCA,EAAoCoC,UAAAvS,OAApCmQ,IAAAnS,EAAoCmS,EAAA,GAAAoC,UAAApC,gIAiC9D,OAhCnB9N,EAKFjB,KAAKuQ,iBAAiB5T,IAAc,CAAA,EAJpCkP,EAAA5K,EAAAuQ,6BAAAA,OAA4B,IAAA3F,EAAG,GAAEA,EACjCE,EAA6B9K,EAAAwQ,sBAA7BA,OAAqB,IAAA1F,GAAQA,EAC7BH,EAA+B3K,EAAAyQ,wBAA/BA,OAA0B,IAAA9F,GAAKA,EAC/BN,yBAAAqG,OAAuB,IAAArG,KAOrBsG,EAA4C,SAAOC,GAAc,OAAAlP,EAAAF,OAAA,OAAA,GAAA,uEAExD,eADRoP,SACQJ,EAAwB,CAAA,EAAMzR,KAAK2M,uBAAd,CAAA,EAAA,iBAAGZ,EAAAH,sBAAmCG,EAAA,oBAFE,MAAA,CAAA,EAAAjJ,EAAAgJ,WAAA,EAAA7K,EAAAH,OAAA,EAExE+K,EAAS9C,UAAAgD,EAAAF,eAEPiG,EAA2C,SAAOD,GAAc,OAAAlP,EAAAF,OAAA,OAAA,GAAA,qEAC9D,OAAAkP,WAEOE,SACO,CAAA,EAAM7R,KAAK2M,wBAHL,CAAA,EAAA,UACpB,MAEI,CAAA,EAAA7J,EAAAgJ,WAAA,EAAA7K,EAAAH,OAAA,EAAA+K,EAAA7C,SAAU+C,EAAA7K,OACZ2K,OAEN,KAAA,EAAA,MAAA,CAAA,EAAOgG,WAILE,EAAsD,SAACF,GACzD,OAAApP,EAAK4N,gBAAgBjJ,QAAO,SAAO4K,EAAgBC,GAAO,OAAAtP,EAAAF,OAAA,OAAA,GAAA,4DACtC,KAAA,EAAA,MAAA,CAAA,EAAMuP,UACf,OADDpV,EAAUqE,EAAoBC,OAC7B,CAAA,EAAM+Q,EAAQtV,EAAWC,IAAhC,KAAA,EAAA,MAAA,CAAA,EAAOqE,aACV,GAAA,GAAE4Q,EAHH,EAK2B,CAAA,EAAA,CAzB8B,SAACA,GAC1D,OAAAL,EAA6B5S,OAAS,EAChC6D,EAAKyP,8BAA8BV,EAA8BK,GACjEA,EAAe,EAFrB,EA0BAD,EACAE,EAX6C,SAACD,GAC9C,OAAAH,EAA0BjP,EAAK0P,mCAAmCN,GAAkBA,CAApF,EAYAE,GACF3K,QAAO,SAAOgL,EAAgBvM,GAAI,OAAAlD,EAAAF,OAAA,OAAA,GAAA,4DAChB,KAAA,EAAA,MAAA,CAAA,EAAM2P,UACf,OADDxV,EAAUqE,EAAoBC,OAC7B,CAAA,EAAM2E,EAAKjJ,IAAlB,KAAA,EAAA,MAAA,CAAA,EAAOqE,aACV,GAAA,GAAEkL,QAAQC,QAAQxP,YAEnB,MAAA,CAAA,EAXyB2Q,EASGrM,cAG/B,EAEKgP,EAAA1Q,UAAA+R,4BAAN,SAAkC5U,EAA+B0V,8GAavC,OAZfpR,GAAmCjB,KAAKuQ,iBAAiB5T,IAAc,CAAE,2BAAzE+U,OAA0B,IAAAzQ,KAK3BqR,EAA+D,SAACT,GAClE,OAAAH,GP5PFa,KADuCC,EO6PsBX,GP5P5BxM,QAAUc,EAAmCqM,EAAOnN,SAAY,GAChGzB,EAAO4O,GAAQpL,QAAO,SAACqL,EAAY/S,SAChC4H,EAASiL,EAAqB7S,IAAQgK,GAA+BhK,IAAQA,EACnF,OACOoD,EAAAA,EAAA,CAAA,EAAA2P,WACFnL,GAASkL,EAAO9S,GACnBuB,GACL,GAAE,CAAE,IOqPgF4Q,EP7PzC,IAACW,EACvCD,CO4PE,EAMwB,CAAA,EAAA,CAViB,SAACV,GAC1C,OAAApP,EAAKiQ,yBAAyBb,EAAgBlV,EAA9C,EACuC,SAACkV,GAAmB,OAAApP,EAAKkQ,eAAed,IAW/ES,EARgD,SAACT,GACjD,OAAAH,EAA0BjP,EAAKmQ,wBAAwBf,GAAkBA,CAAzE,EACgD,SAACA,GACjD,OAAAH,EAA0BjP,EAAKoQ,wBAAwBhB,GAAkBA,CAAzE,GAQFzK,QAAO,SAAOgL,EAAgBvM,GAAI,OAAAlD,EAAAF,OAAA,OAAA,GAAA,4DAChB,KAAA,EAAA,MAAA,CAAA,EAAM2P,UACf,OADDxV,EAAUqE,EAAoBC,OAC7B,CAAA,EAAM2E,EAAKjJ,IAAlB,KAAA,EAAA,MAAA,CAAA,EAAOqE,aACV,GAAA,GAAEkL,QAAQC,QAAQiG,YAEnB,MAAA,CAAA,EAXsBxG,EASS3K,cAGlC,EAEKgP,EAAS1Q,UAAAqL,UAAf,SACIlO,OACA,IAAoCC,EAAA,GAAAmS,EAAA,EAApCA,EAAoCoC,UAAAvS,OAApCmQ,IAAAnS,EAAoCmS,EAAA,GAAAoC,UAAApC,yGAIX,OAFlB9N,GAA0DjB,KAAKuQ,iBAAiB5T,IAAc,CAAE,gBAAlFmW,OAAkB,IAAA7R,EAAAtE,IAER,CAAA,EAAAqD,KAAKoR,kBAAiBtF,MAAtB9L,KAAuBsE,EAAA,CAAA3H,GAAcC,YAC9C,OADhB0U,EAAmBzF,EAAmD3K,OAChD,CAAA,EAAAlB,KAAKuR,4BAA4B5U,EAAW2U,WAOxE,OAPMyB,EAAgBlH,EAAmE3K,OAEzFlB,KAAKoQ,iBAAiB4C,KAAK,CACvBrW,UAAWmW,EACXlW,QAASmW,IAGP,CAAA,EAAA5G,QAAQ1C,IAAIzJ,KAAKsQ,eAAehO,KAAI,SAAC2Q,GAAS,OAAAA,EAAKtW,EAAW2U,EAAhB,aAEpD,OAFAzF,EAAA3K,OAEA,CAAA,EAAMlB,KAAKkT,yBAEJ,OAFPrH,EAAA3K,OAEO,CAAA,EAAMlB,KAAKmT,2BAAlB,KAAA,EAAA,MAAA,CAAA,EAAOtH,gBACV,EAEOqE,EAAA1Q,UAAA0T,eAAR,WACI,OAAO,IAAI/G,SAAQ,SAACC,GAAY,OAAAgH,WAAWhH,EAAS,EAApB,KAGtB8D,EAAA1Q,UAAA2T,wBAAd,wFAEI,OADME,EAASrT,KAAKoQ,iBAAiBhS,UAE1BzB,EAAsB0W,EAAb1W,UAAEC,EAAWyW,UAC7B,CAAA,EAAOrT,KAAKyQ,QAAQ9B,OAAO9D,UAAUlO,EAAWC,cAEvD,EAEMsT,EAAA1Q,UAAAsC,MAAP,WACI9B,KAAKyO,QAAQ7O,WAAW,cACV,IAAIO,GACZ2B,SAGHoO,EAAA1Q,UAAA8T,wBAAP,WACItT,KAAKyQ,QAAQ9B,OAAOzC,6BAGlBgE,EAAe1Q,UAAA+T,gBAArB,SAAsBC,sEAClB,MAAO,CAAA,EAAAxT,KAAK6K,UAAUrP,EAAUgB,OAAQgX,SAC3C,EAEKtD,EAAc1Q,UAAAiU,eAApB,SAAqBD,sEACjB,MAAO,CAAA,EAAAxT,KAAK6K,UAAUrP,EAAUc,MAAOkX,SAC1C,EAEKtD,EAAe1Q,UAAAkU,gBAArB,SAAsBF,sEAClB,MAAO,CAAA,EAAAxT,KAAK6K,UAAUrP,EAAUe,OAAQiX,SAC3C,EAEKtD,EAAa1Q,UAAAmU,cAAnB,SAAoBH,sEAChB,MAAO,CAAA,EAAAxT,KAAK6K,UAAUrP,EAAUiB,KAAM+W,SACzC,EAEKtD,EAAA1Q,UAAAoU,SAAN,oGAEqB,KAAA,EAAA,MAAA,CAAA,EAAMzG,MAASnN,KAAKgL,QAAO,4BAC7B,MAAA,CAAA,EADE/J,EAA8CC,OACjC+M,eAE9B,OAFMC,EAASjN,EAAAC,OACflB,KAAK+I,UAAYmF,EAAMnF,UACvB,CAAA,EAAOmF,SACV,EAEKgC,EAAA1Q,UAAAqU,UAAN,8FAEqB,KAAA,EAAA,MAAA,CAAA,EAAM1G,MAASnN,KAAKgL,QAAO,wCACpC,MAAA,CAAA,EADS/J,EAA0DC,OACpD+M,eAAvB,MAAO,CAAA,EAAChN,EAAqBC,cAChC,EAEDgP,EAA2B1Q,UAAAsU,4BAA3B,SAA4Bb,GACxBjT,KAAKqQ,gBAAgB2C,KAAKC,IAG9B/C,EAA0B1Q,UAAAuU,2BAA1B,SAA2Bd,GACvBjT,KAAKsQ,eAAe0C,KAAKC,IAG7B/C,EAAA1Q,UAAAwU,oBAAA,SAAoBrX,EAAmBsX,GACnCjU,KAAKuQ,iBAAiB5T,GAAasX,GAG/B/D,EAAA1Q,UAAA0S,8BAAR,SAAsCgC,EAAuBtX,GAEzD,IADA,IAAMuX,EAAyC,CAAA,EACtCxV,EAAI,EAAGyV,EAASxX,EAAQgC,OAAQD,EAAIyV,EAAQzV,IAAK,CACtD,IAAM0V,EAAkBzX,EAAQ+B,GAChC,GAA+B,iBAApB0V,EACPF,EAAgBD,EAAYvV,IAAM0V,OAC/B,GAA+B,iBAApBA,EAEd,OACOvR,EAAAA,EAAA,CAAA,EAAAqR,GACAE,EAGd,CACD,OAAOF,GAGHjE,EAAA1Q,UAAA8U,kBAAR,SAA0BC,EAAiB7U,SAMvC,OAA+B,OALPuB,EAAA,CAAA,GACnBzF,EAAUgB,QAAS,CAAC,gBAGQ+X,IAAY,IAChC1X,QAAQ6C,IAGjBwQ,EAAA1Q,UAAAkT,yBAAR,SAAiC9V,EAA0BD,GAA3D,IAWC8F,EAAAzC,KATG,OAAO6D,OAAOC,KAAKlH,GACdgQ,QAAO,SAAClN,GAAQ,OAAA+C,EAAK6R,kBAAkB3X,EAAW+C,IAFf,OAAfrC,EAEsDT,EAAQ8C,KAFa,KAAVrC,EAAlE,IAACA,CAEJ,IAChB+J,QACG,SAACoN,EAAY9U,SAAQ,OAAAoD,EAAAA,EAAA,CAAA,EACd0R,KACFvT,EAAA,CAAA,GAAAvB,GAAM9C,EAAQ8C,GACjBuB,GAAA,GACF,CAAE,IAINiP,EAAuB1Q,UAAAoT,wBAA/B,SAAgChW,GAC5B,IAAM4X,EAAa3Q,OAAOC,KAAKlH,GAC1BgQ,QAAO,SAAClN,GACL,GP9XwB,SAACA,GACrC,OAAO4E,EAAIgE,GAAkB7D,GAAcqF,GAA+BC,KAAauF,MAAK,SAAC5K,GAAS,OAAAA,EAAKhF,EAAI,GACnH,CO4XoB+U,CAAyB/U,GACzB,OAAO,EAEPsM,QAAQC,IAAIvM,EAAK,8BAEzB,IACC0H,QACG,SAACoN,EAAY9U,SAAQ,OAAAoD,EAAAA,EAAA,CAAA,EACd0R,KACFvT,EAAA,CAAA,GAAAvB,GAAM9C,EAAQ8C,GACjBuB,GAAA,GACF,CAAE,GAEV,OAAOuT,GAGHtE,EAAuB1Q,UAAAqT,wBAA/B,SAAgCjW,GACrB,IP3YsCkD,EO2YtCvD,EAAmBK,EAAbL,OAAKmY,EAAI5G,EAAIlR,EAApB,CAAiB,WAEjB+X,EAAmB3U,KAAK4U,cAAcrY,GAEtCiY,EP9YH5Q,EAD0C9D,EO+YW4U,GP9YxCtN,QAAO,SAACqC,EAAKwI,SACvB4C,EAAQ7K,GAA0CiI,GACxD,OAEWnP,EAAAA,EAAA,CAAA,EAAA2G,GAFPoL,EAGOtK,GAAoBsK,EAAO/U,EAAKmS,YAKlCA,GAAUnS,EAAKmS,GAClBhR,GAET,GAAE,CAAE,GOmYD,OACO6B,EAAAA,EAAA,CAAA,EAAA6R,GACAH,IAIHtE,EAAa1Q,UAAAoV,cAArB,SAAsBrY,GAGlB,OAFasH,OAAOC,KAAKvH,GAAU,CAAE,GAEzB6K,QACR,SAACqC,EAAK/J,SAAQ,OACPoD,EAAAA,EAAA,CAAA,EAAA2G,KACFxI,EAAA,CAAA,GAAAvB,EAAI0C,eAAgB7F,EAAOmD,GAC9BuB,GAAA,GACF,CAAE,IAIFiP,EAAc1Q,UAAAmT,eAAtB,SAAuB/V,GACZ,IAAA6L,EAAwB7L,EAAb6L,YAAKiM,EAAI5G,EAAIlR,EAAzB,CAAsB,gBAM5B,YALoBsN,IAAhBzB,IACoG,GAAhG,CAAC,IAAK,QAAS,YAAa,OAAQ,KAAM,KAAM,IAAI5L,SAAQ,GAAG4L,GAAcrG,iBAC7EsS,EAAkB,YAAI,GAGvBA,GAGHxE,EAAkC1Q,UAAA2S,mCAA1C,SAA2CvV,GAChC,IIhdU6P,EJgdVxD,EAAmBrM,EAAbqM,OAAKyL,EAAI5G,EAAIlR,EAApB,CAAiB,WACvB,OIjdoC6P,OAAnBA,EJidJzM,KAAKmQ,QAAQ1D,YIjdU,EAAAA,EAAOqI,WAF5B,SJmdsB7L,GACjCyL,EAAa,OAAI,YACVA,GAEA9X,GAIfiH,OAAA+M,eAAYV,EAAO1Q,UAAA,UAAA,CAAnBhB,IAAA,WACI,OAAOoR,GAAa5P,KAAKmQ,QAAQN,SAAU7P,KAAKmQ,QAAQU,QAC3D,kCACJX,CAAD,kHK9da6E,GAAuB,SAAC/W,GACjC,OAAGA,EAASgX,SAAQ,KAAKhX,EAASC,UACK,IAAnCD,EAASiX,SAASpY,QAAQ,KAAamB,EAASiX,SAAW,IAAIjX,EAASiX,UACzEjX,EAASxB,MAFZ,ECUS0Y,GAAuB,CAChCC,SAAU,WACVC,MAAO,SAKXC,GAAA,WAWI,SAAAA,EAAYpU,GAAC,IAAA0N,WAAQ9C,EAAA5K,EAAAqU,cAAAA,OAAa,IAAAzJ,EAAGzI,EAAMyI,EAPjC7L,KAAUuV,WAA6B,GAQ7CvV,KAAK2O,OAASA,EACd3O,KAAKsV,cAAgBA,EACrBtV,KAAKoJ,WAAakM,IAClBtV,KAAKwV,eAAiBxV,KAAKoJ,WAC3BpJ,KAAKyV,gBAAkBV,GAAqBhX,OAAOC,UACnDgC,KAAK0V,aAAe9Z,SAASoH,SAE7BhD,KAAK2V,UACR,CAkGL,OA7FWN,EAAA7V,UAAAoW,UAAP,SAAiBvQ,EAAgB8K,GAC7BnQ,KAAKqF,OAASA,EACdrF,KAAKuV,WAAapF,GAGfkF,EAAA7V,UAAAqW,UAAP,WACI7V,KAAK8V,kBACL9V,KAAKqF,YAAS6E,EACdlK,KAAKuV,WAAa,IAGfF,EAAA7V,UAAAuW,uBAAP,SAA8BpZ,EAAmBC,GAC7C,OAAAkG,EAAA,CACIqG,QAASxM,GACNqD,KAAKgW,cAAcrZ,EAAWC,KAIlCyY,EAAA7V,UAAAyW,0BAAP,SAAiCtZ,EAAmBC,GAChDoD,KAAKkW,8BAA8BvZ,EAAWC,IAG3CyY,EAA4B7V,UAAA2W,6BAAnC,SAAoCxZ,GAChC,IAAMyZ,EAAkB,CACpBnT,MAAOrH,SAASqH,MAChBoG,SAAUzN,SAASya,cAEjBC,EAAgB,CAClB/M,iBAAqBgN,OAAOC,MAAS,IAAAD,OAAOE,OAC5CnN,YAAgBiN,OAAOG,WAAgB,QAErCC,EAAmB,CACrB7Z,SAAUpB,UAAUoB,SACpBG,UAAWvB,UAAUuB,WAEnB2Z,EAAe,CACjBrU,KAAM5E,KAAKkZ,MAAM9T,WACjByG,QAASxJ,KAAKsV,iBAElB,OAAAxS,EAAAA,EAAAA,EAAAA,EAAA,CAAA,EACO8T,GACAN,GACAK,GACAP,IAIHf,EAAA7V,UAAA0W,8BAAR,SAAsCvZ,EAAmBC,GAC/C,IAAAqE,EAAmCjB,KAAKgW,cAAcrZ,EAAWC,GAAhEwM,eAAYpG,aAAUhF,aAE7BgC,KAAK0V,aAAe1S,EACpBhD,KAAKoJ,WAAaA,EAClBpJ,KAAKyV,gBAAkBzX,EAEnBrB,IAAcuY,GAAqBC,WACnCnV,KAAKwV,eAAiBxV,KAAKsV,gBAC3BtV,KAAK8W,sBAAuB,IAQ5BzB,EAAA7V,UAAAwW,cAAR,SAAsBrZ,EAAmBC,GAOrC,MAAO,CACHwM,WAAYzM,IAAcuY,GAAqBC,SAAWnV,KAAKwV,eAAiBxV,KAAKoJ,WACrFpG,SACIrG,IAAcuY,GAAqBC,UAAYnV,KAAK8W,qBAC9C9W,KAAKyV,gBACLzV,KAAK0V,aACf1X,SACIrB,IAAcuY,GAAqBC,SAC7BnV,KAAK+W,8BAA8Bna,GACnCoD,KAAKyV,kBAIfJ,EAA6B7V,UAAAuX,8BAArC,SAAsCna,GAClC,GAAMA,EAAQkM,KAAM,CAGhB,MAAO,GAAuB9I,KAAKyV,gBADwBtX,MAAM,KAAK0D,MAAM,EAAG,GAAGtD,KAAK,KACb3B,EAAQkM,KAF/BjK,QAAQ,YAAa,MAG3E,CACG,OAAOkW,GAAqBhX,OAAOC,WAG9CqX,CAAD,IChIa2B,GACNlU,EAAA,GAAAoS,IAGD+B,GAAkBpT,OAAOC,KAAKkT,IAAoB1U,KACpD,SAAC5C,GAAQ,OAAAsX,GAAmBtX,EAAuC,IAmDvEwX,GAAA,SAAAC,GAKI,SAAAD,EAAYjW,GAAC,IAAA0N,WAAQ9C,EAAA5K,EAAAqU,cAAAA,OAAa,IAAAzJ,EAAGzI,EAAMyI,EACvCpJ,EAAA0U,EAAAC,KAAApX,KAAM,CAAC2O,OAAMA,EAAE2G,cAAaA,KAC/BtV,YALOyC,EAAQ4U,SAAc,GACtB5U,EAAW6U,YAAiB,IAInC,CA8IL,OArJ8BC,EAAUL,EAAAC,GAS1BD,EAAA1X,UAAAmW,SAAV,WACI3V,KAAKwX,sBACLxX,KAAKyX,mBACLzX,KAAK0X,uBAGTR,EAAU1X,UAAAmY,WAAV,SAAW5G,GACP/Q,KAAKqX,SAASrE,KAAKjC,IAGvBmG,EAAa1X,UAAAoY,cAAb,SAAclR,GACV1G,KAAKsX,YAAYtE,KAAKtM,IAGhBwQ,EAAA1X,UAAAsW,gBAAV,WACI9V,KAAKqX,SAAW,GAChBrX,KAAKsX,YAAc,IAGfJ,EAAA1X,UAAAkY,oBAAR,WAAA,IAUCjV,EAAAzC,KATGA,KAAK2O,OAAOmF,6BAA4B,SAACnX,OAAW,IAAYsE,EAAA,GAAA8N,EAAA,EAAZA,EAAYoC,UAAAvS,OAAZmQ,IAAA9N,EAAY8N,EAAA,GAAAoC,UAAApC,GAAZ,IAAInS,OACpD,OAA+C,IAAxCqa,GAAgBpa,QAAQF,GAAoB8F,EAAKoV,mBAAmBlb,EAAWC,GAAWA,CACrG,IACAoD,KAAK2O,OAAOoF,4BAA2B,SAACpX,OAAW,IAAYsE,EAAA,GAAA8N,EAAA,EAAZA,EAAYoC,UAAAvS,OAAZmQ,IAAA9N,EAAY8N,EAAA,GAAAoC,UAAApC,GAAZ,IAAInS,OAInD,OAH4C,IAAxCqa,GAAgBpa,QAAQF,IACxB8F,EAAKwT,0BAA0BtZ,EAAWC,GAEvCA,CACX,KAGIsa,EAAA1X,UAAAgY,oBAAR,WACIxX,KAAK2O,OAAOqF,oBAAoBgD,GAAmB7B,SAAU,CACzD2C,aAActc,EAAUuc,QACxBvG,6BAA8B,CAAC,QAC/BC,uBAAuB,EACvBC,yBAAyB,KAIzBwF,EAAA1X,UAAAiY,iBAAR,WACIzX,KAAK2O,OAAOqF,oBAAoBgD,GAAmB5B,MAAO,CACtD0C,aAActc,EAAUuc,QACxBvG,6BAA8B,CAAC,gBAAiB,cAAe,aAAc,cAC7EC,uBAAuB,EACvBC,yBAAyB,KAIzBwF,EAAA1X,UAAAqY,mBAAR,SAA2Blb,EAAmBC,GAC1C,IAAMob,aACChY,KAAK+V,uBAAuBpZ,EAAWC,IACvCoD,KAAKmW,6BAA6BxZ,IACjCqD,KAAKqF,OAAS,CAACA,OAAQrF,KAAKqF,QAAU,CAAE,GACxCrF,KAAKuV,YAAc,CAAE,GAGvB0C,EAAiBjY,KAAKkY,oBACtBC,EAAoBnY,KAAKoY,uBAI/B,OAFApY,KAAK6V,YAEL/S,EAAAA,EAAAA,EAAAA,EAAA,CAAA,EACOqV,GACAF,GACAD,GACApb,IAIHsa,EAAA1X,UAAA0Y,kBAAR,WAAA,IASCzV,EAAAzC,KARG,OAAOA,KAAKqX,SACP/U,KAAI,SAACyO,GAAY,OAAAtO,EAAK4V,sBAAsBtH,MAC5C3J,QAAO,SAACoN,EAAYzD,EAASuH,GAC1B,OACOxV,EAAAA,EAAA,GAAA0R,GhB/C4B,SAACzD,EAAkBuH,GAClE,OAAO1U,EAAOmN,GAAS3J,QAAO,SAACmR,EAAe7Y,SACpC4H,EAAS,MAAKgR,EAAQ,IAAI3T,EAAmBjF,IAAQA,GAC3D,OACOoD,EAAAA,EAAA,CAAA,EAAAyV,WACFjR,GAASyJ,EAAQrR,GACpBuB,GACL,GAAE,CAAE,EACT,CgBwCuBuX,CAAoCzH,EAASuH,GAEvD,GAAE,CAAE,IAGLpB,EAAA1X,UAAA4Y,qBAAR,WAAA,IAkBC3V,EAAAzC,KAhBG,OAD0BA,KAAKyY,uBAE1BnW,KACG,SAACrB,GAAC,IAAAqW,EAAWrW,EAAAqW,YAAK5C,EAAI5G,EAAA7M,EAArB,iBACG,OAAC6B,EACMA,EAAA,CAAA,EAAA4R,GACH,CAAA4C,YAAaA,EAAYhV,KAAI,SAACoW,GAC1B,OAAAjW,EAAKkW,6BAA6BD,EAAe,SAIhEtR,QAAO,SAACoN,EAAYoE,EAAgBN,GACjC,OACOxV,EAAAA,EAAA,CAAA,EAAA0R,GhBzDmC,SACtDoE,EACA1R,EACAvH,GAEA,IAAM/C,EAAiCgc,EAAetB,YAAYlQ,QAC9D,SAACyR,EAAmBnS,EAAYS,GAC5B,OAAArE,EAAAA,EAAA,CAAA,EACO+V,GACA5R,EAAuCP,EAAYQ,EAAWC,EAAcxH,GAEtF,GACD,CAAE,GAON,OAJIiZ,EAAeE,WAEflc,EADoB,MAAKsK,EAAY,SACd0R,EAAeE,UAEnClc,CACX,CgBsCuBmc,CAA2CH,EAAgBN,EAAO,MAE5E,GAAE,CAAE,IAGLpB,EAAqB1X,UAAA6Y,sBAA7B,SAA8BtH,GACnB,IAAA9L,EAA4B8L,EAApB9L,SAAK+T,EAAWlL,EAAIiD,EAA7B,CAA0B,aAChC,YAAiB7G,IAAbjF,GAA0BA,EAAW,GACrC+G,QAAQ0C,KACJ,8BAA6BqC,EAAQ3T,MAAQ2T,EAAQ/M,IAArD,2CAGGgV,GAGJjI,GAGHmG,EAA4B1X,UAAAmZ,6BAApC,SAAqCD,GAC1B,IAAAzT,EAAmCyT,EAA3BzT,SAAKgU,EAAkBnL,EAAI4K,EAApC,CAAiC,aACvC,YAAiBxO,IAAbjF,GAA0BA,EAAW,GACrC+G,QAAQ0C,KACJ,iCAAgCgK,EAAetb,MAAQsb,EAAe1U,IAAtE,2CAIGiV,GAGJP,GAGHxB,EAAA1X,UAAAiZ,qBAAR,WACI,OAAOzY,KAAKsX,YAAYlQ,QAAO,SAAC8R,EAAOxS,GAC5B,IAAMoS,EAA+BpS,EAAvBpB,KAAKoT,EAAc5K,EAAIpH,EAAtC,CAAmC,SACnCpB,EAAO4T,EAAMC,MAAK,SAAC7T,GAAS,OAAAA,EAAKwT,WAAaA,CAAlB,IAMlC,OALIxT,EACAA,EAAKgS,YAAYtE,KAAK0F,GAEtBQ,EAAMlG,KAAK,CAAC8F,SAAUA,EAAUxB,YAAa,CAACoB,KAE3CQ,CACV,GAAE,KAlJgBhC,EAAEkC,GAAG,KAoJ/BlC,EArJD,CAA8B7B,IAuJjBgE,GAAkBnC,GClNlBoC,GACNxW,EAAA,GAAAoS,IAGDqE,GAAmB1V,OAAOC,KAAKwV,IAAqBhX,KACtD,SAAC5C,GAAQ,OAAA4Z,GAAoB5Z,EAAwC,IAkBzE8Z,GAAA,SAAArC,GAII,SAAAqC,EAAYvY,GAAC,IAAA0N,WAAQ9C,EAAA5K,EAAAqU,cAAAA,OAAa,IAAAzJ,EAAGzI,EAAMyI,EACvCpJ,EAAA0U,EAAAC,KAAApX,KAAM,CAAC2O,OAAMA,EAAE2G,cAAaA,KAC/BtV,YAJOyC,EAAMgX,OAAW,IAIxB,CAmEL,OAzE+BlC,EAAUiC,EAAArC,GAQ3BqC,EAAAha,UAAAmW,SAAV,WACI3V,KAAKyX,mBACLzX,KAAKwX,sBACLxX,KAAK0Z,wBAGTF,EAASha,UAAAma,UAAT,SAAUF,GACNzZ,KAAKyZ,OAASA,GAGRD,EAAAha,UAAAsW,gBAAV,WACI9V,KAAKyZ,OAAS,IAGVD,EAAAha,UAAAka,qBAAR,WAAA,IAUCjX,EAAAzC,KATGA,KAAK2O,OAAOmF,6BAA4B,SAACnX,OAAW,IAAYsE,EAAA,GAAA8N,EAAA,EAAZA,EAAYoC,UAAAvS,OAAZmQ,IAAA9N,EAAY8N,EAAA,GAAAoC,UAAApC,GAAZ,IAAInS,OACpD,OAAgD,IAAzC2c,GAAiB1c,QAAQF,GAAoB8F,EAAKmX,oBAAoBjd,EAAWC,GAAWA,CACvG,IACAoD,KAAK2O,OAAOoF,4BAA2B,SAACpX,OAAW,IAAYsE,EAAA,GAAA8N,EAAA,EAAZA,EAAYoC,UAAAvS,OAAZmQ,IAAA9N,EAAY8N,EAAA,GAAAoC,UAAApC,GAAZ,IAAInS,OAInD,OAH6C,IAAzC2c,GAAiB1c,QAAQF,IACzB8F,EAAKwT,0BAA0BtZ,EAAWC,GAEvCA,CACX,KAGI4c,EAAAha,UAAAgY,oBAAR,WACIxX,KAAK2O,OAAOqF,oBAAoBsF,GAAoBnE,SAAU,CAC1D2C,aAActc,EAAUuc,QACxBvG,6BAA8B,CAAC,QAC/BC,uBAAuB,EACvBC,yBAAyB,KAIzB8H,EAAAha,UAAAiY,iBAAR,WACIzX,KAAK2O,OAAOqF,oBAAoBsF,GAAoBlE,MAAO,CACvD0C,aAActc,EAAUuc,QACxBvG,6BAA8B,CAAC,gBAAiB,cAAe,aAAc,cAC7EC,uBAAuB,EACvBC,yBAAyB,KAIzB8H,EAAAha,UAAAoa,oBAAR,SAA4Bjd,EAAmBC,SACrCid,EAAU/W,EAAAA,EAAAA,EAAAA,EAAA,CAAA,EACT9C,KAAK+V,uBAAuBpZ,EAAWC,IACvCoD,KAAKmW,6BAA6BxZ,IACjCqD,KAAKqF,OAAS,CAACsE,UAAW3J,KAAKqF,QAAU,IACzCxB,OAAOC,KAAoB,QAAhB7C,EAACjB,KAAKuV,kBAAU,IAAAtU,EAAAA,EAAI,CAAE,GAAErC,OAAS,EAAI,CAACgL,cAAe5J,KAAKuV,YAAc,CAAA,GAGrFuE,EAAgB9Z,KAAK+Z,mBAG3B,OAFA/Z,KAAK6V,YAEL/S,EAAAA,EAAAA,EAAA,CAAA,EACOgX,GACAD,GACAjd,IAIH4c,EAAAha,UAAAua,iBAAR,WACI,OlB/E2CN,EkB+EDzZ,KAAKyZ,OlB9E5C7V,EAAO6V,GACT7M,QAAO,SAAClN,GAAQ,YAAgBwK,IAAhBuP,EAAO/Z,MACvB0H,QAAO,SAAC4S,EAActa,SACb4H,EAASvD,EAAkBrE,IAAQA,EACzC,OACOoD,EAAAA,EAAA,CAAA,EAAAkX,WACF1S,GAASmS,EAAO/Z,GACnBuB,GACL,GAAE,CAAE,GATqC,IAACwY,GkBSxBD,EAAEJ,GAAG,MAwE/BI,EAzED,CAA+BnE,IA2ElB4E,GAAmBT,GChGhCU,GAAA,WAAA,SAAAA,UAEYla,KAAoBma,uBAAAlZ,EAAA,CAAA,GACvBoY,GAAGD,IAAKC,GACTpY,EAACgZ,GAAIb,IAAKa,GACZhZ,GACMjB,KAAeoa,gBAA+B,EAkCzD,CAAD,OAhCIF,EAAA1a,UAAA6a,QAAA,SAAQjd,EAAc+S,GAClB,IAAMmK,EAActa,KAAKma,qBAAqB/c,GAC9C,IAAKkd,EACD,MAAM,IAAIvP,MACN,oBAAoB3N,EAAI,gFAGhC4C,KAAKoa,gBAAgBhd,GAAQ,IAAIkd,EAAYnK,IAGjD+J,EAAA1a,UAAA+a,QAAA,SAAQnd,EAAcod,GAClBxa,KAAKma,qBAAqB/c,GAAQod,GAGtCN,EAAA1a,UAAAib,cAAA,WACIza,KAAKoa,gBAAkB,IAG3BF,EAAA1a,UAAAkb,QAAA,SAAQtd,EAAcud,OAAY,IAAiCC,EAAA,GAAA7L,EAAA,EAAjCA,EAAiCoC,UAAAvS,OAAjCmQ,IAAA6L,EAAiC7L,EAAA,GAAAoC,UAAApC,GAC/D,IAAMyL,EAASxa,KAAKoa,gBAAgBhd,GACpC,IAAKod,EACD,MAAM,IAAIzP,MAAM,eAAe3N,EAAI,oEAEvC,IAAMyd,EAAiBL,EAAOG,GAC9B,IAAKE,EACD,MAAM,IAAI9P,MAAM,iBAAiB4P,EAAsC,oCAAAvd,EAAQ,MAEnF,GAA8B,mBAAnByd,EACP,MAAM,IAAI9P,MAAM,IAAI4P,EAAsB,oBAAAvd,EAA0B,wBAExE,OAAOyd,EAAe/O,MAAM0O,EAAQI,IArCjBV,EAAcY,eAAa,CAACzB,GAAGD,GAAIa,GAAIb,IAuCjEc,CAAA,ICjCDa,GAAA,WAAA,SAAAA,IAEY/a,KAAAgb,QAAmB,IAAId,GACvBla,KAAMwS,OAA6B,EA0H9C,CAAD,OApHIuI,EAAAvb,UAAAyb,KAAA,SAAKxO,EAAiCyO,GAAtC,IA4BCzY,EAAAzC,KA3BG,IAAKyM,EACD,MAAM,IAAI1B,MAAM,iDAYpB,GATqB,iBAAV0B,EACPzM,KAAK2O,OAAS,IAAIuB,GAAqB,CACnCzD,MAAOA,EACPoD,SAAU7P,KAAKmb,YAAYD,KAExBlb,KAAKob,kBAAkB3O,KAC9BzM,KAAK2O,OAASlC,IAGdzM,KAAK2O,OAYL,MAAM,IAAI5D,MAAM,0EAXhB,IAAMsQ,EAA+B,CAAC1M,OAAQ3O,KAAK2O,QACnD3O,KAAKgb,QAAQP,gBACbza,KAAKsb,cAAcJ,GAAmBK,SAAQ,SAACC,GAC3C,OAAA/Y,EAAKuY,QAAQX,QAAQmB,EAAWH,EAAhC,IAEJrb,KAAK2O,OAAOmF,6BAA4B,SAACnX,EAAWC,GAAY,OACzDkG,EAAAA,EAAA,CAAA,EAAAlG,GACA6F,EAAK+P,OACV,IACFxS,KAAK2O,OAAOqF,oBAAoBxY,EAAUiB,KAAM,CAACqb,aAActc,EAAUiB,KAAMkV,sBAAsB,KAMrGoJ,EAAiBvb,UAAA4b,kBAAzB,SAA0B3O,GACtB,MAAwB,iBAAVA,QAAiD,IAApBA,EAAM5B,WAG7CkQ,EAAavb,UAAA8b,cAArB,SAAsBJ,GAClB,MAAiC,iBAAtBA,EACAhB,GAAQY,eAEZW,MAAMC,QAAQR,aAAiB,EAAjBA,EAAmBF,SAAWE,EAAkBF,QAAUd,GAAQY,gBAGnFC,EAAWvb,UAAA2b,YAAnB,SAAoBD,GAChB,MAAiC,iBAAtBA,EACAA,GAAqB1L,GAAUC,SAC/ByL,eAAAA,EAAmBrL,UACnBqL,EAAkBrL,SAEtBL,GAAUC,SAKrBsL,EAAYvb,UAAAmc,aAAZ,SAAa9L,GACT,IAAKA,EACD,MAAM,IAAI9E,MAAM,4DAGpB,GAAwB,iBAAb8E,EACP,MAAM,IAAI9E,MAAM,iFAGpB/K,KAAK2O,OAAS,IAAIuB,GAAqB,CACnCL,SAAUA,KAIlBkL,EAAAvb,UAAArC,IAAA,SAAIye,EAA2Bve,GAA/B,IAQCoF,EAAAzC,KAP8B,iBAAhB4b,EACP5b,KAAKwS,OAAOoJ,GAAeve,EAE3BwG,OAAOC,KAAK8X,GAAatZ,KAAI,SAAC5C,GAC1B+C,EAAK+P,OAAO9S,GAAOkc,EAAYlc,EACnC,KAIRqb,EAAAvb,UAAAqc,KAAA,qBAA+ChQ,EAAA,GAAAkD,EAAA,EAA1CA,EAA0CoC,UAAAvS,OAA1CmQ,IAAAlD,EAA0CkD,GAAAoC,UAAApC,GAA1C,IAAIqG,EAAKvJ,EAAA,GAAKjP,aACf,QAA0B,IAAfoD,KAAK2O,OACZ,MAAM,IAAI5D,MAAM,8CAGpB,IAAKqK,EACD,MAAM,IAAIrK,MAAM,uDAGpB,OAAO9J,EAAAjB,KAAK2O,QAAO9D,UAASiB,MAAA7K,EAAAqD,EAAA,CAAC8Q,EAAMhT,eAAmBxF,KAG1Dme,EAAMvb,UAAAsc,OAAN,SAAOC,GACH,QAAuB,IAAZA,EACP,MAAM,IAAIhR,MAAM,mDAGpBgR,KAGJhB,EAAAvb,UAAA+a,QAAA,SAAQnd,EAAcod,GAClBxa,KAAKgb,QAAQT,QAAQnd,EAAMod,IAG/BO,EAAAvb,UAAA6a,QAAA,SAAQjd,EAAc+S,GAClB,IAAKnQ,KAAK2O,OACN,MAAM,IAAI5D,MAAM,gDAEpB/K,KAAKgb,QAAQX,QAAQjd,EAAI0F,EAAAA,EAAA,CAAA,EAAMqN,GAAO,CAAExB,OAAQ3O,KAAK2O,WAGzDoM,EAAAvb,UAAAwc,WAAA,SAAWC,EAAoBtB,aAAwBuB,EAAA,GAAAnN,EAAA,EAAZA,EAAYoC,UAAAvS,OAAZmQ,IAAAmN,EAAYnN,EAAA,GAAAoC,UAAApC,IACnD9N,EAAAjB,KAAKgb,SAAQN,QAAO5O,MAAA7K,EAAAqD,EAAA,CAAC2X,EAAYtB,GAAOuB,KAG5CnB,EAAAvb,UAAA2c,MAAA,WACInc,KAAK2O,YAASzE,EACdlK,KAAKgb,QAAU,IAAId,GACnBla,KAAKwS,OAAS,IAErBuI,CAAD,IAEaqB,GAAU,IAAIrB,GACdsB,GAAmB,WAAM,OAAAD,GAAQzN,MAAR,EAEzB2N,GAA0B,SAACC,OAAiB,IAAgB/J,EAAA,GAAAzD,EAAA,EAAhBA,EAAgBoC,UAAAvS,OAAhBmQ,IAAAyD,EAAgBzD,EAAA,GAAAoC,UAAApC,GAC/D,IAAA9N,EAAkC,iCAAiCoJ,KAAKkS,GAA1Dtb,EAAA,OAAEgb,EAAUhb,EAAA,GAAE0Z,OAE5BE,EAAuBuB,GAASzB,GACtC,GAAIsB,GAActB,EACd,OAAOyB,GAAQJ,WAARlQ,MAAAsQ,GAAmB9X,EAAA,CAAA2X,EAAsBtB,GAAOnI,IACpD,GAAIqI,EACP,OAAOA,EAAe/O,MAAMsQ,GAAS5J,GAErC,IAAMgK,EAA8B,CAChC,OACA,MACA,OACA,SACA,aACA,QACA,UACA,WAEJ,MAAM,IAAIzR,MAAM,eAAewR,EAA+C,wCAAAC,EAAQje,KAAK,MAAK,IAExG,sHTxJA,SAAYyR,GAIRA,EAAA,eAAA,iBAIAA,EAAA,eAAA,gBACH,CATD,CAAYA,KAAAA,GASX,CAAA,ICnBD,SAAYC,GAIRA,EAAA,cAAA,gBAIAA,EAAA,gBAAA,kBAIAA,EAAA,oBAAA,sBAIAA,EAAA,gBAAA,kBAIAA,EAAA,YAAA,cAIAA,EAAA,gBAAA,kBAIAA,EAAA,eAAA,iBAIAA,EAAA,mBAAA,qBAIAA,EAAA,gBAAA,kBAIAA,EAAA,mBAAA,qBAIAA,EAAA,kBAAA,oBAIAA,EAAA,aAAA,eAIAA,EAAA,iBAAA,mBAIAA,EAAA,gBAAA,kBAIAA,EAAA,eAAA,iBAIAA,EAAA,cAAA,SAIAA,EAAA,eAAA,UAIAA,EAAA,aAAA,QAIAA,EAAA,iBAAA,YAIAA,EAAA,gBAAA,WAIAA,EAAA,YAAA,cAIAA,EAAA,YAAA,cAIAA,EAAA,UAAA,YAIAA,EAAA,cAAA,gBAIAA,EAAA,eAAA,iBAIAA,EAAA,qBAAA,uBAIAA,EAAA,mBAAA,qBAIAA,EAAA,qBAAA,uBAIAA,EAAA,cAAA,gBAIAA,EAAA,YAAA,cAIAA,EAAA,YAAA,cAIAA,EAAA,eAAA,iBAIAA,EAAA,cAAA,gBAIAA,EAAA,aAAA,eAIAA,EAAA,eAAA,iBAIAA,EAAA,gBAAA,kBAIAA,EAAA,cAAA,uBAIAA,EAAA,cAAA,uBAIAA,EAAA,WAAA,QAIAA,EAAA,eAAA,YAIAA,EAAA,gBAAA,kBAIAA,EAAA,gBAAA,aAIAA,EAAA,eAAA,iBAIAA,EAAA,4BAAA,8BAIAA,EAAA,mBAAA,qBAIAA,EAAA,iBAAA,mBAIAA,EAAA,oBAAA,sBAIAA,EAAA,mBAAA,qBAIAA,EAAA,qBAAA,uBAIAA,EAAA,8BAAA,gCAIAA,EAAA,+BAAA,iCAIAA,EAAA,uBAAA,yBAIAA,EAAA,6BAAA,+BAIAA,EAAA,+BAAA,iCAMAA,EAAA,+BAAA,iCAMAA,EAAA,+BAAA,iCAIAA,EAAA,uBAAA,yBAIAA,EAAA,iCAAA,mCAIAA,EAAA,2BAAA,6BAIAA,EAAA,qCAAA,uCAIAA,EAAA,iBAAA,qBAIAA,EAAA,mBAAA,qBAIAA,EAAA,kBAAA,oBAIAA,EAAA,mBAAA,qBAIAA,EAAA,cAAA,gBAIAA,EAAA,sBAAA,wBAIAA,EAAA,sBAAA,uBACH,CAjRD,CAAYA,KAAAA,GAiRX,CAAA,IAEM,IAAMwM,KAAiBxb,GAAA,CAAA,GACzBgP,GAAiByM,eAAgB,wBAClCzb,GAACgP,GAAiB0M,gBAAiB,wBACnC1b,GAACgP,GAAiB2M,cAAe,wBACjC3b,GAACgP,GAAiB4M,iBAAkB,wBACpC5b,GAACgP,GAAiB6M,YAAa,SAC/B7b,GAACgP,GAAiB8M,gBAAiB,SACnC9b,GAACgP,GAAiB+M,iBAAkB,SACpC/b,GAACgP,GAAiBgN,iBAAkB,SACpChc,GAACgP,GAAiBiN,WAAY,iBAC9Bjc,GAACgP,GAAiBkN,eAAgB,iBAClClc,GAACgP,GAAiBmN,aAAc,iBAChCnc,GAACgP,GAAiBoN,aAAc,iBAChCpc,GAACgP,GAAiBqN,gBAAiB,iBACnCrc,GAACgP,GAAiBsN,aAAc,QAChCtc,GAACgP,GAAiBuN,eAAgB,QAClCvc,GAACgP,GAAiBwN,eAAgB,QAClCxc,GAACgP,GAAiByN,gBAAiB,iBACnCzc,GAACgP,GAAiB0N,kBAAmB,eACrC1c,GAACgP,GAAiB2N,qBAAsB,eACxC3c,GAACgP,GAAiB4N,oBAAqB,eACvC5c,GAACgP,GAAiB6N,sBAAuB,eACzC7c,GAACgP,GAAiB8N,+BAAgC,eAClD9c,GAACgP,GAAiB+N,gCAAiC,eACnD/c,GAACgP,GAAiBgO,wBAAyB,eAC3Chd,GAACgP,GAAiBiO,8BAA+B,0BACjDjd,GAACgP,GAAiBkO,gCAAiC,0BACnDld,GAACgP,GAAiBmO,gCAAiC,0BACnDnd,GAACgP,GAAiBoO,gCAAiC,0BACnDpd,GAACgP,GAAiBqO,oBAAqB,gBACvCrd,GAACgP,GAAiBsO,mBAAoB,2BACtCtd,GAACgP,GAAiBuO,oBAAqB,2BACvCvd,GAACgP,GAAiBwO,uBAAwB,UAC1Cxd,GAAC+O,GAAc0O,gBAAiB,gBS3SpCC,GAAA,WAAA,SAAAA,IA+BI3e,KAAAyQ,QAAU,IAAIxB,GACdjP,KAAgB4e,iBAAG,EACtB,CAAD,OAhCID,EAAAnf,UAAA6R,WAAA,WACI,OAAOlF,QAAQC,WAEnBuS,EAAAnf,UAAA0R,cAAA,WACI,OAAO/E,QAAQC,WAEnBuS,EAAAnf,UAAAqL,UAAA,WACI,OAAOsB,QAAQC,WAEnBuS,EAAAnf,UAAA+T,gBAAA,WACI,OAAOpH,QAAQC,WAEnBuS,EAAAnf,UAAAiU,eAAA,WACI,OAAOtH,QAAQC,WAEnBuS,EAAAnf,UAAAkU,gBAAA,WACI,OAAOvH,QAAQC,WAEnBuS,EAAAnf,UAAAmU,cAAA,WACI,OAAOxH,QAAQC,WAEnBuS,EAAAnf,UAAAoU,SAAA,WACI,OAAOzH,QAAQC,QAAQ,CAACpI,GAAI,GAAI+E,UAAW,MAE/C4V,EAAAnf,UAAAqU,UAAA,WACI,OAAO1H,QAAQC,QAAQ,CAACyS,OAAQ,MAEpCF,EAA2Bnf,UAAAsU,4BAA3B,aACA6K,EAA0Bnf,UAAAuU,2BAA1B,aACA4K,EAAmBnf,UAAAwU,oBAAnB,aAGH2K,CAAD,IC9BA,SAASG,GAAchf,GACnB,IAEMif,EAAgBjf,EAAKvB,KAAK,KAChC,OAAIwgB,EAAcngB,QAHa,IAIpBmgB,EAEJD,GAAchf,EAAK+B,MAAM,GACpC,CAEO,IAAMmd,GAAgC,SAACC,GAC1C,IAAMC,EAjBV,SAA0BD,GACtB,OAAOA,EAAQ3c,KAAI,SAACjF,GAChB,OAAOA,EAAMwB,QAAQ,KAAM,GAC/B,GACJ,CAakCsgB,CAAiBF,GACzCG,EA3BV,SAAyCH,GACrC,IAAII,EAAO,GACX,OAAOJ,EAAQrS,QAAO,SAACvP,GACnB,IAAMiiB,EAAcjiB,IAAUgiB,EAE9B,OADAA,EAAOhiB,EACAiiB,CACX,GACJ,CAoBsCC,CAAgCL,GAElE,OAAOJ,GAAcM,EACzB,EC3BM,SAAUI,GAAsBC,GAClC,IAAMC,EAC6B,iBAAxBD,EAAKC,eACND,EAAKC,eACLV,GAA8BS,EAAKC,gBACvCC,EAC0B,iBAArBF,EAAKE,YAA2BF,EAAKE,YAAcX,GAA8BS,EAAKE,aAEjG,OACO7c,EAAAA,EAAA,CAAA,EAAA2c,GACH,CAAAC,eAAcA,EACdC,eAER,CCqDA,ICnEYC,GAKAC,GAYAC,GDkDZC,GAAA,WAGI,SAAoBA,EAAAnV,EAAgDoV,GAAhDhgB,KAAI4K,KAAJA,EAAgD5K,KAAQggB,SAARA,EAChE,IAAMC,GAAkD,IAAzBrV,EAAKsV,iBAA6B/Q,KACjEnP,KAAKmgB,qBAAuBF,EAAyB,IAAItB,GAAkB,IAAIzO,GAAqBtF,EACvG,CA0wBL,OAxwBWmV,EAAAvgB,UAAA4gB,QAAP,WACQpgB,KAAKmgB,gCAAgCjQ,IACrClQ,KAAKmgB,qBAAqBre,QAG9B9B,KAAKmgB,qBAAuB,IAAIxB,IAG7BoB,EAAAvgB,UAAA6gB,OAAP,WACIrgB,KAAKmgB,qBAAuB,IAAIjQ,GAAqBlQ,KAAK4K,OAGvDmV,EAAAvgB,UAAA8gB,kBAAP,WACI,OAAOtgB,KAAKugB,gBAAgBtQ,GAAiBuQ,gBAG1CT,EAAAvgB,UAAAihB,iBAAP,WACI,OAAOzgB,KAAKsgB,oBAAoBrU,OAG7B8T,EAAAvgB,UAAAkhB,gCAAP,WACI,OAAO1gB,KAAKugB,gBAAgBtQ,GAAiB0Q,8BAG1CZ,EAAAvgB,UAAAohB,+BAAP,WACI,OAAO5gB,KAAK0gB,kCAAkCzU,OAG3C8T,EAAAvgB,UAAAqhB,mBAAP,WACI,OAAO7gB,KAAK8gB,gBAAgB7Q,GAAiByN,iBAG1CqC,EAAAvgB,UAAAuhB,kBAAP,WACI,OAAO/gB,KAAK6gB,qBAAqB5U,OAG9B8T,EAAAvgB,UAAAwhB,uBAAP,SAA8BC,EAAkCC,GAC5D,OAAOlhB,KAAKmhB,eAAelR,GAAiBmR,mBAAoBH,EAAMC,IAGnEnB,EAAAvgB,UAAA6hB,sBAAP,SAA6BJ,EAAkCC,GAC3D,OAAOlhB,KAAKghB,uBAAuBC,EAAMC,GAAYjV,OAGlD8T,EAAwBvgB,UAAA8hB,yBAA/B,SAAgC7B,GAC5B,OAAOzf,KAAKugB,gBAAgBtQ,GAAiBsR,qBAAsB9B,IAGhEM,EAAuBvgB,UAAAgiB,wBAA9B,SAA+B/B,GAC3B,OAAOzf,KAAKshB,yBAAyB7B,GAAMxT,OAGxC8T,EAAsBvgB,UAAAiiB,uBAA7B,SAA8BhC,GAC1B,OAAOzf,KAAKugB,gBAAgBtQ,GAAiByR,mBAAoBjC,IAG9DM,EAAqBvgB,UAAAmiB,sBAA5B,SAA6BlC,GACzB,OAAOzf,KAAKyhB,uBAAuBhC,GAAMxT,OAGtC8T,EAAwBvgB,UAAAoiB,yBAA/B,SAAgCnC,GAC5B,OAAOzf,KAAKugB,gBAAgBtQ,GAAiB4R,qBAAsBpC,IAGhEM,EAAuBvgB,UAAAsiB,wBAA9B,SAA+BrC,GAC3B,OAAOzf,KAAK4hB,yBAAyBnC,GAAMxT,OAGxC8T,EAAAvgB,UAAAuiB,qBAAP,WACI,OAAO/hB,KAAK8gB,gBAAgB7Q,GAAiBqN,eAAgB,CAAC3R,KAAM,oBAGjEoU,EAAAvgB,UAAAwiB,oBAAP,WACI,OAAOhiB,KAAK+hB,uBAAuB9V,OAGhC8T,EAAmBvgB,UAAAyiB,oBAA1B,SAA2BC,GACvB,OAAOliB,KAAKugB,gBAAgBtQ,GAAiBkS,gBAAiBD,IAG3DnC,EAAkBvgB,UAAA4iB,mBAAzB,SAA0BF,GACtB,OAAOliB,KAAKiiB,oBAAoBC,GAAUjW,OAGvC8T,EAAAvgB,UAAA6iB,wBAAP,WACI,OAAOriB,KAAKugB,gBAAgBtQ,GAAiBqS,sBAG1CvC,EAAAvgB,UAAA+iB,uBAAP,WACI,OAAOviB,KAAKqiB,0BAA0BpW,OAGnC8T,EAAAvgB,UAAAgjB,oBAAP,WACI,OAAOxiB,KAAKugB,gBAAgBtQ,GAAiBwS,kBAG1C1C,EAAAvgB,UAAAkjB,mBAAP,WACI,OAAO1iB,KAAKwiB,sBAAsBvW,OAG/B8T,EAAevgB,UAAAmjB,gBAAtB,SAAuBT,GACnB,OAAOliB,KAAKugB,gBAAgBtQ,GAAiB2S,YAAaV,IAGvDnC,EAAcvgB,UAAAqjB,eAArB,SAAsBX,GAClB,OAAOliB,KAAK2iB,gBAAgBT,GAAUjW,OAGnC8T,EAAAvgB,UAAAsjB,oBAAP,WACI,OAAO9iB,KAAKugB,gBAAgBtQ,GAAiB8S,kBAG1ChD,EAAAvgB,UAAAwjB,mBAAP,WACI,OAAOhjB,KAAK8iB,sBAAsB7W,OAG/B8T,EAAAvgB,UAAAyjB,mBAAP,WACI,OAAOjjB,KAAKugB,gBAAgBtQ,GAAiBiT,iBAG1CnD,EAAAvgB,UAAA2jB,kBAAP,WACI,OAAOnjB,KAAKijB,qBAAqBhX,OAG9B8T,EAAAvgB,UAAA4jB,uBAAP,WACI,OAAOpjB,KAAKugB,gBAAgBtQ,GAAiBoT,qBAG1CtD,EAAAvgB,UAAA8jB,sBAAP,WACI,OAAOtjB,KAAKojB,yBAAyBnX,OAGlC8T,EAAmBvgB,UAAA+jB,oBAA1B,SAA2BrB,GACvB,OAAOliB,KAAKugB,gBAAgBtQ,GAAiBuT,gBAAiBtB,IAG3DnC,EAAkBvgB,UAAAikB,mBAAzB,SAA0BvB,GACtB,OAAOliB,KAAKujB,oBAAoBrB,GAAUjW,OAGvC8T,EAAAvgB,UAAAkkB,uBAAP,WACI,OAAO1jB,KAAKugB,gBAAgBtQ,GAAiB0T,qBAG1C5D,EAAAvgB,UAAAokB,sBAAP,WACI,OAAO5jB,KAAK0jB,yBAAyBzX,OAGlC8T,EAAAvgB,UAAAqkB,sBAAP,SAA6B5C,EAAkCC,GAC3D,OAAOlhB,KAAKmhB,eAAelR,GAAiB6T,kBAAmB7C,EAAMC,IAGlEnB,EAAAvgB,UAAAukB,qBAAP,SAA4B9C,EAAkCC,GAC1D,OAAOlhB,KAAK6jB,sBAAsB5C,EAAMC,GAAYjV,OAGjD8T,EAAAvgB,UAAAwkB,iBAAP,SAAwB/C,EAAkCC,GACtD,OAAOlhB,KAAKmhB,eAAelR,GAAiBgU,aAAchD,EAAMC,IAG7DnB,EAAAvgB,UAAA0kB,gBAAP,SAAuBjD,EAAkCC,GACrD,OAAOlhB,KAAKgkB,iBAAiB/C,EAAMC,GAAYjV,OAG5C8T,EAAoBvgB,UAAA2kB,qBAA3B,SAA4B1E,GACxB,OAAOzf,KAAKugB,gBAAgBtQ,GAAiBmU,iBAAkB5E,GAAsBC,KAGlFM,EAAmBvgB,UAAA6kB,oBAA1B,SAA2B5E,GACvB,OAAOzf,KAAKmkB,qBAAqB1E,GAAMxT,OAGpC8T,EAAmBvgB,UAAA8kB,oBAA1B,SAA2B7E,GACvB,OAAOzf,KAAKugB,gBAAgBtQ,GAAiBsU,gBAAiB/E,GAAsBC,KAGjFM,EAAkBvgB,UAAAglB,mBAAzB,SAA0B/E,GACtB,OAAOzf,KAAKskB,oBAAoB7E,GAAMxT,OAGnC8T,EAAAvgB,UAAAilB,mBAAP,WACI,OAAOzkB,KAAKugB,gBAAgBtQ,GAAiByU,iBAG1C3E,EAAAvgB,UAAAmlB,kBAAP,WACI,OAAO3kB,KAAKykB,qBAAqBxY,OAG9B8T,EAAiBvgB,UAAAolB,kBAAxB,SAAyBnF,GACrB,OAAOzf,KAAK8gB,gBAAgB7Q,GAAiByM,cAAe+C,IAGzDM,EAAgBvgB,UAAAqlB,iBAAvB,SAAwBpF,GACpB,OAAOzf,KAAK4kB,kBAAkBnF,GAAMxT,OAGjC8T,EAAkBvgB,UAAAslB,mBAAzB,SAA0BrF,GACtB,OAAOzf,KAAK8gB,gBAAgB7Q,GAAiB0M,eAAgB8C,IAG1DM,EAAiBvgB,UAAAulB,kBAAxB,SAAyBtF,GACrB,OAAOzf,KAAK8kB,mBAAmBrF,GAAMxT,OAGlC8T,EAAAvgB,UAAAwlB,iBAAP,WACI,OAAOhlB,KAAK8gB,gBACR7Q,GAAiB2M,aACjB,CAACqI,MAAOjlB,KAAKggB,SAASkF,+BAA+BC,WACrD,0BAIDpF,EAAAvgB,UAAA4lB,gBAAP,WACI,OAAOplB,KAAKglB,mBAAmB/Y,OAG5B8T,EAAoBvgB,UAAA6lB,qBAA3B,SAA4B5F,GACxB,OAAOzf,KAAKugB,gBAAgBtQ,GAAiBqV,iBAAkB7F,IAG5DM,EAAmBvgB,UAAA+lB,oBAA1B,SAA2B9F,GACvB,OAAOzf,KAAKqlB,qBAAqB5F,GAAMxT,OAGpC8T,EAAmBvgB,UAAAgmB,oBAA1B,SAA2B/F,GACvB,OAAOzf,KAAK8gB,gBAAgB7Q,GAAiB4M,uBACtC4C,GAAI,CACPwF,MAAOjlB,KAAKggB,SAASkF,+BAA+BC,cAIrDpF,EAAkBvgB,UAAAimB,mBAAzB,SAA0BhG,GACtB,OAAOzf,KAAKwlB,oBAAoB/F,GAAMxT,OAGnC8T,EAAevgB,UAAAkmB,gBAAtB,SAAuBjG,GACnB,OAAOzf,KAAK8gB,gBAAgB7Q,GAAiBoN,YAAaoC,IAGvDM,EAAcvgB,UAAAmmB,eAArB,SAAsBlG,GAClB,OAAOzf,KAAK0lB,gBAAgBjG,GAAMxT,OAG/B8T,EAAevgB,UAAAomB,gBAAtB,SAAuBnG,GACnB,OAAOzf,KAAK8gB,gBAAgB7Q,GAAiBmN,YAAaqC,IAGvDM,EAAcvgB,UAAAqmB,eAArB,SAAsBpG,GAClB,OAAOzf,KAAK4lB,gBAAgBnG,GAAMxT,OAG/B8T,EAAavgB,UAAAsmB,cAApB,SAAqBrG,GACjB,OAAOzf,KAAK8gB,gBAAgB7Q,GAAiBiN,UAAWuC,IAGrDM,EAAYvgB,UAAAumB,aAAnB,SAAoBtG,GAChB,OAAOzf,KAAK8lB,cAAcrG,GAAMxT,OAG7B8T,EAAiBvgB,UAAAwmB,kBAAxB,SAAyBvG,GACrB,OAAOzf,KAAK8gB,gBAAgB7Q,GAAiBkN,cAAesC,IAGzDM,EAAgBvgB,UAAAymB,iBAAvB,SAAwBxG,GACpB,OAAOzf,KAAKgmB,kBAAkBvG,GAAMxT,OAGjC8T,EAAAvgB,UAAA0mB,mBAAP,WACI,OAAOlmB,KAAK8gB,gBAAgB7Q,GAAiBqN,iBAG1CyC,EAAAvgB,UAAA2mB,kBAAP,WACI,OAAOnmB,KAAKkmB,qBAAqBja,OAG9B8T,EAAiBvgB,UAAA4mB,kBAAxB,SAAyB3G,GACrB,OAAOzf,KAAKugB,gBAAgBtQ,GAAiBoW,cAAe5G,IAGzDM,EAAgBvgB,UAAA8mB,iBAAvB,SAAwB7G,GACpB,OAAOzf,KAAKomB,kBAAkB3G,GAAMxT,OAGjC8T,EAAevgB,UAAA+mB,gBAAtB,SAAuB9G,GACnB,OAAOzf,KAAKugB,gBAAgBtQ,GAAiBsN,YAAakC,IAGvDM,EAAcvgB,UAAAgnB,eAArB,SAAsB/G,GAClB,OAAOzf,KAAKumB,gBAAgB9G,GAAMxT,OAG/B8T,EAAevgB,UAAAinB,gBAAtB,SAAuBhH,GACnB,OAAOzf,KAAKugB,gBAAgBtQ,GAAiByW,YAAajH,IAGvDM,EAAcvgB,UAAAmnB,eAArB,SAAsBlH,GAClB,OAAOzf,KAAKymB,gBAAgBhH,GAAMxT,OAG/B8T,EAAiBvgB,UAAAonB,kBAAxB,SAAyBnH,GACrB,OAAOzf,KAAKugB,gBAAgBtQ,GAAiB4W,cAAepH,IAGzDM,EAAgBvgB,UAAAsnB,iBAAvB,SAAwBrH,GACpB,OAAOzf,KAAK4mB,kBAAkBnH,GAAMxT,OAGjC8T,EAAgBvgB,UAAAunB,iBAAvB,SAAwBtH,GACpB,OAAOzf,KAAKugB,gBAAgBtQ,GAAiB+W,aAAcvH,IAGxDM,EAAevgB,UAAAynB,gBAAtB,SAAuBxH,GACnB,OAAOzf,KAAK+mB,iBAAiBtH,GAAMxT,OAGhC8T,EAAkBvgB,UAAA0nB,mBAAzB,SAA0BzH,GACtB,OAAOzf,KAAKugB,gBAAgBtQ,GAAiBkX,eAAgB1H,IAG1DM,EAAiBvgB,UAAA4nB,kBAAxB,SAAyB3H,GACrB,OAAOzf,KAAKknB,mBAAmBzH,GAAMxT,OAGlC8T,EAAkBvgB,UAAA6nB,mBAAzB,SAA0B5H,GACtB,OAAOzf,KAAKugB,gBAAgBtQ,GAAiBqX,eAAgB7H,IAG1DM,EAAiBvgB,UAAA+nB,kBAAxB,SAAyB9H,GACrB,OAAOzf,KAAKqnB,mBAAmB5H,GAAMxT,OAGlC8T,EAAmBvgB,UAAAgoB,oBAA1B,SAA2B/H,GACvB,OAAOzf,KAAKugB,gBAAgBtQ,GAAiBwX,gBAAiBhI,IAG3DM,EAAkBvgB,UAAAkoB,mBAAzB,SAA0BjI,GACtB,OAAOzf,KAAKwnB,oBAAoB/H,GAAMxT,OAGnC8T,EAAiBvgB,UAAAmoB,kBAAxB,SAAyBlI,GACrB,OAAOzf,KAAK8gB,gBAAgB7Q,GAAiBwN,cAAegC,IAGzDM,EAAgBvgB,UAAAooB,iBAAvB,SAAwBnI,GACpB,OAAOzf,KAAK2nB,kBAAkBlI,GAAMxT,OAGjC8T,EAAiBvgB,UAAAqoB,kBAAxB,SAAyBpI,GACrB,OAAOzf,KAAK8gB,gBAAgB7Q,GAAiBuN,cAAeiC,IAGzDM,EAAgBvgB,UAAAsoB,iBAAvB,SAAwBrI,GACpB,OAAOzf,KAAK6nB,kBAAkBpI,GAAMxT,OAGjC8T,EAAcvgB,UAAAuoB,eAArB,SAAsBtI,GAClB,OAAOzf,KAAK8gB,gBAAgB7Q,GAAiB6M,WAAY2C,IAGtDM,EAAavgB,UAAAwoB,cAApB,SAAqBvI,GACjB,OAAOzf,KAAK+nB,eAAetI,GAAMxT,OAG9B8T,EAAAvgB,UAAAyoB,mBAAP,WAAA,IAQCxlB,EAAAzC,KAPG,MAAO,CACHkE,YAAalE,KAAKkoB,gBAAgBjY,GAAiB8M,gBACnD9Q,IAAK,WAAA,OAAAtJ,EAAAF,OAAA,OAAA,GAAA,6DACD,MAAM,CAAA,EAAAzC,KAAKmoB,eAAelY,GAAiB8M,wBAC3C,OADA9b,EAAAC,OACO,CAAA,EAAAlB,KAAKooB,eAAenY,GAAiB8M,oBAC/C,GAAA,IAIFgD,EAAAvgB,UAAA6oB,kBAAP,WACI,OAAOroB,KAAKioB,qBAAqBhc,OAG9B8T,EAAAvgB,UAAA8oB,oBAAP,WAAA,IAQC7lB,EAAAzC,KAPG,MAAO,CACHkE,YAAalE,KAAKkoB,gBAAgBjY,GAAiBgN,iBACnDhR,IAAK,WAAA,OAAAtJ,EAAAF,OAAA,OAAA,GAAA,6DACD,MAAM,CAAA,EAAAzC,KAAKmoB,eAAelY,GAAiBgN,yBAC3C,OADAhc,EAAAC,OACO,CAAA,EAAAlB,KAAKooB,eAAenY,GAAiBgN,qBAC/C,GAAA,IAIF8C,EAAAvgB,UAAA+oB,mBAAP,WACI,OAAOvoB,KAAKsoB,sBAAsBrc,OAG/B8T,EAAAvgB,UAAAgpB,oBAAP,WAAA,IAQC/lB,EAAAzC,KAPG,MAAO,CACHkE,YAAalE,KAAKkoB,gBAAgBjY,GAAiB+M,iBACnD/Q,IAAK,WAAA,OAAAtJ,EAAAF,OAAA,OAAA,GAAA,6DACD,MAAM,CAAA,EAAAzC,KAAKmoB,eAAelY,GAAiB+M,yBAC3C,OADA/b,EAAAC,OACO,CAAA,EAAAlB,KAAKooB,eAAenY,GAAiB+M,qBAC/C,GAAA,IAIF+C,EAAAvgB,UAAAipB,mBAAP,WACI,OAAOzoB,KAAKwoB,sBAAsBvc,OAG/B8T,EAAAvgB,UAAAkpB,qBAAP,WACI,OAAO1oB,KAAK8gB,gBAAgB7Q,GAAiB0N,mBAG1CoC,EAAAvgB,UAAAmpB,oBAAP,WACI,OAAO3oB,KAAK0oB,uBAAuBzc,OAGhC8T,EAAAvgB,UAAAopB,wBAAP,WACI,OAAO5oB,KAAK8gB,gBAAgB7Q,GAAiB2N,sBAG1CmC,EAAAvgB,UAAAqpB,uBAAP,WACI,OAAO7oB,KAAK4oB,0BAA0B3c,OAGnC8T,EAAAvgB,UAAAspB,uBAAP,WACI,OAAO9oB,KAAK8gB,gBAAgB7Q,GAAiB4N,qBAG1CkC,EAAAvgB,UAAAupB,sBAAP,WACI,OAAO/oB,KAAK8oB,yBAAyB7c,OAGlC8T,EAAAvgB,UAAAwpB,yBAAP,WACI,OAAOhpB,KAAK8gB,gBAAgB7Q,GAAiB6N,uBAG1CiC,EAAAvgB,UAAAypB,wBAAP,WACI,OAAOjpB,KAAKgpB,2BAA2B/c,OAGpC8T,EAAAvgB,UAAA0pB,kCAAP,WACI,OAAOlpB,KAAK8gB,gBAAgB7Q,GAAiB8N,gCAG1CgC,EAAAvgB,UAAA2pB,iCAAP,WACI,OAAOnpB,KAAKkpB,oCAAoCjd,OAG7C8T,EAAAvgB,UAAA4pB,mCAAP,WACI,OAAOppB,KAAK8gB,gBAAgB7Q,GAAiB+N,iCAG1C+B,EAAAvgB,UAAA6pB,kCAAP,WACI,OAAOrpB,KAAKopB,qCAAqCnd,OAG9C8T,EAAAvgB,UAAA8pB,+BAAP,SAAsCC,EAAoCvqB,GACtE,OAAOgB,KAAK8gB,gBAAgB7Q,GAAiBgO,uBAAwB,CAACsL,SAAQvqB,QAAOA,KAGlF+gB,EAAAvgB,UAAAgqB,8BAAP,SAAqCD,EAAoCvqB,GACrE,OAAOgB,KAAKspB,+BAA+BC,EAAQvqB,GAASiN,OAGzD8T,EAAgCvgB,UAAAiqB,iCAAvC,SAAwCC,GACpC,OAAO1pB,KAAK8gB,gBACR7Q,GAAiBiO,6BACjB,eAAgBwL,EAAUA,EAAU,CAACC,WAAYD,KAIlD3J,EAA+BvgB,UAAAoqB,gCAAtC,SAAuCF,GACnC,OAAO1pB,KAAKypB,iCAAiCC,GAASzd,OAGnD8T,EAAkCvgB,UAAAqqB,mCAAzC,SAA0CH,GACtC,OAAO1pB,KAAK8gB,gBACR7Q,GAAiBkO,+BACjB,eAAgBuL,EAAUA,EAAU,CAACC,WAAYD,KAIlD3J,EAAiCvgB,UAAAsqB,kCAAxC,SAAyCJ,GACrC,OAAO1pB,KAAK6pB,mCAAmCH,GAASzd,OAMpD8T,EAAkCvgB,UAAAuqB,mCAA1C,SAA2CL,GACvC,OAAO1pB,KAAK8gB,gBAAgB7Q,GAAiBmO,+BAAgCsL,IAM1E3J,EAAiCvgB,UAAAwqB,kCAAxC,SAAyCN,GACrC,OAAO1pB,KAAK+pB,mCAAmCL,GAASzd,OAMpD8T,EAAkCvgB,UAAAyqB,mCAA1C,SAA2CP,GACvC,OAAO1pB,KAAK8gB,gBAAgB7Q,GAAiBoO,+BAAgCqL,IAM1E3J,EAAiCvgB,UAAA0qB,kCAAxC,SAAyCR,GACrC,OAAO1pB,KAAKiqB,mCAAmCP,GAASzd,OAGrD8T,EAAAvgB,UAAA2qB,2BAAP,SAAkClJ,EAAkCC,GAChE,OAAOlhB,KAAKmhB,eAAelR,GAAiBma,uBAAwBnJ,EAAMC,IAGvEnB,EAAAvgB,UAAA6qB,0BAAP,SAAiCpJ,EAAkCC,GAC/D,OAAOlhB,KAAKmqB,2BAA2BlJ,EAAMC,GAAYjV,OAGtD8T,EAAAvgB,UAAA8qB,qCAAP,SAA4CrJ,EAAkCyI,GAC1E,OAAO1pB,KAAKmhB,eACRlR,GAAiBsa,iCACjBtJ,EACA,CAACuJ,aAAcd,EAAQC,WAAWc,aAAcC,eAAgBhB,EAAQC,WAAW9mB,gBACnF6mB,IAID3J,EAAAvgB,UAAAmrB,oCAAP,SAA2C1J,EAAkCyI,GACzE,OAAO1pB,KAAKsqB,qCAAqCrJ,EAAMyI,GAASzd,OAG7D8T,EAAAvgB,UAAAorB,+BAAP,SACI3J,EACA4J,GAEA,OAAO7qB,KAAKmhB,eACRlR,GAAiB6a,2BACjB7J,EACA,CAACuJ,aAAcK,EAAkBL,aAAcE,eAAgBG,EAAkBH,gBACjFG,IAID9K,EAAAvgB,UAAAurB,8BAAP,SACI9J,EACA4J,GAEA,OAAO7qB,KAAK4qB,+BAA+B3J,EAAM4J,GAAmB5e,OAGjE8T,EAAAvgB,UAAAwrB,yCAAP,SACI/J,EACAgK,GAEA,OAAOjrB,KAAKmhB,eACRlR,GAAiBib,qCACjBjK,EACA,CACIuJ,aAAcS,EAAetB,WAAWc,aACxCC,eAAgBO,EAAetB,WAAW9mB,gBAE9CooB,IAIDlL,EAAAvgB,UAAA2rB,wCAAP,SACIlK,EACAgK,GAEA,OAAOjrB,KAAKgrB,yCAAyC/J,EAAMgK,GAAgBhf,OAGxE8T,EAAAvgB,UAAA4rB,qBAAP,WACI,OAAOprB,KAAKugB,gBAAgBtQ,GAAiBob,mBAG1CtL,EAAAvgB,UAAA8rB,oBAAP,WACI,OAAOtrB,KAAKorB,uBAAuBnf,OAGhC8T,EAAAvgB,UAAA+rB,uBAAP,WACI,OAAOvrB,KAAK8gB,gBAAgB7Q,GAAiBqO,qBAG1CyB,EAAAvgB,UAAAgsB,sBAAP,WACI,OAAOxrB,KAAKurB,yBAAyBtf,OAGlC8T,EAAAvgB,UAAAisB,sBAAP,SAA6BxK,EAAkCC,GAC3D,OAAOlhB,KAAK8gB,gBAAgB7Q,GAAiBsO,kBAAmB,CAAC0C,OAAMC,WAAUA,KAG9EnB,EAAAvgB,UAAAksB,qBAAP,SAA4BzK,EAAkCC,GAC1D,OAAOlhB,KAAKyrB,sBAAsBxK,EAAMC,GAAYjV,OAGjD8T,EAAAvgB,UAAAmsB,uBAAP,WACI,OAAO3rB,KAAK8gB,gBAAgB7Q,GAAiBuO,qBAG1CuB,EAAAvgB,UAAAosB,sBAAP,WACI,OAAO5rB,KAAK2rB,yBAAyB1f,OAGlC8T,EAAAvgB,UAAAqsB,kBAAP,WACI,OAAO7rB,KAAKugB,gBAAgBtQ,GAAiB6b,gBAG1C/L,EAAAvgB,UAAAusB,iBAAP,WACI,OAAO/rB,KAAK6rB,oBAAoB5f,OAG7B8T,EAAAvgB,UAAAwsB,0BAAP,SAAiC/K,EAAkCC,GAC/D,OAAOlhB,KAAKmhB,eAAelR,GAAiBgc,sBAAuBhL,EAAMC,IAGtEnB,EAAAvgB,UAAA0sB,yBAAP,SAAgCjL,EAAkCC,GAC9D,OAAOlhB,KAAKgsB,0BAA0B/K,EAAMC,GAAYjV,OAGrD8T,EAAAvgB,UAAA2sB,0BAAP,WACI,OAAOnsB,KAAK8gB,gBAAgB7Q,GAAiBwO,wBAG1CsB,EAAAvgB,UAAA4sB,yBAAP,WACI,OAAOpsB,KAAKmsB,4BAA4BlgB,OAGrC8T,EAAAvgB,UAAAshB,gBAAP,SACI1L,EACA8M,EACAvlB,GAHJ,IAkBC8F,EAAAzC,UAfG,IAAArD,IAAAA,EAAoB8f,GAAkBrH,IAEtC,IAAM5K,EAAiB1H,EAAAA,EAAA,CAAA,EAAA9C,KAAKggB,SAASqM,mBAAsBnK,GAC3D,MAAO,CACHhe,YAAalE,KAAKkoB,gBAAgB9S,EAAO8M,GACzCjW,IAAK,WAAA,OAAAtJ,EAAAF,OAAA,OAAA,GAAA,qEAEO,cAAA,CAAA,EAAMzC,KAAKssB,0BAA0B9hB,WAK7C,OANM5N,EAAOkG,EAAAgJ,WAAA,EAAA,CAAAhJ,EAAAgJ,WAAA,EAAA7K,EAAAH,OAAA,CACL+K,EAAA3K,UAAiD,CACrDvE,UAASA,EACTkM,WAAYuM,KAGT,CAAA,EAAApV,KAAKmgB,qBAAqBzM,gBAAgB9W,OACpD,GAAA,IAIFmjB,EAAAvgB,UAAA2oB,eAAP,SACI/S,EACA8M,EACAvlB,GAEA,YAFA,IAAAA,IAAAA,EAAoB8f,GAAkBrH,IAE/BpV,KAAK8gB,gBAAgB1L,EAAO8M,EAAUvlB,GAAWsP,OAGrD8T,EAAAvgB,UAAA+sB,wBAAP,SAA+B1jB,EAAoBlM,EAAmBulB,GAAtE,IAaCzf,EAAAzC,KAZSwK,EAAiB1H,EAAAA,EAAA,CAAA,EAAA9C,KAAKggB,SAASqM,mBAAsBnK,GAC3D,MAAO,CACHhe,YAA+B,CAACsoB,YAAa3jB,EAAY2B,cACzDyB,IAAK,WAAA,OAAAtJ,EAAAF,OAAA,OAAA,GAAA,qEAEO,cAAA,CAAA,EAAMzC,KAAKssB,0BAA0B9hB,WAI7C,OALM5N,2CACEiP,EAAA3K,UAAiD,CACrDvE,UAASA,EACTkM,gBAEG,CAAA,EAAA7I,KAAKmgB,qBAAqBzM,gBAAgB9W,OACpD,GAAA,IAIFmjB,EAAAvgB,UAAAitB,uBAAP,SAA8B5jB,EAAoBlM,EAAmBulB,GACjE,OAAOliB,KAAKusB,wBAAwB1jB,EAAYlM,EAAWulB,GAAUjW,OAG5D8T,EAAAvgB,UAAA4oB,eAAb,SAA4BhT,EAAyB8M,qGACA,OAA1CrW,GAAA5K,EAAAjB,KAAKmgB,sBAAqB5M,gBAAsB,CAAA,EAAAvT,KAAK0sB,0BAA0BtX,EAAO8M,WAA7F,MAAO,CAAA,EAAArW,EAAAC,MAAA7K,EAAA,CAA0C8K,EAAqD7K,gBACzG,EAEO6e,EAAAvgB,UAAA0oB,gBAAR,SAAwBsE,EAA+BtK,GACnD,MAAO,CAACsK,YAAWA,EAAEhiB,kBAAgBxK,KAAKggB,SAASqM,mBAAsBnK,KAGtEnC,EAAAvgB,UAAA+gB,gBAAP,SAAuBnL,EAAyB8M,GAAhD,IAKCzf,EAAAzC,KAJG,MAAO,CACHkE,YAAalE,KAAKkoB,gBAAgB9S,EAAO8M,GACzCjW,IAAK,WAAM,OAAAxJ,EAAK2lB,eAAehT,EAAO8M,EAAS,IAI1CnC,EAAavgB,UAAAmtB,cAA1B,SACIvX,EACA6L,EACAC,EACAgB,qGAIQ,eADDjB,IACO,CAAA,EAAAjhB,KAAK4sB,oBAAmB9pB,EAAAA,EAAA,CAAA,EAAKoe,GAAegB,YAM1D,OARMtlB,EAAOkG,EAAAgJ,WAAA,EAAA,CAAAhJ,EAAAgJ,WAAA,EAAA7K,EAAAH,OAAA,CAEL+K,EAAA3K,UAA6D,CACjE2rB,eAAgB7sB,KAAKggB,SAAS8M,eAC9BC,cAAe/sB,KAAKggB,SAASgN,cAC7BR,YAAapX,KAGV,CAAA,EAAApV,KAAKmgB,qBAAqB1M,eAAe7W,UACnD,EAEMmjB,EAAcvgB,UAAA2hB,eAArB,SACI/L,EACA6L,EACAC,EACAgB,GAJJ,IAUCzf,EAAAzC,KAJG,MAAO,CACHkE,YAAalE,KAAKkoB,gBAAgB9S,EAAWtS,EAAAA,EAAA,GAAAoe,GAAegB,IAC5DjW,IAAK,WAAM,OAAAxJ,EAAKkqB,cAAcvX,EAAO6L,EAAMC,EAAYgB,EAAS,IAI1DnC,EAAAvgB,UAAAktB,0BAAd,SACItX,EACA8M,mGAGQ,cAAA,CAAA,EAAMliB,KAAK4sB,oBAAoB1K,IADvC,KAAA,EAAA,MAAA,CAAA,EAAApf,EAAAgJ,WAAA,EAAA,CAAAhJ,EAAAgJ,WAAA,EAAA,CAAAhJ,EAAAgJ,WAAA,EAAA7K,EAAAH,OAAA,CACQ+K,EAAA3K,UACDlB,KAAKggB,SAASkF,iCAA8B,CAC/C2H,eAAgB7sB,KAAKggB,SAAS8M,eAC9BC,cAAe/sB,KAAKggB,SAASgN,cAC7BR,YAAapX,YAEpB,EAEa2K,EAAyBvgB,UAAA8sB,0BAAvC,SAAwCpK,mGAE5B,cAAA,CAAA,EAAMliB,KAAK4sB,oBAAoB1K,IADvC,KAAA,EAAA,MAAA,CAAA,EAAApf,EAAAgJ,WAAA,EAAA,CAAAhJ,EAAAgJ,WAAA,EAAA7K,EAAAH,OAAA,CACQ+K,EAAA3K,UAAyC,CAC7C+rB,mBAAoBjtB,KAAKggB,SAAS8M,yBAEzC,EAEa/M,EAAmBvgB,UAAAotB,oBAAjC,SAAkC1K,uGAShB,OARR1X,EAAU1H,EAAAA,EAAA,GAAO9C,KAAKggB,SAASqM,mBAAsBnK,GAEpDjhB,EAAA,CAAA6B,EAAAA,EAAA,GAAA9C,KAAKktB,cACLltB,KAAKmtB,oBACRthB,EAAA,CAAArB,aACA1N,SAAUkD,KAAKggB,SAASoN,cACxBC,WAAYrtB,KAAKggB,SAASsN,cAAgBttB,KAAKggB,SAASsN,gBAAkB,GAC1EC,UAAWvtB,KAAKggB,SAASwN,kBACf,CAAA,EAAMxtB,KAAKytB,sBAPzB,MAOI,CAAA,EAAA3qB,EAAAgJ,WAAA,EAAA7K,EAAAH,OAAA,EAAA+K,EAAA7C,SAAU+C,EAAA7K,OACZ2K,aACL,EAEOkU,EAAAvgB,UAAA0tB,WAAR,mBACI,MAAO,CACHQ,cAAiD,WAAlCzsB,EAAAjB,KAAKggB,UAAS2N,wBAAoB,IAAA9hB,OAAA,EAAAA,EAAAuL,KAAAnW,GACjD2sB,aAAc5tB,KAAKggB,SAAS6N,kBAC5BC,aAAc9tB,KAAKggB,SAAS+N,kBAC5BC,aAAchuB,KAAKggB,SAASiO,oBAI5BlO,EAAAvgB,UAAAiuB,YAAR,WACI,OAAOztB,KAAKmgB,gCAAgCjQ,GACtClQ,KAAKmgB,qBAAqBxT,2BAC1BzC,GAGF6V,EAAAvgB,UAAA2tB,gBAAR,WACI,IAAMe,EAAmBluB,KAAKggB,SAASmO,oBAAsBnuB,KAAKggB,SAASmO,sBAAwB,GAC7FC,EAAsBpuB,KAAKggB,SAASqO,uBAAyBruB,KAAKggB,SAASqO,yBAA2B,GAC5G,OAAAvrB,EAAAA,EAAA,GACQorB,GAAoB,CAACA,qBACrBE,GAAuB,CAACA,oBAAmBA,KAG1DrO,CAAD,KCn1BA,SAAYH,GACRA,EAAA,MAAA,QACAA,EAAA,UAAA,WACH,CAHD,CAAYA,KAAAA,GAGX,CAAA,IAED,SAAYC,GACRA,EAAA,eAAA,sBACAA,EAAA,YAAA,sBACAA,EAAA,qBAAA,8BACAA,EAAA,gBAAA,mBACAA,EAAA,eAAA,kBACAA,EAAA,aAAA,oBACAA,EAAA,cAAA,gBACAA,EAAA,WAAA,gBACAA,EAAA,YAAA,eACH,CAVD,CAAYA,KAAAA,GAUX,CAAA,IAED,SAAYC,GACRA,EAAA,KAAA,OACAA,EAAA,OAAA,QACH,CAHD,CAAYA,KAAAA,GAGX,CAAA,ICKD,IAAAwO,GAAA,WAII,SAAoBA,EAAAne,EAAmD6P,SAAnDhgB,KAAOmQ,QAAPA,EAAmDnQ,KAAQggB,SAARA,EACnE,IAAMuO,GAA+C,QAA3BttB,EAAAkP,EAAQ+P,uBAAmB,IAAAjf,GAAAA,KAAUkO,KAE/DnP,KAAKmgB,qBAAuBoO,EAAmB,IAAIre,GAAqBC,GAAW,IAAIwO,GACvF3e,KAAKwuB,IAAM,IAAIhV,GAAU,CAAC7K,OAAQ3O,KAAKmgB,sBAC1C,CAyGL,OAvGWmO,EAAA9uB,UAAA4gB,QAAP,WACQpgB,KAAKmgB,gCAAgCjQ,IACrClQ,KAAKmgB,qBAAqBre,QAE9B9B,KAAKmgB,qBAAuB,IAAIxB,GAChC3e,KAAKwuB,IAAM,IAAIhV,GAAU,CAAC7K,OAAQ3O,KAAKmgB,wBAGpCmO,EAAA9uB,UAAA6gB,OAAP,WACIrgB,KAAKmgB,qBAAuB,IAAIjQ,GAAqBlQ,KAAKmQ,SAC1DnQ,KAAKwuB,IAAM,IAAIhV,GAAU,CAAC7K,OAAQ3O,KAAKmgB,wBAGpCmO,EAAiB9uB,UAAAivB,kBAAxB,SAAyBhP,GAGrB,OAFAzf,KAAKwuB,IAAI5Y,UAAUiK,GAAkB6O,gBACrC1uB,KAAKwuB,IAAI7U,UAAU8F,EAAKhG,QACjBzZ,KAAK2uB,sBAGTL,EAAkB9uB,UAAAovB,mBAAzB,SAA0BnP,GAKtB,OAJAzf,KAAKwuB,IAAI5Y,UAAUiK,GAAkBgP,YAAa,CAC9CC,UAAWrP,EAAKqP,YAEpB9uB,KAAKwuB,IAAI7U,UAAU8F,EAAKhG,QACjBzZ,KAAKyT,kBAGT6a,EAAwB9uB,UAAAuvB,yBAA/B,SAAgCtP,GAG5B,OAFAzf,KAAKwuB,IAAI5Y,UAAUiK,GAAkBmP,qBAAsBvP,EAAKwP,YAChEjvB,KAAKwuB,IAAI7U,UAAU8F,EAAKhG,QACjBzZ,KAAKyT,kBAGT6a,EAA2B9uB,UAAA0vB,4BAAlC,SAAmCzP,GAG/B,OAFAzf,KAAKwuB,IAAI5Y,UAAUiK,GAAkBsP,gBAAiB1P,EAAKwP,YAC3DjvB,KAAKwuB,IAAI7U,UAAU8F,EAAKhG,QACjBzZ,KAAKyT,kBAGT6a,EAAyB9uB,UAAA4vB,0BAAhC,SAAiC3P,GAM7B,OALAzf,KAAKwuB,IAAI5Y,UAAUiK,GAAkBwP,eAAcvsB,EAAA,CAC/CwsB,KAAM7P,EAAKxZ,QACRwZ,EAAKwP,aAEZjvB,KAAKwuB,IAAI7U,UAAU8F,EAAKhG,QACjBzZ,KAAKyT,kBAGT6a,EAAqB9uB,UAAA+vB,sBAA5B,SAA6B9P,GAKzB,OAJAzf,KAAKwuB,IAAI5Y,UAAUiK,GAAkB2P,aAAc,CAC/CC,MAAOhQ,aAAA,EAAAA,EAAMgQ,QAEjBzvB,KAAKwuB,IAAI7U,UAAU8F,EAAKhG,QACjBzZ,KAAKyT,kBAGT6a,EAAgB9uB,UAAAkwB,iBAAvB,SAAwBjQ,GAKpB,OAJAzf,KAAKwuB,IAAI5Y,UAAUiK,GAAkB8P,cAAe,CAChDpG,OAAQzJ,GAAqB8P,OAEjC5vB,KAAKwuB,IAAI7U,UAAU8F,EAAKhG,QACjBzZ,KAAKyT,kBAGT6a,EAAa9uB,UAAAqwB,cAApB,SAAqBpQ,GAKjB,OAJAzf,KAAKwuB,IAAI5Y,UAAUiK,GAAkBiQ,WAAY,CAC7CvG,OAAQzJ,GAAqBiQ,SAEjC/vB,KAAKwuB,IAAI7U,UAAU8F,EAAKhG,QACjBzZ,KAAKyT,kBAGT6a,EAAc9uB,UAAAwwB,eAArB,SAAsBvQ,GAGlB,OAFAzf,KAAKwuB,IAAI5Y,UAAUiK,GAAkBoQ,aACrCjwB,KAAKwuB,IAAI7U,UAAU8F,EAAKhG,QACjBzZ,KAAKyT,kBAGR6a,EAAA9uB,UAAAmvB,mBAAR,WACI,OAAO3uB,KAAKmgB,qBAAqBtV,UAC7B,QACA,MACA+U,GAAiBsQ,UACjBlwB,KAAKggB,SACC,CACImQ,UAAWnwB,KAAKggB,SAAS6N,mBAE7B,OAINS,EAAA9uB,UAAAiU,eAAR,WACI,OAAOzT,KAAKmgB,qBAAqBtV,UAC7B,QACA,MACA+U,GAAiBtjB,MACjB0D,KAAKggB,SACC,CACImQ,UAAWnwB,KAAKggB,SAAS6N,mBAE7B,OAGjBS,CAAD,IClFM8B,GAAyB,SAAClO,EAAwBmO,QAAA,IAAAA,IAAAA,GAAqB,GACJnO,EAAQoO,gBAAzDC,EAAiDrO,EAA3CqO,OAAEC,EAAyCtO,aAA1BuO,IAA0BvO,EAA/D,CAA4D,cAAA,SAAA,eAC5DwO,EAhByB,SAACjR,GAChC,IAAMiR,EAAkC,CAAA,EAUxC,OATIjR,EAAK6Q,aACLzsB,OAAOC,KAAK2b,EAAK6Q,aAAa/U,SAAQ,SAACoV,SAC7BtzB,EAA2B,UAAnBoiB,EAAK6Q,mBAAc,IAAArvB,OAAA,EAAAA,EAAA0vB,GAC7BtzB,IAEAqzB,EADoB,WAAWC,GACRtzB,EAE/B,IAEGqzB,CACX,CAIoBE,CAA2B1O,GAE3C,OAAApf,EAAAA,EAAAA,EAAA,CACI+tB,OAAQN,EACRO,WAAYN,GACTC,KACGC,EAAQK,sBAAwB,CAACC,YAAaN,EAAQK,uBACxDV,GAAkBK,EAE9B,EAEAO,GAAA,WAGI,SAAoBA,EAAArmB,EAA6CoV,GAA7ChgB,KAAI4K,KAAJA,EAA6C5K,KAAQggB,SAARA,EAC7D,IAAMC,GAAkD,IAAzBrV,EAAKsV,iBAA6B/Q,KACjEnP,KAAKmgB,qBAAuBF,EAAyB,IAAItB,GAAkB,IAAIzO,GAAqBtF,EACvG,CAsOL,OApOWqmB,EAAAzxB,UAAA4gB,QAAP,WACQpgB,KAAKmgB,gCAAgCjQ,IACrClQ,KAAKmgB,qBAAqBre,QAE9B9B,KAAKmgB,qBAAuB,IAAIxB,IAG7BsS,EAAAzxB,UAAA6gB,OAAP,WACIrgB,KAAKmgB,qBAAuB,IAAIjQ,GAAqBlQ,KAAK4K,OAGvDqmB,EAAgBzxB,UAAAihB,iBAAvB,SAAwByB,GACpB,GAAIA,EAAU,CACV,IAAMgP,EAAiBd,GAAuBlO,GAC9C,OAAOliB,KAAKooB,eAAenY,GAAiBuQ,cAAe0Q,EAC9D,CACD,OAAOlxB,KAAKooB,eAAenY,GAAiBuQ,gBAGzCyQ,EAAkBzxB,UAAA4iB,mBAAzB,SAA0BF,GACtB,IAAMgP,EAAiBd,GAAuBlO,GAC9C,OAAOliB,KAAKooB,eAAenY,GAAiBkS,gBAAiB+O,IAG1DD,EAAuBzxB,UAAAsiB,wBAA9B,SAA+BI,GAC3B,IAAMgP,EAAiBd,GAAuBlO,GAC9C,OAAOliB,KAAKooB,eAAenY,GAAiB4R,qBAAsBqP,IAG/DD,EAAmBzxB,UAAAwiB,oBAA1B,SAA2BE,GACvB,GAAIA,EAAU,CACV,IAAMgP,EAAiBd,GAAuBlO,GAC9C,OAAOliB,KAAKmoB,eAAelY,GAAiBqN,eAAoBxa,EAAAA,EAAA,CAAA,EAAAouB,GAAgB,CAAAvlB,KAAM,mBACzF,CACD,OAAO3L,KAAKmoB,eAAelY,GAAiBqN,eAAgB,CAAC3R,KAAM,oBAGhEslB,EAAkBzxB,UAAAikB,mBAAzB,SACIvB,GAEA,IAAMgP,EAAiBd,GAAuBlO,GAC9C,OAAOliB,KAAKooB,eAAenY,GAAiBuT,gBAAiB0N,IAG1DD,EAAqBzxB,UAAAokB,sBAA5B,SAA6B1B,GACzB,GAAIA,EAAU,CACV,IAAMgP,EAAiBd,GAAuBlO,GAC9C,OAAOliB,KAAKooB,eAAenY,GAAiB0T,mBAAoBuN,EACnE,CACD,OAAOlxB,KAAKooB,eAAenY,GAAiB0T,qBAGzCsN,EAAczxB,UAAAmnB,eAArB,SAAsBzE,GAClB,IAAMgP,EAAiBd,GAAuBlO,GAC9C,OAAOliB,KAAKooB,eAAenY,GAAiByW,YAAawK,IAGtDD,EAAgBzxB,UAAAsnB,iBAAvB,SAAwB5E,GACpB,IAAMgP,EAAiBd,GAAuBlO,GAC9C,OAAOliB,KAAKooB,eAAenY,GAAiB4W,cAAeqK,IAGxDD,EAAkBzxB,UAAAkoB,mBAAzB,SAA0BxF,GACtB,IAAMgP,EAAiBd,GAAuBlO,GAC9C,OAAOliB,KAAKooB,eAAenY,GAAiBwX,gBAAiByJ,IAG1DD,EAAgBzxB,UAAA8mB,iBAAvB,SAAwBpE,GACpB,IAAMgP,EAAiBd,GAAuBlO,GAC9C,OAAOliB,KAAKooB,eAAenY,GAAiBoW,cAAe6K,IAGxDD,EAAgBzxB,UAAAooB,iBAAvB,SAAwB1F,GACpB,IAAMgP,EAAiBd,GAAuBlO,GAAU,GACxD,OAAOliB,KAAKmoB,eAAelY,GAAiBwN,cAAeyT,IAGxDD,EAAgBzxB,UAAAsoB,iBAAvB,SAAwB5F,GACpB,IAAMgP,EAAiBd,GAAuBlO,GAAU,GACxD,OAAOliB,KAAKmoB,eAAelY,GAAiBuN,cAAe0T,IAGxDD,EAAazxB,UAAAwoB,cAApB,SAAqB9F,GACjB,IAAMgP,EAAiBd,GAAuBlO,GAAU,GACxD,OAAOliB,KAAKmoB,eAAelY,GAAiB6M,WAAYoU,IAGrDD,EAAczxB,UAAAqmB,eAArB,SAAsB3D,GAClB,IAAMgP,EAAiBd,GAAuBlO,GAAU,GACxD,OAAOliB,KAAKmoB,eAAelY,GAAiBmN,YAAa8T,IAGtDD,EAAYzxB,UAAAumB,aAAnB,SAAoB7D,GAChB,IAAMgP,EAAiBd,GAAuBlO,GAAU,GACxD,OAAOliB,KAAKmoB,eAAelY,GAAiBiN,UAAWgU,IAGpDD,EAAgBzxB,UAAAymB,iBAAvB,SAAwB/D,GACpB,IAAMgP,EAAiBd,GAAuBlO,GAAU,GACxD,OAAOliB,KAAKmoB,eAAelY,GAAiBkN,cAAe+T,IAGxDD,EAAsBzxB,UAAA+iB,uBAA7B,SAA8BL,GAC1B,GAAIA,EAAU,CACV,IAAMgP,EAAiBd,GAAuBlO,GAC9C,OAAOliB,KAAKooB,eAAenY,GAAiBqS,oBAAqB4O,EACpE,CACD,OAAOlxB,KAAKooB,eAAenY,GAAiBqS,sBAGzC2O,EAAkBzxB,UAAAkjB,mBAAzB,SAA0BR,GACtB,GAAIA,EAAU,CACV,IAAMgP,EAAiBd,GAAuBlO,GAC9C,OAAOliB,KAAKooB,eAAenY,GAAiBwS,gBAAiByO,EAChE,CACD,OAAOlxB,KAAKooB,eAAenY,GAAiBwS,kBAGzCwO,EAAczxB,UAAAqjB,eAArB,SAAsBX,GAClB,IAAMgP,EAAiBd,GAAuBlO,GAC9C,OAAOliB,KAAKooB,eAAenY,GAAiB2S,YAAasO,IAGtDD,EAAkBzxB,UAAAwjB,mBAAzB,SAA0Bd,GACtB,GAAIA,EAAU,CACV,IAAMgP,EAAiBd,GAAuBlO,GAC9C,OAAOliB,KAAKooB,eAAenY,GAAiB8S,gBAAiBmO,EAChE,CACD,OAAOlxB,KAAKooB,eAAenY,GAAiB8S,kBAGzCkO,EAAiBzxB,UAAA2xB,kBAAxB,SAAyBjP,GACrB,IAAMgP,EAAiBd,GAAuBlO,GAC9C,OAAOliB,KAAKooB,eAAepY,GAAcohB,eAAgBF,IAGtDD,EAAiBzxB,UAAA6xB,kBAAxB,SAAyBnP,GACrB,IAAMgP,EAAiBd,GAAuBlO,GAC9C,OAAOliB,KAAKmoB,eAAenY,GAAc0O,eAAgBwS,IAGtDD,EAAAzxB,UAAA0kB,gBAAP,SAAuBjD,EAAkCC,EAAgCgB,GACrF,OAAOliB,KAAK2sB,cACV1c,GAAiBgU,aACjBhD,EACAC,EACAgB,EAAWkO,GAAuBlO,GAAU,QAAShY,IAG9C+mB,EAAAzxB,UAAA2oB,eAAb,SAA4B/S,EAAyC8M,uGAIzD,OAHF1X,EAAU1H,EAAAA,EAAA,GAAO9C,KAAKggB,SAASqM,mBAAsBnK,UAGnD,CAAA,EAAMliB,KAAKssB,0BAA0B9hB,WAK7C,OANM5N,EACCkG,EAAAgJ,WAAA,EAAA,CAAAhJ,EAAAgJ,WAAA,EAAA7K,EAAAH,OAAA,CAAC+K,EAAgD3K,WACpDvE,UAAW8f,GAAkBrH,GAC7BvM,WAAYuM,KAGT,CAAA,EAAApV,KAAKmgB,qBAAqBzM,gBAAgB9W,UACpD,EAEYq0B,EAAAzxB,UAAA4oB,eAAb,SAA4BhT,EAAyC8M,qGAChB,OAA1CrW,GAAA5K,EAAAjB,KAAKmgB,sBAAqB5M,gBAAsB,CAAA,EAAAvT,KAAK0sB,0BAA0BtX,EAAO8M,WAA7F,MAAO,CAAA,EAAArW,EAAAC,MAAA7K,EAAA,CAA0C8K,EAAqD7K,gBACzG,EAEY+vB,EAAazxB,UAAAmtB,cAA1B,SACIvX,EACA6L,EACAC,EACAgB,qGAIQ,eADDjB,IACO,CAAA,EAAAjhB,KAAK4sB,oBAAmB9pB,EAAAA,EAAA,CAAA,EAAKoe,GAAegB,YAM1D,OARMtlB,EAAOkG,EAAAgJ,WAAA,EAAA,CAAAhJ,EAAAgJ,WAAA,EAAA7K,EAAAH,OAAA,CAEL+K,EAAA3K,UAA6D,CACjE2rB,eAAgB7sB,KAAKggB,SAAS8M,eAC9BC,cAAe/sB,KAAKggB,SAASgN,cAC7BR,YAAapX,KAGV,CAAA,EAAApV,KAAKmgB,qBAAqB1M,eAAe7W,UACnD,EAEaq0B,EAAyBzxB,UAAA8sB,0BAAvC,SAAwCpK,mGAE5B,cAAA,CAAA,EAAMliB,KAAK4sB,oBAAoB1K,IADvC,KAAA,EAAA,MAAA,CAAA,EAAApf,EAAAgJ,WAAA,EAAA,CAAAhJ,EAAAgJ,WAAA,EAAA7K,EAAAH,OAAA,CACQ+K,EAAA3K,UAAyC,CAC7C+rB,mBAAoBjtB,KAAKggB,SAAS8M,yBAEzC,EAEamE,EAAAzxB,UAAAktB,0BAAd,SACItX,EACA8M,mGAGQ,cAAA,CAAA,EAAMliB,KAAK4sB,oBAAoB1K,IADvC,KAAA,EAAA,MAAA,CAAA,EAAApf,EAAAgJ,WAAA,EAAA,CAAAhJ,EAAAgJ,WAAA,EAAA,CAAAhJ,EAAAgJ,WAAA,EAAA7K,EAAAH,OAAA,CACQ+K,EAAA3K,UACDlB,KAAKggB,SAASkF,iCAA8B,CAC/C2H,eAAgB7sB,KAAKggB,SAAS8M,eAC9BC,cAAe/sB,KAAKggB,SAASgN,cAC7BR,YAAapX,YAEpB,EAEa6b,EAAmBzxB,UAAAotB,oBAAjC,SAAkC1K,uGAQhB,OAPR1X,EAAU1H,EAAAA,EAAA,GAAO9C,KAAKggB,SAASqM,mBAAsBnK,WAEpDliB,KAAKktB,eACRrhB,EAAA,CAAArB,aACA1N,SAAUkD,KAAKggB,SAASoN,cACxBC,WAAYrtB,KAAKggB,SAASsN,cAAgBttB,KAAKggB,SAASsN,gBAAkB,GAC1EC,UAAWvtB,KAAKggB,SAASwN,kBACf,CAAA,EAAMxtB,KAAKytB,sBANzB,MAMI,CAAA,EAAA3qB,EAAAgJ,WAAA,EAAA7K,EAAAH,OAAA,EAAA+K,EAAA7C,SAAU+C,EAAA7K,OACZ2K,aACL,EAEOolB,EAAAzxB,UAAA0tB,WAAR,mBACI,MAAO,CACHQ,cAAiD,WAAlCzsB,EAAAjB,KAAKggB,UAAS2N,wBAAoB,IAAA9hB,OAAA,EAAAA,EAAAuL,KAAAnW,GACjD2sB,aAAc5tB,KAAKggB,SAAS6N,kBAC5BC,aAAc9tB,KAAKggB,SAAS+N,kBAC5BC,aAAchuB,KAAKggB,SAASiO,oBAI5BgD,EAAAzxB,UAAAiuB,YAAR,WACI,OAAOztB,KAAKmgB,gCAAgCjQ,GACtClQ,KAAKmgB,qBAAqBxT,2BAC1BzC,GAEb+mB,CAAD,8PC/SiBlzB,OAAwB,mBAChBuzB,UACrBtlB,QAAQjQ,MACJ,0HAGOgC,OAAsB,iBACduzB,UACnBtlB,QAAQjQ,MACJ,kHAcR,IAAMqgB,GAAyBmV,KAAKnV,SAAWE,IAG/CiV,KAAKnV,QAAUE,GAEfiV,KAAKC,eAAiBC,GAIlBrV,GAAQsV,IAGRptB,EAFmB8X,GAAQsV,EAAE9kB,QAAO,SAACsP,GAA0B,MAAY,SAAZA,EAAK,EAAa,IAC7DE,GAAQsV,EAAE9kB,QAAO,SAACsP,GAA0B,MAAY,SAAZA,EAAK,EAAa,KAClDX,SAAQ,SAACW,GAA0B,OAAAI,GAAwBxQ,WAAM,EAAQoQ,EAAK,WAGnGqV,KAAKnV"}
|