@coveo/relay 0.8.0 → 0.8.2

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,2 +1,2 @@
1
- var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function t(t){return{getClientId:()=>{const n="visitorId",o=t.get(),r=o.storage,c=r.getItem(n),a=c&&("string"==typeof(i=c)&&e.test(i))?c:o.generateUUID();var i;return r.setItem(n,a),a}}}const n="0.8.0";function o(e){return(e.source||[]).concat([`relay@${n}`])}function r(e,t,n,r){const{getReferrer:c,getLocation:a,getUserAgent:i}=n,s=function(e){const{trackingId:t}=e;return{trackingId:t}}(t),u=r.getClientId();return Object.freeze({type:e,config:s,ts:Date.now(),source:o(t),clientId:u,userAgent:i(),referrer:c(),location:a()})}const c="*";function a(){const e=[];function t({type:t,callback:n}){return e.findIndex((e=>e.type===t&&e.callback===n))}function n(n,o){o?function(n){const o=t(n);o>=0&&e.splice(o,1)}({type:n,callback:o}):function(t){if(t===c)e.length=0;else for(let n=e.length-1;n>=0;n--)e[n].type===t&&e.splice(n,1)}(n)}return{add:function(o){return t(o)<0&&e.push(o),()=>n(o.type,o.callback)},call:function(t){e.forEach((e=>{if(function(e,t){return"*"===e.type||t===e.type}(e,t.meta.type))try{e.callback(t)}catch(e){console.error(e)}}))},remove:n}}function i({url:e,token:t,trackingId:n,...o}){return Object.freeze({url:e,token:t,trackingId:n,...!!o.mode&&{mode:o.mode},...!!o.source&&{source:o.source}})}const s=function(){const e="coveo_";return{getItem(t){const n=`${e}${t}=`,o=document.cookie.split(";");for(const e of o){const t=e.replace(/^\s+/,"");if(0===t.lastIndexOf(n,0))return t.substring(n.length,t.length)}return null},setItem(t,n,o){const r=(e=>{const t=e.split(".").slice(-2);return 2==t.length?t.join("."):""})(window.location.hostname),c=`;expires=${new Date((new Date).getTime()+o).toUTCString()}`,a=r?`;domain=${r}`:"";document.cookie=`${e}${t}=${n}${c}${a};path=/;SameSite=Lax`},removeItem(e){this.setItem(e,"",-1)}}}();function u(){return{runtime:"browser",send:(e,t,n)=>{const o=navigator.sendBeacon(`${e}?access_token=${t}`,new Blob([JSON.stringify([n])],{type:"application/json"})),r=function(){const e="undefined"!=typeof window;return{sendMessage(t){e&&window.postMessage(t,"*")}}}();if(r.sendMessage({kind:"EVENT_PROTOCOL",event:n,url:e,token:t}),!o)throw new Error("Failed to send the event(s) because the payload size exceeded the maximum allowed size (32 KB). Please contact support if the problem persists.")},getReferrer:()=>function(){const e=document.referrer;return""===e?null:e}(),getLocation:()=>window.location.href,getUserAgent:()=>navigator.userAgent,generateUUID:()=>crypto.randomUUID(),storage:{getItem:e=>s.getItem(e)||localStorage.getItem(e),removeItem(e){s.removeItem(e),localStorage.removeItem(e)},setItem(e,t){localStorage.setItem(e,t),s.setItem(e,t,31556952e3)}}}}function l(e){return"disabled"!==e.get().mode&&function(){try{return"object"==typeof window}catch(e){return!1}}()&&function(){try{const e="__storage_test__";return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(e){return e instanceof DOMException&&"QuotaExceededError"===e.name&&localStorage&&0!==localStorage.length}}()?u():{runtime:"null",send:()=>{},getReferrer:()=>null,getLocation:()=>null,getUserAgent:()=>null,generateUUID:()=>"",storage:{getItem:()=>null,removeItem(){},setItem(){}}}}function g(e){const o=function(e){let t=i(e);return{get:()=>t,update:e=>{t=i({...t,...e})}}}(e),c=a(),s=function(e){return{get:()=>Object.freeze(l(e))}}(o),u=t(s);return{emit:(e,t)=>{const n=o.get(),a=s.get(),i=function(e,t,n,o,c){return{...t,meta:r(e,n,o,c)}}(e,t,n,a,u);return function({config:e,environment:t,event:n,listenerManager:o}){const{url:r,token:c,mode:a}=e;"disabled"!==a&&(o.call(n),t.send(r,c,n))}({config:n,environment:a,event:i,listenerManager:c})},getMeta:e=>r(e,o.get(),s.get(),u),on:(e,t)=>c.add({type:e,callback:t}),off:(e,t)=>c.remove(e,t),updateConfig:e=>o.update(e),version:n}}export{g as createRelay};
1
+ var e=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;for(var t,n=[],r=0;r<256;++r)n.push((r+256).toString(16).slice(1));var o=new Uint8Array(16);function c(){if(!t&&!(t="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return t(o)}var a={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function i(e,t,r){if(a.randomUUID&&!t&&!e)return a.randomUUID();var o=(e=e||{}).random||(e.rng||c)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,t){r=r||0;for(var i=0;i<16;++i)t[r+i]=o[i];return t}return function(e,t=0){return(n[e[t+0]]+n[e[t+1]]+n[e[t+2]]+n[e[t+3]]+"-"+n[e[t+4]]+n[e[t+5]]+"-"+n[e[t+6]]+n[e[t+7]]+"-"+n[e[t+8]]+n[e[t+9]]+"-"+n[e[t+10]]+n[e[t+11]]+n[e[t+12]]+n[e[t+13]]+n[e[t+14]]+n[e[t+15]]).toLowerCase()}(o)}function s(t){return{getClientId:()=>{const n="visitorId",r=t.get(),o=r.storage,c=o.getItem(n),a=c&&("string"==typeof(i=c)&&e.test(i))?c:r.generateUUID();var i;return o.setItem(n,a),a}}}const u="0.8.2";function f(e){return(e.source||[]).concat([`relay@${u}`])}function l(e,t,n,r){const{getReferrer:o,getLocation:c,getUserAgent:a}=n,i=function(e){const{trackingId:t}=e;return{trackingId:t}}(t),s=r.getClientId();return Object.freeze({type:e,config:i,ts:Date.now(),source:f(t),clientId:s,userAgent:a(),referrer:o(),location:c()})}const g="*";function d(){const e=[];function t({type:t,callback:n}){return e.findIndex((e=>e.type===t&&e.callback===n))}function n(n,r){r?function(n){const r=t(n);r>=0&&e.splice(r,1)}({type:n,callback:r}):function(t){if(t===g)e.length=0;else for(let n=e.length-1;n>=0;n--)e[n].type===t&&e.splice(n,1)}(n)}return{add:function(r){return t(r)<0&&e.push(r),()=>n(r.type,r.callback)},call:function(t){e.forEach((e=>{if(function(e,t){return"*"===e.type||t===e.type}(e,t.meta.type))try{e.callback(t)}catch(e){console.error(e)}}))},remove:n}}function m({url:e,token:t,trackingId:n,...r}){return Object.freeze({url:e,token:t,trackingId:n,...!!r.mode&&{mode:r.mode},...!!r.source&&{source:r.source}})}const p=function(){const e="coveo_";return{getItem(t){const n=`${e}${t}=`,r=document.cookie.split(";");for(const e of r){const t=e.replace(/^\s+/,"");if(0===t.lastIndexOf(n,0))return t.substring(n.length,t.length)}return null},setItem(t,n,r){const o=(e=>{const t=e.split(".").slice(-2);return 2==t.length?t.join("."):""})(window.location.hostname),c=`;expires=${new Date((new Date).getTime()+r).toUTCString()}`,a=o?`;domain=${o}`:"";document.cookie=`${e}${t}=${n}${c}${a};path=/;SameSite=Lax`},removeItem(e){this.setItem(e,"",-1)}}}();function I(){return{runtime:"browser",send:(e,t,n)=>{const r=navigator.sendBeacon(`${e}?access_token=${t}`,new Blob([JSON.stringify([n])],{type:"application/json"})),o=function(){const e="undefined"!=typeof window;return{sendMessage(t){e&&window.postMessage(t,"*")}}}();if(o.sendMessage({kind:"EVENT_PROTOCOL",event:n,url:e,token:t}),!r)throw new Error("Failed to send the event(s) because the payload size exceeded the maximum allowed size (32 KB). Please contact support if the problem persists.")},getReferrer:()=>function(){const e=document.referrer;return""===e?null:e}(),getLocation:()=>window.location.href,getUserAgent:()=>navigator.userAgent,generateUUID:()=>i(),storage:{getItem:e=>p.getItem(e)||localStorage.getItem(e),removeItem(e){p.removeItem(e),localStorage.removeItem(e)},setItem(e,t){localStorage.setItem(e,t),p.setItem(e,t,31556952e3)}}}}function y(e){return"disabled"!==e.get().mode&&function(){try{return"object"==typeof window}catch(e){return!1}}()&&function(){try{const e="__storage_test__";return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(e){return e instanceof DOMException&&"QuotaExceededError"===e.name&&localStorage&&0!==localStorage.length}}()?I():{runtime:"null",send:()=>{},getReferrer:()=>null,getLocation:()=>null,getUserAgent:()=>null,generateUUID:()=>"",storage:{getItem:()=>null,removeItem(){},setItem(){}}}}function v(e){const t=function(e){let t=m(e);return{get:()=>t,update:e=>{t=m({...t,...e})}}}(e),n=d(),r=function(e){return{get:()=>Object.freeze(y(e))}}(t),o=s(r);return{emit:(e,c)=>{const a=t.get(),i=r.get(),s=function(e,t,n,r,o){return{...t,meta:l(e,n,r,o)}}(e,c,a,i,o);return function({config:e,environment:t,event:n,listenerManager:r}){const{url:o,token:c,mode:a}=e;"disabled"!==a&&(r.call(n),t.send(o,c,n))}({config:a,environment:i,event:s,listenerManager:n})},getMeta:e=>l(e,t.get(),r.get(),o),on:(e,t)=>n.add({type:e,callback:t}),off:(e,t)=>n.remove(e,t),updateConfig:e=>t.update(e),version:u}}export{v as createRelay};
2
2
  //# sourceMappingURL=relay.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"relay.min.js","sources":["../../../../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/regex.js","../../src/client-id/client-id.ts","../../../../node_modules/.pnpm/uuid@9.0.1/node_modules/uuid/dist/esm-browser/validate.js","../../src/version.ts","../../src/event/meta/meta.ts","../../src/listener/listener.ts","../../src/config/config.ts","../../src/environment/browser/storage/cookie.ts","../../src/environment/browser/browser.ts","../../../../node_modules/.pnpm/@coveo+explorer-messenger@0.4.0/node_modules/@coveo/explorer-messenger/dist/messenger.js","../../src/environment/browser/storage/storage.ts","../../src/environment/manager/manager.ts","../../src/environment/browser/storage/availability.ts","../../src/environment/null/null.ts","../../src/environment/storage.ts","../../src/relay.ts","../../src/event/relay-event.ts","../../src/emit/emit.ts"],"sourcesContent":["export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import { validate } from \"uuid\";\nimport { EnvironmentManager } from \"../environment/manager/manager\";\n\nexport interface ClientIdManager {\n getClientId: () => string;\n}\n\nexport function createClientIdManager(\n environmentManager: EnvironmentManager\n): ClientIdManager {\n return {\n getClientId: () => {\n const key = \"visitorId\";\n const environment = environmentManager.get();\n const storage = environment.storage;\n\n const existingClientId = storage.getItem(key);\n const clientId =\n existingClientId && validate(existingClientId)\n ? existingClientId\n : environment.generateUUID();\n storage.setItem(key, clientId);\n return clientId;\n },\n };\n}\n","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","export const version = \"process.env.VERSION\";\n","import { ClientIdManager } from \"../../client-id/client-id\";\nimport { Environment } from \"../../environment/environment\";\nimport { RelayConfig } from \"../../config/config\";\nimport { version } from \"../../version\";\n\n/**\n * The `EventConfig` object provides additonal information for the configuration associated with the event.\n */\nexport interface EventConfig {\n /**\n * The unique identifier of a web property. See [What's a tracking ID?](https://docs.coveo.com/en/n8tg0567/).\n */\n trackingId: string;\n}\n\n/**\n * The `Meta` object provides a structured representation of metadata associated with an emitted event.\n * This object is auto-populated by Relay.\n */\nexport interface Meta {\n /**\n * Event's type that was emitted.\n */\n type: string;\n\n /**\n * Configuration associated with the event.\n */\n config: EventConfig;\n\n /**\n * Timestamp when the event was emitted.\n */\n ts: number;\n\n /**\n * Names and versions of the client side libraries which built and emitted this event.\n */\n source: string[];\n\n /**\n * Persistent unique identifier of a device.\n */\n clientId: string;\n\n /**\n * Browser Navigator's [user agent](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgent) property if set.\n */\n userAgent: string | null;\n\n /**\n * Browser Document's [referrer](https://developer.mozilla.org/en-US/docs/Web/API/Document/referrer) property if set.\n */\n referrer: string | null;\n\n /**\n * Browser Location's [href](https://developer.mozilla.org/en-US/docs/Web/API/Location/href) property if set.\n */\n location: string | null;\n}\n\nfunction getEventConfig(config: RelayConfig): EventConfig {\n const { trackingId } = config;\n return { trackingId };\n}\n\nfunction getSource(config: RelayConfig): string[] {\n return (config.source || []).concat([`relay@${version}`]);\n}\n\nexport function createMeta(\n type: string,\n config: RelayConfig,\n environment: Environment,\n clientIdManager: ClientIdManager\n): Readonly<Meta> {\n const { getReferrer, getLocation, getUserAgent } = environment;\n const eventConfig = getEventConfig(config);\n const clientId = clientIdManager.getClientId();\n\n return Object.freeze<Meta>({\n type,\n config: eventConfig,\n ts: Date.now(),\n source: getSource(config),\n clientId,\n userAgent: getUserAgent(),\n referrer: getReferrer(),\n location: getLocation(),\n });\n}\n","import { RelayEvent } from \"../event/relay-event\";\n\nconst ANY_EVENT_TYPE = \"*\";\n\n/**\n * Callback to perform an action when a specified event is emitted.\n * @typedef {function} EventCallback\n * @param {RelayEvent} event - the Relay event payload that triggered the callback.\n * @returns {void}\n */\nexport type EventCallback = (event: RelayEvent) => void;\n\ninterface Listener {\n type: string;\n callback: EventCallback;\n}\n\nexport interface ListenerManager {\n add: (listener: Listener) => () => void;\n call: (event: RelayEvent) => void;\n remove: (type: string, callback?: EventCallback) => void;\n}\n\nexport function createListenerManager(): ListenerManager {\n const listeners: Listener[] = [];\n\n function getListenerIndex({ type, callback }: Listener): number {\n return listeners.findIndex(\n (listener) => listener.type === type && listener.callback === callback\n );\n }\n\n function isMatchesType(listener: Listener, type: string): boolean {\n return listener.type === \"*\" || type === listener.type;\n }\n\n function add(listener: Listener): () => void {\n if (getListenerIndex(listener) < 0) {\n listeners.push(listener);\n }\n return () => remove(listener.type, listener.callback);\n }\n\n function call(event: RelayEvent) {\n listeners.forEach((listener) => {\n if (isMatchesType(listener, event.meta.type)) {\n try {\n listener.callback(event);\n } catch (e) {\n console.error(e);\n }\n }\n });\n }\n\n function removeMultiple(type: string) {\n if (type === ANY_EVENT_TYPE) {\n listeners.length = 0;\n } else {\n for (let i = listeners.length - 1; i >= 0; i--) {\n if (listeners[i].type === type) {\n listeners.splice(i, 1);\n }\n }\n }\n }\n\n function removeOne(listener: Listener) {\n const index = getListenerIndex(listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n }\n\n function remove(type: string, callback?: EventCallback) {\n callback ? removeOne({ type, callback }) : removeMultiple(type);\n }\n\n return {\n add,\n call,\n remove,\n };\n}\n","/**\n * The `RelayConfig` object defines the configuration options for initializing a Relay instance.\n */\nexport interface RelayConfig {\n /**\n * Endpoint defined to communicate with the Event API.\n */\n url: string;\n\n /**\n * Token to authorize the access to the Event API endpoint.\n */\n token: string;\n\n /**\n * The unique identifier of a web property. See [What's a tracking ID?](https://docs.coveo.com/en/n8tg0567/).\n */\n trackingId: string;\n\n /**\n * Defines the library mode. The available modes are `emit` and `disabled`.\n * `emit` sends analytics events to Coveo to be stored.\n * `disabled` prevents the emission of events and does not trigger callbacks.\n * @default emit\n */\n mode?: \"emit\" | \"disabled\";\n\n /**\n * Optionally allows a Relay integration to specify the name(s) of software package(s) relay is\n * being called from. These names will be transmitted with each event, along with Relay's own\n * version. The recommendation is to specify them using a 'softwarename@softwareversion' string.\n */\n source?: string[];\n}\n\nexport interface ConfigManager {\n get: () => Readonly<RelayConfig>;\n update: (updatedConfig: Partial<RelayConfig>) => void;\n}\n\nfunction pick({\n url,\n token,\n trackingId,\n ...rest\n}: RelayConfig): Readonly<RelayConfig> {\n return Object.freeze({\n url,\n token,\n trackingId,\n ...(!!rest.mode && { mode: rest.mode }),\n ...(!!rest.source && { source: rest.source }),\n });\n}\n\nexport function createConfigManager(\n initialConfig: RelayConfig\n): Readonly<ConfigManager> {\n let _config: Readonly<RelayConfig> = pick(initialConfig);\n\n return {\n get: () => _config,\n update: (updatedConfig: Partial<RelayConfig>) => {\n _config = pick({ ..._config, ...updatedConfig });\n },\n };\n}\n","export interface CookieManager {\n getItem: (key: string) => string | null;\n removeItem: (key: string) => void;\n setItem: (key: string, data: string, expire: number) => void;\n}\n\nexport const cookieManager: CookieManager = createCookieManager();\n\nfunction createCookieManager(): CookieManager {\n const prefix = \"coveo_\";\n const getDomain = (host: string) => {\n const parts = host.split(\".\").slice(-2);\n return parts.length == 2 ? parts.join(\".\") : \"\";\n };\n\n return {\n getItem(key: string): string | null {\n const cookiePrefix = `${prefix}${key}=`;\n const cookieArray = document.cookie.split(\";\");\n for (const cookie of cookieArray) {\n const prettifyCookie = cookie.replace(/^\\s+/, \"\");\n if (prettifyCookie.lastIndexOf(cookiePrefix, 0) === 0) {\n return prettifyCookie.substring(\n cookiePrefix.length,\n prettifyCookie.length\n );\n }\n }\n return null;\n },\n setItem(key: string, data: string, expire: number): void {\n const domain = getDomain(window.location.hostname);\n const expireSection = `;expires=${new Date(\n new Date().getTime() + expire\n ).toUTCString()}`;\n const domainSection = domain ? `;domain=${domain}` : \"\";\n document.cookie = `${prefix}${key}=${data}${expireSection}${domainSection};path=/;SameSite=Lax`;\n },\n\n removeItem(key: string): void {\n this.setItem(key, \"\", -1);\n },\n };\n}\n","import { createExplorerMessenger } from \"@coveo/explorer-messenger\";\nimport { Environment } from \"../environment\";\nimport { createBrowserStorage } from \"./storage/storage\";\nimport { RelayEvent } from \"../../event/relay-event\";\n\nfunction getReferrer() {\n const referrer = document.referrer;\n\n return referrer === \"\" ? null : referrer;\n}\n\nexport function buildBrowserEnvironment(): Environment {\n return {\n runtime: \"browser\",\n send: (url: string, token: string, event: RelayEvent) => {\n const response = navigator.sendBeacon(\n `${url}?access_token=${token}`,\n new Blob([JSON.stringify([event])], {\n type: \"application/json\",\n })\n );\n\n const messenger = createExplorerMessenger();\n messenger.sendMessage({ kind: \"EVENT_PROTOCOL\", event, url, token });\n\n if (!response) {\n throw new Error(\n `Failed to send the event(s) because the payload size exceeded the maximum allowed size (32 KB). Please contact support if the problem persists.`\n );\n }\n },\n getReferrer: () => getReferrer(),\n getLocation: () => window.location.href,\n getUserAgent: () => navigator.userAgent,\n generateUUID: () => crypto.randomUUID(),\n storage: createBrowserStorage(),\n };\n}\n","function createExplorerMessenger() {\n const isBrowser = typeof window !== \"undefined\";\n return {\n sendMessage(message) {\n isBrowser && window.postMessage(message, \"*\");\n }\n };\n}\nexport {\n createExplorerMessenger\n};\n","import { Storage } from \"../../storage\";\nimport { cookieManager } from \"./cookie\";\n\nexport function createBrowserStorage(): Storage {\n return {\n getItem(key: string): string | null {\n return cookieManager.getItem(key) || localStorage.getItem(key);\n },\n\n removeItem(key: string): void {\n cookieManager.removeItem(key);\n localStorage.removeItem(key);\n },\n\n setItem(key: string, data: string): void {\n const oneYear = 31556952000;\n localStorage.setItem(key, data);\n cookieManager.setItem(key, data, oneYear);\n },\n };\n}\n","import { ConfigManager } from \"../../config/config\";\nimport { buildBrowserEnvironment } from \"../browser/browser\";\nimport { localStorageAvailable } from \"../browser/storage/availability\";\nimport { Environment } from \"../environment\";\nimport { buildNullEnvironment } from \"../null/null\";\n\nexport interface EnvironmentManager {\n get: () => Readonly<Environment>;\n}\n\nfunction buildEnvironment(configManager: ConfigManager) {\n const active = configManager.get().mode !== \"disabled\";\n\n if (active && isBrowser() && localStorageAvailable()) {\n return buildBrowserEnvironment();\n }\n\n return buildNullEnvironment();\n}\n\nfunction isBrowser() {\n try {\n return typeof window === \"object\";\n } catch (e) {\n return false;\n }\n}\n\nexport function createEnvironmentManager(\n configManager: ConfigManager\n): Readonly<EnvironmentManager> {\n return {\n get: () => Object.freeze(buildEnvironment(configManager)),\n };\n}\n","// From: https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#feature-detecting_localstorage\nexport function localStorageAvailable() {\n try {\n const x = \"__storage_test__\";\n localStorage.setItem(x, x);\n localStorage.removeItem(x);\n return true;\n } catch (e) {\n return (\n e instanceof DOMException &&\n e.name === \"QuotaExceededError\" &&\n // acknowledge QuotaExceededError only if there's something already stored\n localStorage &&\n localStorage.length !== 0\n );\n }\n}\n","import { Environment } from \"../environment\";\nimport { createNullStorage } from \"../storage\";\n\nexport function buildNullEnvironment(): Environment {\n return {\n runtime: \"null\",\n send: () => undefined,\n getReferrer: () => null,\n getLocation: () => null,\n getUserAgent: () => null,\n generateUUID: () => \"\",\n storage: createNullStorage(),\n };\n}\n","export interface Storage {\n getItem: (key: string) => string | null;\n removeItem: (key: string) => void;\n setItem: (key: string, data: string) => void;\n}\n\nexport function createNullStorage(): Storage {\n return {\n getItem(): string | null {\n return null;\n },\n removeItem(): void {\n return;\n },\n setItem(): void {\n return;\n },\n };\n}\n","import { emit } from \"./emit/emit\";\nimport { createClientIdManager } from \"./client-id/client-id\";\nimport { createRelayEvent, RelayEvent } from \"./event/relay-event\";\nimport { version } from \"./version\";\nimport { createMeta, Meta, EventConfig } from \"./event/meta/meta\";\nimport { createListenerManager, EventCallback } from \"./listener/listener\";\nimport { createConfigManager, RelayConfig } from \"./config/config\";\nimport { createEnvironmentManager } from \"./environment/manager/manager\";\nimport { RelayPayload } from \"./relay-payload\";\n\n/**\n * Function that detaches an event callback.\n * @typedef {function} Off\n * @returns {void}\n */\nexport type Off = () => void;\n\n/**\n * Relay instance.\n * This object provides a comprehensive set of variables and methods for interacting with the Event API.\n */\ninterface Relay {\n /**\n * Sends an event to the Event API.\n * @param {string} type - event's type to be emitted.\n * @param {Record<string,any>} payload - payload to include within the event.\n * @returns {void}\n */\n emit: (type: string, payload: Record<string, any>) => void;\n\n /**\n * Gets the client-side generated meta object.\n * @param {string} type - event's type that will be included in the meta object.\n * @returns {Meta}\n */\n getMeta: (type: string) => Meta;\n\n /**\n * Attaches an event callback to either all event types or a specific one.\n * The callback set will be called when an event with the specified type is emitted.\n * It’s not possible to modify the payload of the event sent to Coveo using this listener.\n * Setting type as \"*\" will trigger the callback for all event types.\n * Returns the \"off\" function to detach the event callback.\n * @param {string} type - event's type.\n * @param {EventCallback} callback - callback that should be called when the event is emitted.\n * @returns {Off}\n */\n on: (type: string, callback: EventCallback) => Off;\n\n /**\n * Detach callback(s) from events.\n * If only the \"type\" parameter is set, all callbacks for the specified type will be removed.\n * @param {string} type - event's type.\n * @param {EventCallback} callback - callback that should be removed.\n * @returns {void}\n */\n off: (type: string, callback?: EventCallback) => void;\n\n /**\n * Updates Relay's configuration after its initialization.\n * @param {Partial<RelayConfig>} config - configuration that should be updated.\n * @returns {void}\n */\n updateConfig: (config: Partial<RelayConfig>) => void;\n\n /**\n * Current version of the Relay library.\n */\n version: string;\n}\n\n/**\n * Initializes the Relay library object.\n * @param {RelayConfig} initialConfig\n * @returns {Relay}\n */\nexport function createRelay(initialConfig: RelayConfig): Relay {\n const configManager = createConfigManager(initialConfig);\n const listenerManager = createListenerManager();\n const environmentManager = createEnvironmentManager(configManager);\n const clientIdManager = createClientIdManager(environmentManager);\n\n return {\n emit: (type: string, payload: Record<string, any>) => {\n const config = configManager.get();\n const environment = environmentManager.get();\n\n const event = createRelayEvent(\n type,\n payload,\n config,\n environment,\n clientIdManager\n );\n\n return emit({\n config,\n environment,\n event,\n listenerManager,\n });\n },\n getMeta: (type: string) =>\n createMeta(\n type,\n configManager.get(),\n environmentManager.get(),\n clientIdManager\n ),\n on: (type: string, callback: EventCallback) =>\n listenerManager.add({ type, callback }),\n off: (type: string, callback?: EventCallback) =>\n listenerManager.remove(type, callback),\n updateConfig: (config: Partial<RelayConfig>) =>\n configManager.update(config),\n version,\n };\n}\n\nexport type {\n Relay,\n Meta,\n EventConfig,\n EventCallback,\n RelayConfig,\n RelayPayload,\n RelayEvent,\n};\n","import { ClientIdManager } from \"../client-id/client-id\";\nimport { Environment } from \"../environment/environment\";\nimport { RelayPayload } from \"../relay-payload\";\nimport { RelayConfig } from \"../relay\";\nimport { createMeta, Meta } from \"./meta/meta\";\n\n/**\n * Defines the structure of a RelayEvent, extending the RelayPayload.\n */\nexport interface RelayEvent extends RelayPayload {\n /**\n * Read-only `meta` property of Meta type.\n */\n meta: Readonly<Meta>;\n}\n\nexport function createRelayEvent(\n type: string,\n payload: RelayPayload,\n config: RelayConfig,\n environment: Environment,\n clientIdManager: ClientIdManager\n): Readonly<RelayEvent> {\n return {\n ...payload,\n meta: createMeta(type, config, environment, clientIdManager),\n };\n}\n","import { Environment } from \"../environment/environment\";\nimport { ListenerManager } from \"../listener/listener\";\nimport { RelayEvent } from \"../event/relay-event\";\nimport { RelayConfig } from \"../relay\";\n\nexport interface EmitParams {\n config: RelayConfig;\n environment: Environment;\n event: RelayEvent;\n listenerManager: ListenerManager;\n}\n\nexport function emit({\n config,\n environment,\n event,\n listenerManager,\n}: EmitParams) {\n const { url, token, mode } = config;\n const isEnabled = mode !== \"disabled\";\n\n if (isEnabled) {\n listenerManager.call(event);\n environment.send(url, token, event);\n }\n}\n"],"names":["REGEX","createClientIdManager","environmentManager","getClientId","key","environment","get","storage","existingClientId","getItem","clientId","uuid","test","generateUUID","setItem","version","getSource","config","source","concat","createMeta","type","clientIdManager","getReferrer","getLocation","getUserAgent","eventConfig","trackingId","getEventConfig","Object","freeze","ts","Date","now","userAgent","referrer","location","ANY_EVENT_TYPE","createListenerManager","listeners","getListenerIndex","callback","findIndex","listener","remove","index","splice","removeOne","length","i","removeMultiple","add","push","call","event","forEach","isMatchesType","meta","e","console","error","pick","url","token","rest","mode","cookieManager","prefix","cookiePrefix","cookieArray","document","cookie","split","prettifyCookie","replace","lastIndexOf","substring","data","expire","domain","host","parts","slice","join","getDomain","window","hostname","expireSection","getTime","toUTCString","domainSection","removeItem","this","createCookieManager","buildBrowserEnvironment","runtime","send","response","navigator","sendBeacon","Blob","JSON","stringify","messenger","isBrowser","sendMessage","message","postMessage","createExplorerMessenger","kind","Error","href","crypto","randomUUID","localStorage","buildEnvironment","configManager","x","DOMException","name","localStorageAvailable","createRelay","initialConfig","_config","update","updatedConfig","createConfigManager","listenerManager","createEnvironmentManager","emit","payload","createRelayEvent","getMeta","on","off","updateConfig"],"mappings":"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","x_google_ignoreList":[0,2,9]}
1
+ {"version":3,"file":"relay.min.js","sources":["../../../../node_modules/.pnpm/uuid@10.0.0/node_modules/uuid/dist/esm-browser/regex.js","../../../../node_modules/.pnpm/uuid@10.0.0/node_modules/uuid/dist/esm-browser/stringify.js","../../../../node_modules/.pnpm/uuid@10.0.0/node_modules/uuid/dist/esm-browser/rng.js","../../../../node_modules/.pnpm/uuid@10.0.0/node_modules/uuid/dist/esm-browser/native.js","../../../../node_modules/.pnpm/uuid@10.0.0/node_modules/uuid/dist/esm-browser/v4.js","../../src/client-id/client-id.ts","../../../../node_modules/.pnpm/uuid@10.0.0/node_modules/uuid/dist/esm-browser/validate.js","../../src/version.ts","../../src/event/meta/meta.ts","../../src/listener/listener.ts","../../src/config/config.ts","../../src/environment/browser/storage/cookie.ts","../../src/environment/browser/browser.ts","../../../../node_modules/.pnpm/@coveo+explorer-messenger@0.4.0/node_modules/@coveo/explorer-messenger/dist/messenger.js","../../src/environment/browser/storage/storage.ts","../../src/environment/manager/manager.ts","../../src/environment/browser/storage/availability.ts","../../src/environment/null/null.ts","../../src/environment/storage.ts","../../src/relay.ts","../../src/event/relay-event.ts","../../src/emit/emit.ts"],"sourcesContent":["export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;","import validate from './validate.js';\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n //\n // Note to future-self: No, you can't remove the `toLowerCase()` call.\n // REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n var uuid = unsafeStringify(arr, offset);\n // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\n\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n return getRandomValues(rnds8);\n}","var randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n offset = offset || 0;\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;","import { validate } from \"uuid\";\nimport { EnvironmentManager } from \"../environment/manager/manager\";\n\nexport interface ClientIdManager {\n getClientId: () => string;\n}\n\nexport function createClientIdManager(\n environmentManager: EnvironmentManager\n): ClientIdManager {\n return {\n getClientId: () => {\n const key = \"visitorId\";\n const environment = environmentManager.get();\n const storage = environment.storage;\n\n const existingClientId = storage.getItem(key);\n const clientId =\n existingClientId && validate(existingClientId)\n ? existingClientId\n : environment.generateUUID();\n storage.setItem(key, clientId);\n return clientId;\n },\n };\n}\n","import REGEX from './regex.js';\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\nexport default validate;","export const version = \"process.env.VERSION\";\n","import { ClientIdManager } from \"../../client-id/client-id\";\nimport { Environment } from \"../../environment/environment\";\nimport { RelayConfig } from \"../../config/config\";\nimport { version } from \"../../version\";\n\n/**\n * The `EventConfig` object provides additonal information for the configuration associated with the event.\n */\nexport interface EventConfig {\n /**\n * The unique identifier of a web property. See [What's a tracking ID?](https://docs.coveo.com/en/n8tg0567/).\n */\n trackingId: string;\n}\n\n/**\n * The `Meta` object provides a structured representation of metadata associated with an emitted event.\n * This object is auto-populated by Relay.\n */\nexport interface Meta {\n /**\n * Event's type that was emitted.\n */\n type: string;\n\n /**\n * Configuration associated with the event.\n */\n config: EventConfig;\n\n /**\n * Timestamp when the event was emitted.\n */\n ts: number;\n\n /**\n * Names and versions of the client side libraries which built and emitted this event.\n */\n source: string[];\n\n /**\n * Persistent unique identifier of a device.\n */\n clientId: string;\n\n /**\n * Browser Navigator's [user agent](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgent) property if set.\n */\n userAgent: string | null;\n\n /**\n * Browser Document's [referrer](https://developer.mozilla.org/en-US/docs/Web/API/Document/referrer) property if set.\n */\n referrer: string | null;\n\n /**\n * Browser Location's [href](https://developer.mozilla.org/en-US/docs/Web/API/Location/href) property if set.\n */\n location: string | null;\n}\n\nfunction getEventConfig(config: RelayConfig): EventConfig {\n const { trackingId } = config;\n return { trackingId };\n}\n\nfunction getSource(config: RelayConfig): string[] {\n return (config.source || []).concat([`relay@${version}`]);\n}\n\nexport function createMeta(\n type: string,\n config: RelayConfig,\n environment: Environment,\n clientIdManager: ClientIdManager\n): Readonly<Meta> {\n const { getReferrer, getLocation, getUserAgent } = environment;\n const eventConfig = getEventConfig(config);\n const clientId = clientIdManager.getClientId();\n\n return Object.freeze<Meta>({\n type,\n config: eventConfig,\n ts: Date.now(),\n source: getSource(config),\n clientId,\n userAgent: getUserAgent(),\n referrer: getReferrer(),\n location: getLocation(),\n });\n}\n","import { RelayEvent } from \"../event/relay-event\";\n\nconst ANY_EVENT_TYPE = \"*\";\n\n/**\n * Callback to perform an action when a specified event is emitted.\n * @typedef {function} EventCallback\n * @param {RelayEvent} event - the Relay event payload that triggered the callback.\n * @returns {void}\n */\nexport type EventCallback = (event: RelayEvent) => void;\n\ninterface Listener {\n type: string;\n callback: EventCallback;\n}\n\nexport interface ListenerManager {\n add: (listener: Listener) => () => void;\n call: (event: RelayEvent) => void;\n remove: (type: string, callback?: EventCallback) => void;\n}\n\nexport function createListenerManager(): ListenerManager {\n const listeners: Listener[] = [];\n\n function getListenerIndex({ type, callback }: Listener): number {\n return listeners.findIndex(\n (listener) => listener.type === type && listener.callback === callback\n );\n }\n\n function isMatchesType(listener: Listener, type: string): boolean {\n return listener.type === \"*\" || type === listener.type;\n }\n\n function add(listener: Listener): () => void {\n if (getListenerIndex(listener) < 0) {\n listeners.push(listener);\n }\n return () => remove(listener.type, listener.callback);\n }\n\n function call(event: RelayEvent) {\n listeners.forEach((listener) => {\n if (isMatchesType(listener, event.meta.type)) {\n try {\n listener.callback(event);\n } catch (e) {\n console.error(e);\n }\n }\n });\n }\n\n function removeMultiple(type: string) {\n if (type === ANY_EVENT_TYPE) {\n listeners.length = 0;\n } else {\n for (let i = listeners.length - 1; i >= 0; i--) {\n if (listeners[i].type === type) {\n listeners.splice(i, 1);\n }\n }\n }\n }\n\n function removeOne(listener: Listener) {\n const index = getListenerIndex(listener);\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n }\n\n function remove(type: string, callback?: EventCallback) {\n callback ? removeOne({ type, callback }) : removeMultiple(type);\n }\n\n return {\n add,\n call,\n remove,\n };\n}\n","/**\n * The `RelayConfig` object defines the configuration options for initializing a Relay instance.\n */\nexport interface RelayConfig {\n /**\n * Endpoint defined to communicate with the Event API.\n */\n url: string;\n\n /**\n * Token to authorize the access to the Event API endpoint.\n */\n token: string;\n\n /**\n * The unique identifier of a web property. See [What's a tracking ID?](https://docs.coveo.com/en/n8tg0567/).\n */\n trackingId: string;\n\n /**\n * Defines the library mode. The available modes are `emit` and `disabled`.\n * `emit` sends analytics events to Coveo to be stored.\n * `disabled` prevents the emission of events and does not trigger callbacks.\n * @default emit\n */\n mode?: \"emit\" | \"disabled\";\n\n /**\n * Optionally allows a Relay integration to specify the name(s) of software package(s) relay is\n * being called from. These names will be transmitted with each event, along with Relay's own\n * version. The recommendation is to specify them using a 'softwarename@softwareversion' string.\n */\n source?: string[];\n}\n\nexport interface ConfigManager {\n get: () => Readonly<RelayConfig>;\n update: (updatedConfig: Partial<RelayConfig>) => void;\n}\n\nfunction pick({\n url,\n token,\n trackingId,\n ...rest\n}: RelayConfig): Readonly<RelayConfig> {\n return Object.freeze({\n url,\n token,\n trackingId,\n ...(!!rest.mode && { mode: rest.mode }),\n ...(!!rest.source && { source: rest.source }),\n });\n}\n\nexport function createConfigManager(\n initialConfig: RelayConfig\n): Readonly<ConfigManager> {\n let _config: Readonly<RelayConfig> = pick(initialConfig);\n\n return {\n get: () => _config,\n update: (updatedConfig: Partial<RelayConfig>) => {\n _config = pick({ ..._config, ...updatedConfig });\n },\n };\n}\n","export interface CookieManager {\n getItem: (key: string) => string | null;\n removeItem: (key: string) => void;\n setItem: (key: string, data: string, expire: number) => void;\n}\n\nexport const cookieManager: CookieManager = createCookieManager();\n\nfunction createCookieManager(): CookieManager {\n const prefix = \"coveo_\";\n const getDomain = (host: string) => {\n const parts = host.split(\".\").slice(-2);\n return parts.length == 2 ? parts.join(\".\") : \"\";\n };\n\n return {\n getItem(key: string): string | null {\n const cookiePrefix = `${prefix}${key}=`;\n const cookieArray = document.cookie.split(\";\");\n for (const cookie of cookieArray) {\n const prettifyCookie = cookie.replace(/^\\s+/, \"\");\n if (prettifyCookie.lastIndexOf(cookiePrefix, 0) === 0) {\n return prettifyCookie.substring(\n cookiePrefix.length,\n prettifyCookie.length\n );\n }\n }\n return null;\n },\n setItem(key: string, data: string, expire: number): void {\n const domain = getDomain(window.location.hostname);\n const expireSection = `;expires=${new Date(\n new Date().getTime() + expire\n ).toUTCString()}`;\n const domainSection = domain ? `;domain=${domain}` : \"\";\n document.cookie = `${prefix}${key}=${data}${expireSection}${domainSection};path=/;SameSite=Lax`;\n },\n\n removeItem(key: string): void {\n this.setItem(key, \"\", -1);\n },\n };\n}\n","import { createExplorerMessenger } from \"@coveo/explorer-messenger\";\nimport { Environment } from \"../environment\";\nimport { createBrowserStorage } from \"./storage/storage\";\nimport { RelayEvent } from \"../../event/relay-event\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nfunction getReferrer() {\n const referrer = document.referrer;\n\n return referrer === \"\" ? null : referrer;\n}\n\nexport function buildBrowserEnvironment(): Environment {\n return {\n runtime: \"browser\",\n send: (url: string, token: string, event: RelayEvent) => {\n const response = navigator.sendBeacon(\n `${url}?access_token=${token}`,\n new Blob([JSON.stringify([event])], {\n type: \"application/json\",\n })\n );\n\n const messenger = createExplorerMessenger();\n messenger.sendMessage({ kind: \"EVENT_PROTOCOL\", event, url, token });\n\n if (!response) {\n throw new Error(\n `Failed to send the event(s) because the payload size exceeded the maximum allowed size (32 KB). Please contact support if the problem persists.`\n );\n }\n },\n getReferrer: () => getReferrer(),\n getLocation: () => window.location.href,\n getUserAgent: () => navigator.userAgent,\n generateUUID: () => uuidv4(),\n storage: createBrowserStorage(),\n };\n}\n","function createExplorerMessenger() {\n const isBrowser = typeof window !== \"undefined\";\n return {\n sendMessage(message) {\n isBrowser && window.postMessage(message, \"*\");\n }\n };\n}\nexport {\n createExplorerMessenger\n};\n","import { Storage } from \"../../storage\";\nimport { cookieManager } from \"./cookie\";\n\nexport function createBrowserStorage(): Storage {\n return {\n getItem(key: string): string | null {\n return cookieManager.getItem(key) || localStorage.getItem(key);\n },\n\n removeItem(key: string): void {\n cookieManager.removeItem(key);\n localStorage.removeItem(key);\n },\n\n setItem(key: string, data: string): void {\n const oneYear = 31556952000;\n localStorage.setItem(key, data);\n cookieManager.setItem(key, data, oneYear);\n },\n };\n}\n","import { ConfigManager } from \"../../config/config\";\nimport { buildBrowserEnvironment } from \"../browser/browser\";\nimport { localStorageAvailable } from \"../browser/storage/availability\";\nimport { Environment } from \"../environment\";\nimport { buildNullEnvironment } from \"../null/null\";\n\nexport interface EnvironmentManager {\n get: () => Readonly<Environment>;\n}\n\nfunction buildEnvironment(configManager: ConfigManager) {\n const active = configManager.get().mode !== \"disabled\";\n\n if (active && isBrowser() && localStorageAvailable()) {\n return buildBrowserEnvironment();\n }\n\n return buildNullEnvironment();\n}\n\nfunction isBrowser() {\n try {\n return typeof window === \"object\";\n } catch (e) {\n return false;\n }\n}\n\nexport function createEnvironmentManager(\n configManager: ConfigManager\n): Readonly<EnvironmentManager> {\n return {\n get: () => Object.freeze(buildEnvironment(configManager)),\n };\n}\n","// From: https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#feature-detecting_localstorage\nexport function localStorageAvailable() {\n try {\n const x = \"__storage_test__\";\n localStorage.setItem(x, x);\n localStorage.removeItem(x);\n return true;\n } catch (e) {\n return (\n e instanceof DOMException &&\n e.name === \"QuotaExceededError\" &&\n // acknowledge QuotaExceededError only if there's something already stored\n localStorage &&\n localStorage.length !== 0\n );\n }\n}\n","import { Environment } from \"../environment\";\nimport { createNullStorage } from \"../storage\";\n\nexport function buildNullEnvironment(): Environment {\n return {\n runtime: \"null\",\n send: () => undefined,\n getReferrer: () => null,\n getLocation: () => null,\n getUserAgent: () => null,\n generateUUID: () => \"\",\n storage: createNullStorage(),\n };\n}\n","export interface Storage {\n getItem: (key: string) => string | null;\n removeItem: (key: string) => void;\n setItem: (key: string, data: string) => void;\n}\n\nexport function createNullStorage(): Storage {\n return {\n getItem(): string | null {\n return null;\n },\n removeItem(): void {\n return;\n },\n setItem(): void {\n return;\n },\n };\n}\n","import { emit } from \"./emit/emit\";\nimport { createClientIdManager } from \"./client-id/client-id\";\nimport { createRelayEvent, RelayEvent } from \"./event/relay-event\";\nimport { version } from \"./version\";\nimport { createMeta, Meta, EventConfig } from \"./event/meta/meta\";\nimport { createListenerManager, EventCallback } from \"./listener/listener\";\nimport { createConfigManager, RelayConfig } from \"./config/config\";\nimport { createEnvironmentManager } from \"./environment/manager/manager\";\nimport { RelayPayload } from \"./relay-payload\";\n\n/**\n * Function that detaches an event callback.\n * @typedef {function} Off\n * @returns {void}\n */\nexport type Off = () => void;\n\n/**\n * Relay instance.\n * This object provides a comprehensive set of variables and methods for interacting with the Event API.\n */\ninterface Relay {\n /**\n * Sends an event to the Event API.\n * @param {string} type - event's type to be emitted.\n * @param {Record<string,any>} payload - payload to include within the event.\n * @returns {void}\n */\n emit: (type: string, payload: Record<string, any>) => void;\n\n /**\n * Gets the client-side generated meta object.\n * @param {string} type - event's type that will be included in the meta object.\n * @returns {Meta}\n */\n getMeta: (type: string) => Meta;\n\n /**\n * Attaches an event callback to either all event types or a specific one.\n * The callback set will be called when an event with the specified type is emitted.\n * It’s not possible to modify the payload of the event sent to Coveo using this listener.\n * Setting type as \"*\" will trigger the callback for all event types.\n * Returns the \"off\" function to detach the event callback.\n * @param {string} type - event's type.\n * @param {EventCallback} callback - callback that should be called when the event is emitted.\n * @returns {Off}\n */\n on: (type: string, callback: EventCallback) => Off;\n\n /**\n * Detach callback(s) from events.\n * If only the \"type\" parameter is set, all callbacks for the specified type will be removed.\n * @param {string} type - event's type.\n * @param {EventCallback} callback - callback that should be removed.\n * @returns {void}\n */\n off: (type: string, callback?: EventCallback) => void;\n\n /**\n * Updates Relay's configuration after its initialization.\n * @param {Partial<RelayConfig>} config - configuration that should be updated.\n * @returns {void}\n */\n updateConfig: (config: Partial<RelayConfig>) => void;\n\n /**\n * Current version of the Relay library.\n */\n version: string;\n}\n\n/**\n * Initializes the Relay library object.\n * @param {RelayConfig} initialConfig\n * @returns {Relay}\n */\nexport function createRelay(initialConfig: RelayConfig): Relay {\n const configManager = createConfigManager(initialConfig);\n const listenerManager = createListenerManager();\n const environmentManager = createEnvironmentManager(configManager);\n const clientIdManager = createClientIdManager(environmentManager);\n\n return {\n emit: (type: string, payload: Record<string, any>) => {\n const config = configManager.get();\n const environment = environmentManager.get();\n\n const event = createRelayEvent(\n type,\n payload,\n config,\n environment,\n clientIdManager\n );\n\n return emit({\n config,\n environment,\n event,\n listenerManager,\n });\n },\n getMeta: (type: string) =>\n createMeta(\n type,\n configManager.get(),\n environmentManager.get(),\n clientIdManager\n ),\n on: (type: string, callback: EventCallback) =>\n listenerManager.add({ type, callback }),\n off: (type: string, callback?: EventCallback) =>\n listenerManager.remove(type, callback),\n updateConfig: (config: Partial<RelayConfig>) =>\n configManager.update(config),\n version,\n };\n}\n\nexport type {\n Relay,\n Meta,\n EventConfig,\n EventCallback,\n RelayConfig,\n RelayPayload,\n RelayEvent,\n};\n","import { ClientIdManager } from \"../client-id/client-id\";\nimport { Environment } from \"../environment/environment\";\nimport { RelayPayload } from \"../relay-payload\";\nimport { RelayConfig } from \"../relay\";\nimport { createMeta, Meta } from \"./meta/meta\";\n\n/**\n * Defines the structure of a RelayEvent, extending the RelayPayload.\n */\nexport interface RelayEvent extends RelayPayload {\n /**\n * Read-only `meta` property of Meta type.\n */\n meta: Readonly<Meta>;\n}\n\nexport function createRelayEvent(\n type: string,\n payload: RelayPayload,\n config: RelayConfig,\n environment: Environment,\n clientIdManager: ClientIdManager\n): Readonly<RelayEvent> {\n return {\n ...payload,\n meta: createMeta(type, config, environment, clientIdManager),\n };\n}\n","import { Environment } from \"../environment/environment\";\nimport { ListenerManager } from \"../listener/listener\";\nimport { RelayEvent } from \"../event/relay-event\";\nimport { RelayConfig } from \"../relay\";\n\nexport interface EmitParams {\n config: RelayConfig;\n environment: Environment;\n event: RelayEvent;\n listenerManager: ListenerManager;\n}\n\nexport function emit({\n config,\n environment,\n event,\n listenerManager,\n}: EmitParams) {\n const { url, token, mode } = config;\n const isEnabled = mode !== \"disabled\";\n\n if (isEnabled) {\n listenerManager.call(event);\n environment.send(url, token, event);\n }\n}\n"],"names":["REGEX","getRandomValues","byteToHex","i","push","toString","slice","rnds8","Uint8Array","rng","crypto","bind","Error","native","randomUUID","v4","options","buf","offset","rnds","random","arr","toLowerCase","unsafeStringify","createClientIdManager","environmentManager","getClientId","key","environment","get","storage","existingClientId","getItem","clientId","uuid","test","generateUUID","setItem","version","getSource","config","source","concat","createMeta","type","clientIdManager","getReferrer","getLocation","getUserAgent","eventConfig","trackingId","getEventConfig","Object","freeze","ts","Date","now","userAgent","referrer","location","ANY_EVENT_TYPE","createListenerManager","listeners","getListenerIndex","callback","findIndex","listener","remove","index","splice","removeOne","length","removeMultiple","add","call","event","forEach","isMatchesType","meta","e","console","error","pick","url","token","rest","mode","cookieManager","prefix","cookiePrefix","cookieArray","document","cookie","split","prettifyCookie","replace","lastIndexOf","substring","data","expire","domain","host","parts","join","getDomain","window","hostname","expireSection","getTime","toUTCString","domainSection","removeItem","this","createCookieManager","buildBrowserEnvironment","runtime","send","response","navigator","sendBeacon","Blob","JSON","stringify","messenger","isBrowser","sendMessage","message","postMessage","createExplorerMessenger","kind","href","uuidv4","localStorage","buildEnvironment","configManager","x","DOMException","name","localStorageAvailable","createRelay","initialConfig","_config","update","updatedConfig","createConfigManager","listenerManager","createEnvironmentManager","emit","payload","createRelayEvent","getMeta","on","off","updateConfig"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,6,13]}
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../src/environment/browser/browser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAU7C,wBAAgB,uBAAuB,IAAI,WAAW,CA0BrD"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../src/environment/browser/browser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAW7C,wBAAgB,uBAAuB,IAAI,WAAW,CA0BrD"}
@@ -47,7 +47,7 @@
47
47
  "fileName": "event/meta/meta.ts",
48
48
  "line": 13,
49
49
  "character": 2,
50
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/event/meta/meta.ts#L13"
50
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/event/meta/meta.ts#L13"
51
51
  }
52
52
  ],
53
53
  "type": {
@@ -69,7 +69,7 @@
69
69
  "fileName": "event/meta/meta.ts",
70
70
  "line": 9,
71
71
  "character": 17,
72
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/event/meta/meta.ts#L9"
72
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/event/meta/meta.ts#L9"
73
73
  }
74
74
  ]
