@coveo/relay 0.8.2 → 0.8.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cdn/relay.min.js +1 -1
- package/lib/cdn/relay.min.js.map +1 -1
- package/lib/client-id/client-id.d.ts.map +1 -0
- package/lib/config/config.d.ts.map +1 -0
- package/lib/docs/relay-docs.json +120 -91
- package/lib/emit/emit.d.ts.map +1 -0
- package/lib/environment/browser/browser.d.ts.map +1 -0
- package/lib/environment/browser/storage/availability.d.ts.map +1 -0
- package/lib/environment/browser/storage/cookie.d.ts.map +1 -0
- package/lib/environment/browser/storage/storage.d.ts.map +1 -0
- package/lib/environment/environment.d.ts.map +1 -0
- package/lib/environment/manager/manager.d.ts.map +1 -0
- package/lib/environment/null/null.d.ts.map +1 -0
- package/lib/environment/storage.d.ts.map +1 -0
- package/lib/event/meta/meta.d.ts.map +1 -0
- package/lib/event/relay-event.d.ts.map +1 -0
- package/lib/listener/listener.d.ts.map +1 -0
- package/lib/relay-payload.d.ts.map +1 -0
- package/lib/relay.cjs +1 -1
- package/lib/relay.d.ts.map +1 -0
- package/lib/relay.js +1 -1
- package/lib/relay.mjs +1 -1
- package/lib/version.d.ts.map +1 -0
- package/package.json +10 -10
- package/lib/cdn/types/client-id/client-id.d.ts.map +0 -1
- package/lib/cdn/types/config/config.d.ts.map +0 -1
- package/lib/cdn/types/emit/emit.d.ts.map +0 -1
- package/lib/cdn/types/environment/browser/browser.d.ts.map +0 -1
- package/lib/cdn/types/environment/browser/storage/availability.d.ts.map +0 -1
- package/lib/cdn/types/environment/browser/storage/cookie.d.ts.map +0 -1
- package/lib/cdn/types/environment/browser/storage/storage.d.ts.map +0 -1
- package/lib/cdn/types/environment/environment.d.ts.map +0 -1
- package/lib/cdn/types/environment/manager/manager.d.ts.map +0 -1
- package/lib/cdn/types/environment/null/null.d.ts.map +0 -1
- package/lib/cdn/types/environment/storage.d.ts.map +0 -1
- package/lib/cdn/types/event/meta/meta.d.ts.map +0 -1
- package/lib/cdn/types/event/relay-event.d.ts.map +0 -1
- package/lib/cdn/types/listener/listener.d.ts.map +0 -1
- package/lib/cdn/types/relay-payload.d.ts.map +0 -1
- package/lib/cdn/types/relay.d.ts.map +0 -1
- package/lib/cdn/types/version.d.ts.map +0 -1
- package/lib/types/client-id/client-id.d.ts +0 -6
- package/lib/types/client-id/client-id.d.ts.map +0 -1
- package/lib/types/config/config.d.ts +0 -36
- package/lib/types/config/config.d.ts.map +0 -1
- package/lib/types/emit/emit.d.ts +0 -12
- package/lib/types/emit/emit.d.ts.map +0 -1
- package/lib/types/environment/browser/browser.d.ts +0 -3
- package/lib/types/environment/browser/browser.d.ts.map +0 -1
- package/lib/types/environment/browser/storage/availability.d.ts +0 -2
- package/lib/types/environment/browser/storage/availability.d.ts.map +0 -1
- package/lib/types/environment/browser/storage/cookie.d.ts +0 -7
- package/lib/types/environment/browser/storage/cookie.d.ts.map +0 -1
- package/lib/types/environment/browser/storage/storage.d.ts +0 -3
- package/lib/types/environment/browser/storage/storage.d.ts.map +0 -1
- package/lib/types/environment/environment.d.ts +0 -12
- package/lib/types/environment/environment.d.ts.map +0 -1
- package/lib/types/environment/manager/manager.d.ts +0 -7
- package/lib/types/environment/manager/manager.d.ts.map +0 -1
- package/lib/types/environment/null/null.d.ts +0 -3
- package/lib/types/environment/null/null.d.ts.map +0 -1
- package/lib/types/environment/storage.d.ts +0 -7
- package/lib/types/environment/storage.d.ts.map +0 -1
- package/lib/types/event/meta/meta.d.ts +0 -52
- package/lib/types/event/meta/meta.d.ts.map +0 -1
- package/lib/types/event/relay-event.d.ts +0 -16
- package/lib/types/event/relay-event.d.ts.map +0 -1
- package/lib/types/listener/listener.d.ts +0 -20
- package/lib/types/listener/listener.d.ts.map +0 -1
- package/lib/types/relay-payload.d.ts +0 -6
- package/lib/types/relay-payload.d.ts.map +0 -1
- package/lib/types/relay.d.ts +0 -67
- package/lib/types/relay.d.ts.map +0 -1
- package/lib/types/version.d.ts +0 -2
- package/lib/types/version.d.ts.map +0 -1
- /package/lib/{cdn/types/client-id → client-id}/client-id.d.ts +0 -0
- /package/lib/{cdn/types/config → config}/config.d.ts +0 -0
- /package/lib/{cdn/types/emit → emit}/emit.d.ts +0 -0
- /package/lib/{cdn/types/environment → environment}/browser/browser.d.ts +0 -0
- /package/lib/{cdn/types/environment → environment}/browser/storage/availability.d.ts +0 -0
- /package/lib/{cdn/types/environment → environment}/browser/storage/cookie.d.ts +0 -0
- /package/lib/{cdn/types/environment → environment}/browser/storage/storage.d.ts +0 -0
- /package/lib/{cdn/types/environment → environment}/environment.d.ts +0 -0
- /package/lib/{cdn/types/environment → environment}/manager/manager.d.ts +0 -0
- /package/lib/{cdn/types/environment → environment}/null/null.d.ts +0 -0
- /package/lib/{cdn/types/environment → environment}/storage.d.ts +0 -0
- /package/lib/{cdn/types/event → event}/meta/meta.d.ts +0 -0
- /package/lib/{cdn/types/event → event}/relay-event.d.ts +0 -0
- /package/lib/{cdn/types/listener → listener}/listener.d.ts +0 -0
- /package/lib/{cdn/types/relay-payload.d.ts → relay-payload.d.ts} +0 -0
- /package/lib/{cdn/types/relay.d.ts → relay.d.ts} +0 -0
- /package/lib/{cdn/types/version.d.ts → version.d.ts} +0 -0
package/lib/cdn/relay.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
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.
|
|
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.6";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()})}function g(){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)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 d({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 m=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 p(){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=>m.getItem(e)||localStorage.getItem(e),removeItem(e){m.removeItem(e),localStorage.removeItem(e)},setItem(e,t){localStorage.setItem(e,t),m.setItem(e,t,31556952e3)}}}}function I(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}}()?p():{runtime:"null",send:()=>{},getReferrer:()=>null,getLocation:()=>null,getUserAgent:()=>null,generateUUID:()=>"",storage:{getItem:()=>null,removeItem(){},setItem(){}}}}function y(e){const t=function(e){let t=d(e);return{get:()=>t,update:e=>{t=d({...t,...e})}}}(e),n=g(),r=function(e){return{get:()=>Object.freeze(I(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{y as createRelay};
|
|
2
2
|
//# sourceMappingURL=relay.min.js.map
|
package/lib/cdn/relay.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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
|
+
{"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","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":"AAAA,IAAAA,EAAe,2JCOf,IADA,ICFIC,EDEAC,EAAY,GACPC,EAAI,EAAGA,EAAI,MAAOA,EACzBD,EAAUE,MAAMD,EAAI,KAAOE,SAAS,IAAIC,MAAM,ICHhD,IAAIC,EAAQ,IAAIC,WAAW,IACZ,SAASC,IAEtB,IAAKR,KAEHA,EAAoC,oBAAXS,QAA0BA,OAAOT,iBAAmBS,OAAOT,gBAAgBU,KAAKD,SAEvG,MAAM,IAAIE,MAAM,4GAGpB,OAAOX,EAAgBM,EACzB,CChBA,IACeM,EAAA,CACbC,WAFiC,oBAAXJ,QAA0BA,OAAOI,YAAcJ,OAAOI,WAAWH,KAAKD,SCG9F,SAASK,EAAGC,EAASC,EAAKC,GACxB,GAAIL,EAAOC,aAAeG,IAAQD,EAChC,OAAOH,EAAOC,aAGhB,IAAIK,GADJH,EAAUA,GAAW,IACFI,SAAWJ,EAAQP,KAAOA,KAO7C,GAJAU,EAAK,GAAe,GAAVA,EAAK,GAAY,GAC3BA,EAAK,GAAe,GAAVA,EAAK,GAAY,IAGvBF,EAAK,CACPC,EAASA,GAAU,EACnB,IAAK,IAAIf,EAAI,EAAGA,EAAI,KAAMA,EACxBc,EAAIC,EAASf,GAAKgB,EAAKhB,GAEzB,OAAOc,CACR,CACD,OHZK,SAAyBI,EAAKH,EAAS,GAM5C,OAAQhB,EAAUmB,EAAIH,EAAS,IAAMhB,EAAUmB,EAAIH,EAAS,IAAMhB,EAAUmB,EAAIH,EAAS,IAAMhB,EAAUmB,EAAIH,EAAS,IAAM,IAAMhB,EAAUmB,EAAIH,EAAS,IAAMhB,EAAUmB,EAAIH,EAAS,IAAM,IAAMhB,EAAUmB,EAAIH,EAAS,IAAMhB,EAAUmB,EAAIH,EAAS,IAAM,IAAMhB,EAAUmB,EAAIH,EAAS,IAAMhB,EAAUmB,EAAIH,EAAS,IAAM,IAAMhB,EAAUmB,EAAIH,EAAS,KAAOhB,EAAUmB,EAAIH,EAAS,KAAOhB,EAAUmB,EAAIH,EAAS,KAAOhB,EAAUmB,EAAIH,EAAS,KAAOhB,EAAUmB,EAAIH,EAAS,KAAOhB,EAAUmB,EAAIH,EAAS,MAAMI,aACvf,CGKSC,CAAgBJ,EACzB,CChBM,SAAUK,EACdC,GAEA,MAAO,CACLC,YAAa,KACX,MAAMC,EAAM,YACNC,EAAcH,EAAmBI,MACjCC,EAAUF,EAAYE,QAEtBC,EAAmBD,EAAQE,QAAQL,GACnCM,EACJF,IChBiB,iBADPG,EDiBmBH,IChBA/B,EAAMmC,KAAKD,IDiBpCH,EACAH,EAAYQ,eCnBxB,IAAkBF,EDqBZ,OADAJ,EAAQO,QAAQV,EAAKM,GACdA,CAAQ,EAGrB,CEzBO,MAAMK,EAAU,QCkEvB,SAASC,EAAUC,GACjB,OAAQA,EAAOC,QAAU,IAAIC,OAAO,CAAC,SAASJ,KAChD,CAEM,SAAUK,EACdC,EACAJ,EACAZ,EACAiB,GAEA,MAAMC,YAAEA,EAAWC,YAAEA,EAAWC,aAAEA,GAAiBpB,EAC7CqB,EAhBR,SAAwBT,GACtB,MAAMU,WAAEA,GAAeV,EACvB,MAAO,CAAEU,aACX,CAasBC,CAAeX,GAC7BP,EAAWY,EAAgBnB,cAEjC,OAAO0B,OAAOC,OAAa,CACzBT,OACAJ,OAAQS,EACRK,GAAIC,KAAKC,MACTf,OAAQF,EAAUC,GAClBP,WACAwB,UAAWT,IACXU,SAAUZ,IACVa,SAAUZ,KAEd,UCnEgBa,IACd,MAAMC,EAAwB,GAE9B,SAASC,GAAiBlB,KAAEA,EAAImB,SAAEA,IAChC,OAAOF,EAAUG,WACdC,GAAaA,EAASrB,OAASA,GAAQqB,EAASF,WAAaA,GAEjE,CA4CD,SAASG,EAAOtB,EAAcmB,GAC5BA,EARF,SAAmBE,GACjB,MAAME,EAAQL,EAAiBG,GAC3BE,GAAS,GACXN,EAAUO,OAAOD,EAAO,EAE3B,CAGYE,CAAU,CAAEzB,OAAMmB,aApB/B,SAAwBnB,GACtB,GAtDmB,MAsDfA,EACFiB,EAAUS,OAAS,OAEnB,IAAK,IAAInE,EAAI0D,EAAUS,OAAS,EAAGnE,GAAK,EAAGA,IACrC0D,EAAU1D,GAAGyC,OAASA,GACxBiB,EAAUO,OAAOjE,EAAG,EAI3B,CAU4CoE,CAAe3B,EAC3D,CAED,MAAO,CACL4B,IA3CF,SAAaP,GAIX,OAHIH,EAAiBG,GAAY,GAC/BJ,EAAUzD,KAAK6D,GAEV,IAAMC,EAAOD,EAASrB,KAAMqB,EAASF,SAC7C,EAuCCU,KArCF,SAAcC,GACZb,EAAUc,SAASV,IACjB,GAbJ,SAAuBA,EAAoBrB,GACzC,MAAyB,MAAlBqB,EAASrB,MAAgBA,IAASqB,EAASrB,IACnD,CAWOgC,CAAcX,EAAUS,EAAMG,KAAKjC,MACrC,IACEqB,EAASF,SAASW,EACnB,CAAC,MAAOI,GACPC,QAAQC,MAAMF,EACf,CACF,GAEJ,EA4BCZ,SAEJ,CC3CA,SAASe,GAAKC,IACZA,EAAGC,MACHA,EAAKjC,WACLA,KACGkC,IAEH,OAAOhC,OAAOC,OAAO,CACnB6B,MACAC,QACAjC,kBACMkC,EAAKC,MAAQ,CAAEA,KAAMD,EAAKC,WAC1BD,EAAK3C,QAAU,CAAEA,OAAQ2C,EAAK3C,SAExC,CC/CO,MAAM6C,EAEb,WACE,MAAMC,EAAS,SAMf,MAAO,CACL,OAAAvD,CAAQL,GACN,MAAM6D,EAAe,GAAGD,IAAS5D,KAC3B8D,EAAcC,SAASC,OAAOC,MAAM,KAC1C,IAAK,MAAMD,KAAUF,EAAa,CAChC,MAAMI,EAAiBF,EAAOG,QAAQ,OAAQ,IAC9C,GAAoD,IAAhDD,EAAeE,YAAYP,EAAc,GAC3C,OAAOK,EAAeG,UACpBR,EAAalB,OACbuB,EAAevB,OAGpB,CACD,OAAO,IACR,EACD,OAAAjC,CAAQV,EAAasE,EAAcC,GACjC,MAAMC,EArBQ,CAACC,IACjB,MAAMC,EAAQD,EAAKR,MAAM,KAAKtF,OAAO,GACrC,OAAuB,GAAhB+F,EAAM/B,OAAc+B,EAAMC,KAAK,KAAO,EAAE,EAmB9BC,CAAUC,OAAO7C,SAAS8C,UACnCC,EAAgB,YAAY,IAAInD,MACpC,IAAIA,MAAOoD,UAAYT,GACvBU,gBACIC,EAAgBV,EAAS,WAAWA,IAAW,GACrDT,SAASC,OAAS,GAAGJ,IAAS5D,KAAOsE,IAAOS,IAAgBG,uBAC7D,EAED,UAAAC,CAAWnF,GACToF,KAAK1E,QAAQV,EAAK,IAAK,EACxB,EAEL,CArC4CqF,YCM5BC,IACd,MAAO,CACLC,QAAS,UACTC,KAAM,CAACjC,EAAaC,EAAeT,KACjC,MAAM0C,EAAWC,UAAUC,WACzB,GAAGpC,kBAAoBC,IACvB,IAAIoC,KAAK,CAACC,KAAKC,UAAU,CAAC/C,KAAU,CAClC9B,KAAM,sBAIJ8E,ECvBZ,WACE,MAAMC,EAA8B,oBAAXnB,OACzB,MAAO,CACL,WAAAoB,CAAYC,GACVF,GAAanB,OAAOsB,YAAYD,EAAS,IAC1C,EAEL,CDgBwBE,GAGlB,GAFAL,EAAUE,YAAY,CAAEI,KAAM,iBAAkBtD,QAAOQ,MAAKC,WAEvDiC,EACH,MAAM,IAAIxG,MACR,kJAEH,EAEHkC,YAAa,IA1BjB,WACE,MAAMY,EAAWgC,SAAShC,SAE1B,MAAoB,KAAbA,EAAkB,KAAOA,CAClC,CAsBuBZ,GACnBC,YAAa,IAAMyD,OAAO7C,SAASsE,KACnCjF,aAAc,IAAMqE,UAAU5D,UAC9BrB,aAAc,IAAM8F,IACpBpG,QEhCK,CACLE,QAAQL,GACC2D,EAActD,QAAQL,IAAQwG,aAAanG,QAAQL,GAG5D,UAAAmF,CAAWnF,GACT2D,EAAcwB,WAAWnF,GACzBwG,aAAarB,WAAWnF,EACzB,EAED,OAAAU,CAAQV,EAAasE,GAEnBkC,aAAa9F,QAAQV,EAAKsE,GAC1BX,EAAcjD,QAAQV,EAAKsE,EAFX,WAGjB,GFoBL,CG5BA,SAASmC,EAAiBC,GAGxB,MAF4C,aAA7BA,EAAcxG,MAAMwD,MASrC,WACE,IACE,MAAyB,iBAAXmB,MACf,CAAC,MAAO1B,GACP,OAAO,CACR,CACH,CAbgB6C,eCXd,IACE,MAAMW,EAAI,mBAGV,OAFAH,aAAa9F,QAAQiG,EAAGA,GACxBH,aAAarB,WAAWwB,IACjB,CACR,CAAC,MAAOxD,GACP,OACEA,aAAayD,cACF,uBAAXzD,EAAE0D,MAEFL,cACwB,IAAxBA,aAAa7D,MAEhB,CACH,CDH+BmE,GACpBxB,IEVF,CACLC,QAAS,OACTC,KAAM,KAAe,EACrBrE,YAAa,IAAM,KACnBC,YAAa,IAAM,KACnBC,aAAc,IAAM,KACpBZ,aAAc,IAAM,GACpBN,QCJK,CACLE,QAAO,IACE,KAET,UAAA8E,GAEC,EACD,OAAAzE,GAEC,GHEL,CI0DM,SAAUqG,EAAYC,GAC1B,MAAMN,ETtBF,SACJM,GAEA,IAAIC,EAAiC3D,EAAK0D,GAE1C,MAAO,CACL9G,IAAK,IAAM+G,EACXC,OAASC,IACPF,EAAU3D,EAAK,IAAK2D,KAAYE,GAAgB,EAGtD,CSWwBC,CAAoBJ,GACpCK,EAAkBpF,IAClBnC,EJnDF,SACJ4G,GAEA,MAAO,CACLxG,IAAK,IAAMuB,OAAOC,OAAO+E,EAAiBC,IAE9C,CI6C6BY,CAAyBZ,GAC9CxF,EAAkBrB,EAAsBC,GAE9C,MAAO,CACLyH,KAAM,CAACtG,EAAcuG,KACnB,MAAM3G,EAAS6F,EAAcxG,MACvBD,EAAcH,EAAmBI,MAEjC6C,ECvEN,SACJ9B,EACAuG,EACA3G,EACAZ,EACAiB,GAEA,MAAO,IACFsG,EACHtE,KAAMlC,EAAWC,EAAMJ,EAAQZ,EAAaiB,GAEhD,CD4DoBuG,CACZxG,EACAuG,EACA3G,EACAZ,EACAiB,GAGF,OEnFA,UAAeL,OACnBA,EAAMZ,YACNA,EAAW8C,MACXA,EAAKsE,gBACLA,IAEA,MAAM9D,IAAEA,EAAGC,MAAEA,EAAKE,KAAEA,GAAS7C,EACF,aAAT6C,IAGhB2D,EAAgBvE,KAAKC,GACrB9C,EAAYuF,KAAKjC,EAAKC,EAAOT,GAEjC,CFsEawE,CAAK,CACV1G,SACAZ,cACA8C,QACAsE,mBACA,EAEJK,QAAUzG,GACRD,EACEC,EACAyF,EAAcxG,MACdJ,EAAmBI,MACnBgB,GAEJyG,GAAI,CAAC1G,EAAcmB,IACjBiF,EAAgBxE,IAAI,CAAE5B,OAAMmB,aAC9BwF,IAAK,CAAC3G,EAAcmB,IAClBiF,EAAgB9E,OAAOtB,EAAMmB,GAC/ByF,aAAehH,GACb6F,EAAcQ,OAAOrG,GACvBF,UAEJ","x_google_ignoreList":[0,1,2,3,4,6,13]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-id.d.ts","sourceRoot":"","sources":["../../src/client-id/client-id.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,MAAM,CAAC;CAC3B;AAED,wBAAgB,qBAAqB,CACnC,kBAAkB,EAAE,kBAAkB,GACrC,eAAe,CAgBjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAE3B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjC,MAAM,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;CACvD;AAiBD,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,WAAW,GACzB,QAAQ,CAAC,aAAa,CAAC,CASzB"}
|