75
75
  },
@@ -115,7 +115,7 @@
115
115
  "fileName": "event/meta/meta.ts",
116
116
  "line": 44,
117
117
  "character": 2,
118
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/event/meta/meta.ts#L44"
118
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/event/meta/meta.ts#L44"
119
119
  }
120
120
  ],
121
121
  "type": {
@@ -142,7 +142,7 @@
142
142
  "fileName": "event/meta/meta.ts",
143
143
  "line": 29,
144
144
  "character": 2,
145
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/event/meta/meta.ts#L29"
145
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/event/meta/meta.ts#L29"
146
146
  }
147
147
  ],
148
148
  "type": {
@@ -171,7 +171,7 @@
171
171
  "fileName": "event/meta/meta.ts",
172
172
  "line": 59,
173
173
  "character": 2,
174
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/event/meta/meta.ts#L59"
174
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/event/meta/meta.ts#L59"
175
175
  }
176
176
  ],
177
177
  "type": {
@@ -207,7 +207,7 @@
207
207
  "fileName": "event/meta/meta.ts",
208
208
  "line": 54,
209
209
  "character": 2,
210
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/event/meta/meta.ts#L54"
210
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/event/meta/meta.ts#L54"
211
211
  }
212
212
  ],
213
213
  "type": {
@@ -243,7 +243,7 @@
243
243
  "fileName": "event/meta/meta.ts",
244
244
  "line": 39,
245
245
  "character": 2,
246
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/event/meta/meta.ts#L39"
246
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/event/meta/meta.ts#L39"
247
247
  }
248
248
  ],
249
249
  "type": {
@@ -273,7 +273,7 @@
273
273
  "fileName": "event/meta/meta.ts",
274
274
  "line": 34,
275
275
  "character": 2,
276
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/event/meta/meta.ts#L34"
276
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/event/meta/meta.ts#L34"
277
277
  }
278
278
  ],
279
279
  "type": {
@@ -300,7 +300,7 @@
300
300
  "fileName": "event/meta/meta.ts",
301
301
  "line": 24,
302
302
  "character": 2,
303
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/event/meta/meta.ts#L24"
303
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/event/meta/meta.ts#L24"
304
304
  }
305
305
  ],
306
306
  "type": {
@@ -327,7 +327,7 @@
327
327
  "fileName": "event/meta/meta.ts",
328
328
  "line": 49,
329
329
  "character": 2,
330
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/event/meta/meta.ts#L49"
330
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/event/meta/meta.ts#L49"
331
331
  }
332
332
  ],
333
333
  "type": {
@@ -365,7 +365,7 @@
365
365
  "fileName": "event/meta/meta.ts",
366
366
  "line": 20,
367
367
  "character": 17,
368
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/event/meta/meta.ts#L20"
368
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/event/meta/meta.ts#L20"
369
369
  }
370
370
  ]
371
371
  },
@@ -395,7 +395,7 @@
395
395
  "fileName": "relay.ts",
396
396
  "line": 29,
397
397
  "character": 2,
398
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L29"
398
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L29"
399
399
  }
400
400
  ],
401
401
  "type": {
@@ -411,7 +411,7 @@
411
411
  "fileName": "relay.ts",
412
412
  "line": 29,
413
413
  "character": 8,
414
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L29"
414
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L29"
415
415
  }
416
416
  ],
417
417
  "signatures": [
@@ -440,7 +440,7 @@
440
440
  "fileName": "relay.ts",
441
441
  "line": 29,
442
442
  "character": 8,
443
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L29"
443
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L29"
444
444
  }
445
445
  ],
446
446
  "parameters": [
@@ -518,7 +518,7 @@
518
518
  "fileName": "relay.ts",
519
519
  "line": 36,
520
520
  "character": 2,
521
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L36"
521
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L36"
522
522
  }
523
523
  ],
524
524
  "type": {
@@ -534,7 +534,7 @@
534
534
  "fileName": "relay.ts",
535
535
  "line": 36,
536
536
  "character": 11,
537
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L36"
537
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L36"
538
538
  }
539
539
  ],
540
540
  "signatures": [
@@ -563,7 +563,7 @@
563
563
  "fileName": "relay.ts",
564
564
  "line": 36,
565
565
  "character": 11,
566
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L36"
566
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L36"
567
567
  }
568
568
  ],
569
569
  "parameters": [
@@ -609,7 +609,7 @@
609
609
  "fileName": "relay.ts",
610
610
  "line": 57,
611
611
  "character": 2,
612
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L57"
612
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L57"
613
613
  }
614
614
  ],
615
615
  "type": {
@@ -625,7 +625,7 @@
625
625
  "fileName": "relay.ts",
626
626
  "line": 57,
627
627
  "character": 7,
628
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L57"
628
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L57"
629
629
  }
630
630
  ],
631
631
  "signatures": [
@@ -654,7 +654,7 @@
654
654
  "fileName": "relay.ts",
655
655
  "line": 57,
656
656
  "character": 7,
657
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L57"
657
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L57"
658
658
  }
659
659
  ],
660
660
  "parameters": [
@@ -721,7 +721,7 @@
721
721
  "fileName": "relay.ts",
722
722
  "line": 48,
723
723
  "character": 2,
724
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L48"
724
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L48"
725
725
  }
726
726
  ],
727
727
  "type": {
@@ -737,7 +737,7 @@
737
737
  "fileName": "relay.ts",
738
738
  "line": 48,
739
739
  "character": 6,
740
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L48"
740
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L48"
741
741
  }
742
742
  ],
743
743
  "signatures": [
@@ -766,7 +766,7 @@
766
766
  "fileName": "relay.ts",
767
767
  "line": 48,
768
768
  "character": 6,
769
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L48"
769
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L48"
770
770
  }
771
771
  ],
772
772
  "parameters": [
@@ -833,7 +833,7 @@
833
833
  "fileName": "relay.ts",
834
834
  "line": 64,
835
835
  "character": 2,
836
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L64"
836
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L64"
837
837
  }
838
838
  ],
839
839
  "type": {
@@ -849,7 +849,7 @@
849
849
  "fileName": "relay.ts",
850
850
  "line": 64,
851
851
  "character": 16,
852
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L64"
852
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L64"
853
853
  }
854
854
  ],
855
855
  "signatures": [
@@ -878,7 +878,7 @@
878
878
  "fileName": "relay.ts",
879
879
  "line": 64,
880
880
  "character": 16,
881
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L64"
881
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L64"
882
882
  }
883
883
  ],
884
884
  "parameters": [
@@ -943,7 +943,7 @@
943
943
  "fileName": "relay.ts",
944
944
  "line": 69,
945
945
  "character": 2,
946
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L69"
946
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L69"
947
947
  }
948
948
  ],
949
949
  "type": {
@@ -970,7 +970,7 @@
970
970
  "fileName": "relay.ts",
971
971
  "line": 22,
972
972
  "character": 10,
973
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L22"
973
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L22"
974
974
  }
975
975
  ]
976
976
  },
@@ -1061,7 +1061,7 @@
1061
1061
  "fileName": "config/config.ts",
1062
1062
  "line": 26,
1063
1063
  "character": 2,
1064
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/config/config.ts#L26"
1064
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/config/config.ts#L26"
1065
1065
  }
1066
1066
  ],
1067
1067
  "type": {
@@ -1099,7 +1099,7 @@
1099
1099
  "fileName": "config/config.ts",
1100
1100
  "line": 33,
1101
1101
  "character": 2,
1102
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/config/config.ts#L33"
1102
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/config/config.ts#L33"
1103
1103
  }
1104
1104
  ],
1105
1105
  "type": {
@@ -1129,7 +1129,7 @@
1129
1129
  "fileName": "config/config.ts",
1130
1130
  "line": 13,
1131
1131
  "character": 2,
1132
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/config/config.ts#L13"
1132
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/config/config.ts#L13"
1133
1133
  }
1134
1134
  ],
1135
1135
  "type": {
@@ -1156,7 +1156,7 @@
1156
1156
  "fileName": "config/config.ts",
1157
1157
  "line": 18,
1158
1158
  "character": 2,
1159
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/config/config.ts#L18"
1159
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/config/config.ts#L18"
1160
1160
  }
1161
1161
  ],
1162
1162
  "type": {
@@ -1183,7 +1183,7 @@
1183
1183
  "fileName": "config/config.ts",
1184
1184
  "line": 8,
1185
1185
  "character": 2,
1186
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/config/config.ts#L8"
1186
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/config/config.ts#L8"
1187
1187
  }
1188
1188
  ],
1189
1189
  "type": {
@@ -1209,7 +1209,7 @@
1209
1209
  "fileName": "config/config.ts",
1210
1210
  "line": 4,
1211
1211
  "character": 17,
1212
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/config/config.ts#L4"
1212
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/config/config.ts#L4"
1213
1213
  }
1214
1214
  ]
1215
1215
  },
@@ -1255,7 +1255,7 @@
1255
1255
  "fileName": "event/relay-event.ts",
1256
1256
  "line": 14,
1257
1257
  "character": 2,
1258
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/event/relay-event.ts#L14"
1258
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/event/relay-event.ts#L14"
1259
1259
  }
1260
1260
  ],
1261
1261
  "type": {
@@ -1290,7 +1290,7 @@
1290
1290
  "fileName": "event/relay-event.ts",
1291
1291
  "line": 10,
1292
1292
  "character": 17,
1293
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/event/relay-event.ts#L10"
1293
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/event/relay-event.ts#L10"
1294
1294
  }
1295
1295
  ],
1296
1296
  "extendedTypes": [
@@ -1313,7 +1313,7 @@
1313
1313
  "fileName": "listener/listener.ts",
1314
1314
  "line": 11,
1315
1315
  "character": 12,
1316
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/listener/listener.ts#L11"
1316
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/listener/listener.ts#L11"
1317
1317
  }
1318
1318
  ],
1319
1319
  "type": {
@@ -1329,7 +1329,7 @@
1329
1329
  "fileName": "listener/listener.ts",
1330
1330
  "line": 11,
1331
1331
  "character": 28,
1332
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/listener/listener.ts#L11"
1332
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/listener/listener.ts#L11"
1333
1333
  }
1334
1334
  ],
1335
1335
  "signatures": [
@@ -1396,7 +1396,7 @@
1396
1396
  "fileName": "relay.ts",
1397
1397
  "line": 16,
1398
1398
  "character": 12,
1399
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L16"
1399
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L16"
1400
1400
  }
1401
1401
  ],
1402
1402
  "type": {
@@ -1412,7 +1412,7 @@
1412
1412
  "fileName": "relay.ts",
1413
1413
  "line": 16,
1414
1414
  "character": 18,
1415
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L16"
1415
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L16"
1416
1416
  }
1417
1417
  ],
1418
1418
  "signatures": [
@@ -1464,7 +1464,7 @@
1464
1464
  "fileName": "relay-payload.ts",
1465
1465
  "line": 5,
1466
1466
  "character": 12,
1467
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay-payload.ts#L5"
1467
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay-payload.ts#L5"
1468
1468
  }
1469
1469
  ],
1470
1470
  "type": {
@@ -1505,7 +1505,7 @@
1505
1505
  "fileName": "relay.ts",
1506
1506
  "line": 77,
1507
1507
  "character": 16,
1508
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L77"
1508
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L77"
1509
1509
  }
1510
1510
  ],
1511
1511
  "signatures": [
@@ -1534,7 +1534,7 @@
1534
1534
  "fileName": "relay.ts",
1535
1535
  "line": 77,
1536
1536
  "character": 16,
1537
- "url": "https://github.com/coveo-platform/relay/blob/2b1ac09/packages/relay/src/relay.ts#L77"
1537
+ "url": "https://github.com/coveo-platform/relay/blob/ff9acde/packages/relay/src/relay.ts#L77"
1538
1538
  }
1539
1539
  ],
1540
1540
  "parameters": [
@@ -1589,7 +1589,7 @@
1589
1589
  }
1590
1590
  ],
1591
1591
  "packageName": "@coveo/relay",
1592
- "packageVersion": "0.8.0",
1592
+ "packageVersion": "0.8.2",
1593
1593
  "readme": [
1594
1594
  {
1595
1595
  "kind": "text",
package/lib/relay.cjs CHANGED
@@ -1,5 +1,7 @@
1
1
  'use strict';
2
2
 
3
+ var crypto = require('node:crypto');
4
+
3
5
  function emit({ config, environment, event, listenerManager, }) {
4
6
  const { url, token, mode } = config;
5
7
  const isEnabled = mode !== "disabled";
@@ -9,12 +11,65 @@ function emit({ config, environment, event, listenerManager, }) {
9
11
  }
10
12
  }
11
13
 
12
- var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
14
+ var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;
13
15
 
14
16
  function validate(uuid) {
15
17
  return typeof uuid === 'string' && REGEX.test(uuid);
16
18
  }
17
19
 
20
+ /**
21
+ * Convert array of 16 byte values to UUID string format of the form:
22
+ * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
23
+ */
24
+ const byteToHex = [];
25
+ for (let i = 0; i < 256; ++i) {
26
+ byteToHex.push((i + 0x100).toString(16).slice(1));
27
+ }
28
+ function unsafeStringify(arr, offset = 0) {
29
+ // Note: Be careful editing this code! It's been tuned for performance
30
+ // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
31
+ //
32
+ // Note to future-self: No, you can't remove the `toLowerCase()` call.
33
+ // REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351
34
+ return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
35
+ }
36
+
37
+ const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate
38
+ let poolPtr = rnds8Pool.length;
39
+ function rng() {
40
+ if (poolPtr > rnds8Pool.length - 16) {
41
+ crypto.randomFillSync(rnds8Pool);
42
+ poolPtr = 0;
43
+ }
44
+ return rnds8Pool.slice(poolPtr, poolPtr += 16);
45
+ }
46
+
47
+ var native = {
48
+ randomUUID: crypto.randomUUID
49
+ };
50
+
51
+ function v4(options, buf, offset) {
52
+ if (native.randomUUID && !buf && !options) {
53
+ return native.randomUUID();
54
+ }
55
+ options = options || {};
56
+ const rnds = options.random || (options.rng || rng)();
57
+
58
+ // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
59
+ rnds[6] = rnds[6] & 0x0f | 0x40;
60
+ rnds[8] = rnds[8] & 0x3f | 0x80;
61
+
62
+ // Copy bytes to buffer, if provided
63
+ if (buf) {
64
+ offset = offset || 0;
65
+ for (let i = 0; i < 16; ++i) {
66
+ buf[offset + i] = rnds[i];
67
+ }
68
+ return buf;
69
+ }
70
+ return unsafeStringify(rnds);
71
+ }
72
+
18
73
  function createClientIdManager(environmentManager) {
19
74
  return {
20
75
  getClientId: () => {
@@ -31,7 +86,7 @@ function createClientIdManager(environmentManager) {
31
86
  };
32
87
  }
33
88
 
34
- const version = "0.8.0";
89
+ const version = "0.8.2";
35
90
 
36
91
  function getEventConfig(config) {
37
92
  const { trackingId } = config;
@@ -214,7 +269,7 @@ function buildBrowserEnvironment() {
214
269
  getReferrer: () => getReferrer(),
215
270
  getLocation: () => window.location.href,
216
271
  getUserAgent: () => navigator.userAgent,
217
- generateUUID: () => crypto.randomUUID(),
272
+ generateUUID: () => v4(),
218
273
  storage: createBrowserStorage(),
219
274
  };
220
275
  }
package/lib/relay.js CHANGED
@@ -7,12 +7,74 @@ function emit({ config, environment, event, listenerManager, }) {
7
7
  }
8
8
  }
9
9
 
10
- var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
10
+ var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;
11
11
 
12
12
  function validate(uuid) {
13
13
  return typeof uuid === 'string' && REGEX.test(uuid);
14
14
  }
15
15
 
16
+ /**
17
+ * Convert array of 16 byte values to UUID string format of the form:
18
+ * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
19
+ */
20
+ var byteToHex = [];
21
+ for (var i = 0; i < 256; ++i) {
22
+ byteToHex.push((i + 0x100).toString(16).slice(1));
23
+ }
24
+ function unsafeStringify(arr, offset = 0) {
25
+ // Note: Be careful editing this code! It's been tuned for performance
26
+ // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
27
+ //
28
+ // Note to future-self: No, you can't remove the `toLowerCase()` call.
29
+ // REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351
30
+ return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
31
+ }
32
+
33
+ // Unique ID creation requires a high quality random # generator. In the browser we therefore
34
+ // require the crypto API and do not support built-in fallback to lower quality random number
35
+ // generators (like Math.random()).
36
+
37
+ var getRandomValues;
38
+ var rnds8 = new Uint8Array(16);
39
+ function rng() {
40
+ // lazy load so that environments that need to polyfill have a chance to do so
41
+ if (!getRandomValues) {
42
+ // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation.
43
+ getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);
44
+ if (!getRandomValues) {
45
+ throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
46
+ }
47
+ }
48
+ return getRandomValues(rnds8);
49
+ }
50
+
51
+ var randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);
52
+ var native = {
53
+ randomUUID
54
+ };
55
+
56
+ function v4(options, buf, offset) {
57
+ if (native.randomUUID && !buf && !options) {
58
+ return native.randomUUID();
59
+ }
60
+ options = options || {};
61
+ var rnds = options.random || (options.rng || rng)();
62
+
63
+ // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
64
+ rnds[6] = rnds[6] & 0x0f | 0x40;
65
+ rnds[8] = rnds[8] & 0x3f | 0x80;
66
+
67
+ // Copy bytes to buffer, if provided
68
+ if (buf) {
69
+ offset = offset || 0;
70
+ for (var i = 0; i < 16; ++i) {
71
+ buf[offset + i] = rnds[i];
72
+ }
73
+ return buf;
74
+ }
75
+ return unsafeStringify(rnds);
76
+ }
77
+
16
78
  function createClientIdManager(environmentManager) {
17
79
  return {
18
80
  getClientId: () => {
@@ -29,7 +91,7 @@ function createClientIdManager(environmentManager) {
29
91
  };
30
92
  }
31
93
 
32
- const version = "0.8.0";
94
+ const version = "0.8.2";
33
95
 
34
96
  function getEventConfig(config) {
35
97
  const { trackingId } = config;
@@ -212,7 +274,7 @@ function buildBrowserEnvironment() {
212
274
  getReferrer: () => getReferrer(),
213
275
  getLocation: () => window.location.href,
214
276
  getUserAgent: () => navigator.userAgent,
215
- generateUUID: () => crypto.randomUUID(),
277
+ generateUUID: () => v4(),
216
278
  storage: createBrowserStorage(),
217
279
  };
218
280
  }
package/lib/relay.mjs CHANGED
@@ -1,3 +1,5 @@
1
+ import crypto from 'node:crypto';
2
+
1
3
  function emit({ config, environment, event, listenerManager, }) {
2
4
  const { url, token, mode } = config;
3
5
  const isEnabled = mode !== "disabled";
@@ -7,12 +9,65 @@ function emit({ config, environment, event, listenerManager, }) {
7
9
  }
8
10
  }
9
11
 
10
- var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
12
+ var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;
11
13
 
12
14
  function validate(uuid) {
13
15
  return typeof uuid === 'string' && REGEX.test(uuid);
14
16
  }
15
17
 
18
+ /**
19
+ * Convert array of 16 byte values to UUID string format of the form:
20
+ * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
21
+ */
22
+ const byteToHex = [];
23
+ for (let i = 0; i < 256; ++i) {
24
+ byteToHex.push((i + 0x100).toString(16).slice(1));
25
+ }
26
+ function unsafeStringify(arr, offset = 0) {
27
+ // Note: Be careful editing this code! It's been tuned for performance
28
+ // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
29
+ //
30
+ // Note to future-self: No, you can't remove the `toLowerCase()` call.
31
+ // REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351
32
+ return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
33
+ }
34
+
35
+ const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate
36
+ let poolPtr = rnds8Pool.length;
37
+ function rng() {
38
+ if (poolPtr > rnds8Pool.length - 16) {
39
+ crypto.randomFillSync(rnds8Pool);
40
+ poolPtr = 0;
41
+ }
42
+ return rnds8Pool.slice(poolPtr, poolPtr += 16);
43
+ }
44
+
45
+ var native = {
46
+ randomUUID: crypto.randomUUID
47
+ };
48
+
49
+ function v4(options, buf, offset) {
50
+ if (native.randomUUID && !buf && !options) {
51
+ return native.randomUUID();
52
+ }
53
+ options = options || {};
54
+ const rnds = options.random || (options.rng || rng)();
55
+
56
+ // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
57
+ rnds[6] = rnds[6] & 0x0f | 0x40;
58
+ rnds[8] = rnds[8] & 0x3f | 0x80;
59
+
60
+ // Copy bytes to buffer, if provided
61
+ if (buf) {
62
+ offset = offset || 0;
63
+ for (let i = 0; i < 16; ++i) {
64
+ buf[offset + i] = rnds[i];
65
+ }
66
+ return buf;
67
+ }
68
+ return unsafeStringify(rnds);
69
+ }
70
+
16
71
  function createClientIdManager(environmentManager) {
17
72
  return {
18
73
  getClientId: () => {
@@ -29,7 +84,7 @@ function createClientIdManager(environmentManager) {
29
84
  };
30
85
  }
31
86
 
32
- const version = "0.8.0";
87
+ const version = "0.8.2";
33
88
 
34
89
  function getEventConfig(config) {
35
90
  const { trackingId } = config;
@@ -212,7 +267,7 @@ function buildBrowserEnvironment() {
212
267
  getReferrer: () => getReferrer(),
213
268
  getLocation: () => window.location.href,
214
269
  getUserAgent: () => navigator.userAgent,
215
- generateUUID: () => crypto.randomUUID(),
270
+ generateUUID: () => v4(),
216
271
  storage: createBrowserStorage(),
217
272
  };
218
273
  }
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../src/environment/browser/browser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAU7C,wBAAgB,uBAAuB,IAAI,WAAW,CA0BrD"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../src/environment/browser/browser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAW7C,wBAAgB,uBAAuB,IAAI,WAAW,CA0BrD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coveo/relay",
3
- "version": "0.8.0",
3
+ "version": "0.8.2",
4
4
  "description": "A library for sending analytics events using Coveo's Event protocol.",
5
5
  "files": [
6
6
  "lib/**/*"
@@ -50,7 +50,7 @@
50
50
  "jest": "^29.7.0",
51
51
  "jest-environment-jsdom": "^29.7.0",
52
52
  "rimraf": "5.0.5",
53
- "rollup": "^3.28.0",
53
+ "rollup": "^3.29.5",
54
54
  "ts-jest": "^29.1.1",
55
55
  "typedoc": "^0.25.3",
56
56
  "typescript": "^5.1.6",
@@ -58,10 +58,10 @@
58
58
  },
59
59
  "dependencies": {
60
60
  "@coveo/explorer-messenger": "^0.4.0",
61
- "uuid": "^9.0.1"
61
+ "uuid": "^10.0.0"
62
62
  },
63
63
  "scripts": {
64
- "build": "npm run clean && rollup --config ./config/rollup.config.mjs && npm run typedoc",
64
+ "build": "npm run clean && rollup --config ./config/rollup.config.mjs && npm run typedoc && npm run lint:fix",
65
65
  "clean": "rimraf -rf ./lib",
66
66
  "lint": "eslint src/**",
67
67
  "lint:fix": "npm run lint -- --fix",