@coveo/relay 0.4.4 → 0.6.0

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.
Files changed (30) hide show
  1. package/lib/cdn/relay.min.js +1 -1
  2. package/lib/cdn/relay.min.js.map +1 -1
  3. package/lib/cdn/types/config/config.d.ts +1 -1
  4. package/lib/cdn/types/config/config.d.ts.map +1 -1
  5. package/lib/cdn/types/environment/browser/browser.d.ts.map +1 -1
  6. package/lib/cdn/types/environment/environment.d.ts +1 -1
  7. package/lib/cdn/types/environment/environment.d.ts.map +1 -1
  8. package/lib/cdn/types/environment/node/node.d.ts.map +1 -1
  9. package/lib/cdn/types/environment/null/null.d.ts +3 -0
  10. package/lib/cdn/types/environment/null/null.d.ts.map +1 -0
  11. package/lib/cdn/types/event-api-call/event-api-caller.d.ts +1 -1
  12. package/lib/cdn/types/event-api-call/event-api-caller.d.ts.map +1 -1
  13. package/lib/cdn/types/relay.d.ts.map +1 -1
  14. package/lib/cdn/types/validate/validate.d.ts.map +1 -1
  15. package/lib/relay.cjs +32 -67
  16. package/lib/relay.js +32 -73
  17. package/lib/relay.mjs +32 -67
  18. package/lib/types/config/config.d.ts +1 -1
  19. package/lib/types/config/config.d.ts.map +1 -1
  20. package/lib/types/environment/browser/browser.d.ts.map +1 -1
  21. package/lib/types/environment/environment.d.ts +1 -1
  22. package/lib/types/environment/environment.d.ts.map +1 -1
  23. package/lib/types/environment/node/node.d.ts.map +1 -1
  24. package/lib/types/environment/null/null.d.ts +3 -0
  25. package/lib/types/environment/null/null.d.ts.map +1 -0
  26. package/lib/types/event-api-call/event-api-caller.d.ts +1 -1
  27. package/lib/types/event-api-call/event-api-caller.d.ts.map +1 -1
  28. package/lib/types/relay.d.ts.map +1 -1
  29. package/lib/types/validate/validate.d.ts.map +1 -1
  30. package/package.json +10 -6
@@ -1,2 +1,2 @@
1
- async function e({event:e,config:t,environment:n}){const{url:r,token:o}=t,c={"Content-Type":"application/json",Authorization:`Bearer ${o}`},a=await n.fetch(`${r}${"validate"==t.mode?"/validate":""}`,{method:"POST",body:JSON.stringify([e]),headers:c}),i=await a.json();if(!a.ok)throw new Error({...i});return i}let t;const n=new Uint8Array(16);function r(){if(!t&&(t="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!t))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return t(n)}var o=/^(?:[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;const c=[];for(let e=0;e<256;++e)c.push((e+256).toString(16).slice(1));var a={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function i(e,t,n){if(a.randomUUID&&!t&&!e)return a.randomUUID();const o=(e=e||{}).random||(e.rng||r)();if(o[6]=15&o[6]|64,o[8]=63&o[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=o[e];return t}return function(e,t=0){return(c[e[t+0]]+c[e[t+1]]+c[e[t+2]]+c[e[t+3]]+"-"+c[e[t+4]]+c[e[t+5]]+"-"+c[e[t+6]]+c[e[t+7]]+"-"+c[e[t+8]]+c[e[t+9]]+"-"+c[e[t+10]]+c[e[t+11]]+c[e[t+12]]+c[e[t+13]]+c[e[t+14]]+c[e[t+15]]).toLowerCase()}(o)}function u(e){const t="visitorId";return{getClientId:()=>{const n=e.storage,r=n.getItem(t),c=r&&("string"==typeof(a=r)&&o.test(a))?r:e.generateUUID();var a;return n.setItem(t,c),c},clear:()=>{e.storage.removeItem(t)}}}const s=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)}}}();async function l(e,t){return fetch(e,t).catch((e=>{throw new Error(`${e.message}: The "host" value is invalid or a network error occured, according to the FetchAPI's response.`,{cause:e})}))}function f(){return{runtime:"browser",fetch:(e,t)=>l(e,t),getReferrerUrl:()=>function(){const e=document.referrer;return""===e?null:e}(),getUrl:()=>window.location.href,getUserAgent:()=>navigator.userAgent,generateUUID:()=>i(),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 g(){return function(){try{return"object"==typeof window}catch(e){return!1}}()?f():{runtime:"node",fetch:(e,t)=>l(e,t),getReferrerUrl:()=>null,getUrl:()=>null,getUserAgent:()=>null,generateUUID:()=>i(),storage:{getItem:()=>null,removeItem(){},setItem(){}}}}const d="0.4.4";function m(e,t,n,r){const{getReferrerUrl:o,getUrl:c,getUserAgent:a}=n,i=function(e){const{trackingId:t}=e;return{trackingId:t}}(t),u=r.getClientId();return Object.freeze({type:e,config:i,ts:Date.now(),source:`relay@${d}`,clientId:u,userAgent:a(),referrerUrl:o(),url:c()})}const p="*";function I(){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===p)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 y({url:e,token:t,trackingId:n,...r}){return Object.freeze({url:e,token:t,trackingId:n,...!!r.mode&&{mode:r.mode}})}function h(t){const n=g(),r=u(n),o=function(e){let t=y(e);return{get:()=>t,update:e=>{t=y({...t,...e})}}}(t),{add:c,call:a,remove:i}=I();return{emit:(t,c)=>{const i=function(e,t,n,r,o){return{...t,meta:m(e,n,r,o)}}(t,c,o.get(),n,r);a(i);const u={config:o.get(),environment:n,event:i};return"validate"===o.get().mode?async function(t){const n=await e(t),{valid:r,errors:o}=n[0];return{valid:r,errors:o??[]}}(u):async function(t){await e(t)}(u)},getMeta:e=>m(e,o.get(),n,r),on:(e,t)=>c({type:e,callback:t}),off:(e,t)=>i(e,t),updateConfig:e=>o.update(e),version:d,clearStorage:()=>{r.clear()}}}export{h as createRelay};
1
+ async function e({event:e,config:t,environment:n}){const{url:r,token:o}=t,c={"Content-Type":"application/json",Authorization:`Bearer ${o}`},a=await n.fetch(`${r}${"validate"==t.mode?"/validate":""}`,{method:"POST",body:JSON.stringify([e]),headers:c}),i=await a.json();if(!a.ok)throw new Error({...i});return i}var t=/^(?:[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 n(e){const n="visitorId";return{getClientId:()=>{const r=e.storage,o=r.getItem(n),c=o&&("string"==typeof(a=o)&&t.test(a))?o:e.generateUUID();var a;return r.setItem(n,c),c},clear:()=>{e.storage.removeItem(n)}}}const r=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)}}}();async function o(e,t){return fetch(e,t).catch((e=>{throw new Error(`${e.message}: The "host" value is invalid or a network error occured, according to the FetchAPI's response.`,{cause:e})}))}function c(){return{runtime:"browser",fetch:(e,t)=>o(e,t),getReferrerUrl:()=>function(){const e=document.referrer;return""===e?null:e}(),getUrl:()=>window.location.href,getUserAgent:()=>navigator.userAgent,generateUUID:()=>crypto.randomUUID(),storage:{getItem:e=>r.getItem(e)||localStorage.getItem(e),removeItem(e){r.removeItem(e),localStorage.removeItem(e)},setItem(e,t){localStorage.setItem(e,t),r.setItem(e,t,31556952e3)}}}}function a(){return{getItem:()=>null,removeItem(){},setItem(){}}}function i(){return function(){try{return"object"==typeof window}catch(e){return!1}}()?c():{runtime:"node",fetch:(e,t)=>o(e,t),getReferrerUrl:()=>null,getUrl:()=>null,getUserAgent:()=>null,generateUUID:()=>crypto.randomUUID(),storage:a()}}const l="0.6.0";function s(e,t,n,r){const{getReferrerUrl:o,getUrl: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:`relay@${l}`,clientId:s,userAgent:a(),referrerUrl:o(),url:c()})}const u="*";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===u)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 f({url:e,token:t,trackingId:n,...r}){return Object.freeze({url:e,token:t,trackingId:n,...!!r.mode&&{mode:r.mode}})}function m(t){const r=function(e){let t=f(e);return{get:()=>t,update:e=>{t=f({...t,...e})}}}(t),o=()=>"disabled"==r.get().mode?{runtime:"null",fetch:()=>Promise.resolve(new Response(JSON.stringify(""))),getReferrerUrl:()=>null,getUrl:()=>null,getUserAgent:()=>null,generateUUID:()=>"",storage:a()}:i(),c=n(o()),{add:u,call:m,remove:d}=g();return{emit:(t,n)=>{const a=function(e,t,n,r,o){return{...t,meta:s(e,n,r,o)}}(t,n,r.get(),o(),c);m(a);const i={config:r.get(),environment:o(),event:a};return"validate"===r.get().mode?async function(t){const n=await e(t);if(!n)return{valid:!1,errors:[{type:"",message:"disabled",path:""}]};const{valid:r,errors:o}=n[0];return{valid:r,errors:o??[]}}(i):async function(t){await e(t)}(i)},getMeta:e=>s(e,r.get(),o(),c),on:(e,t)=>u({type:e,callback:t}),off:(e,t)=>d(e,t),updateConfig:e=>r.update(e),version:l,clearStorage:()=>{c.clear()}}}export{m as createRelay};
2
2
  //# sourceMappingURL=relay.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"relay.min.js","sources":["../../src/event-api-call/event-api-caller.ts","../../../../node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/rng.js","../../../../node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/regex.js","../../../../node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/stringify.js","../../../../node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/native.js","../../../../node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/v4.js","../../src/client-id/client-id.ts","../../../../node_modules/.pnpm/uuid@9.0.0/node_modules/uuid/dist/esm-browser/validate.js","../../src/environment/browser/storage/cookie.ts","../../src/environment/utils/fetch.ts","../../src/environment/browser/browser.ts","../../src/environment/browser/storage/storage.ts","../../src/environment/environment.ts","../../src/environment/node/node.ts","../../src/environment/storage.ts","../../src/version.ts","../../src/event/meta/meta.ts","../../src/listener/listener.ts","../../src/config/config.ts","../../src/relay.ts","../../src/event/relay-event.ts","../../src/validate/validate.ts","../../src/emit/emit.ts"],"sourcesContent":["import { Environment } from \"../environment/environment\";\nimport { RelayEvent } from \"../event/relay-event\";\nimport { RelayConfig } from \"../config/config\";\n\nexport interface EventApiCallParams {\n config: RelayConfig;\n environment: Environment;\n event: Readonly<RelayEvent>;\n}\n\nexport async function callEventApi({\n event,\n config,\n environment,\n}: EventApiCallParams): Promise<any> {\n const { url, token } = config;\n const headers = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n };\n const response = await environment.fetch(\n `${url}${config.mode == \"validate\" ? \"/validate\" : \"\"}`,\n {\n method: \"POST\",\n body: JSON.stringify([event]),\n headers,\n }\n );\n\n const data = await response.json();\n\n if (!response.ok) {\n throw new Error({\n ...data,\n });\n }\n\n return data;\n}\n","// 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()).\nlet getRandomValues;\nconst 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\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","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 './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\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 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}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // 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\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","const 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';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","import { validate } from \"uuid\";\nimport { Environment } from \"../environment/environment\";\n\nexport interface ClientIdManager {\n getClientId: () => string;\n clear: () => void;\n}\n\nexport function createClientIdManager(\n environment: Environment\n): ClientIdManager {\n const key = \"visitorId\";\n return {\n getClientId: () => {\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 clear: () => {\n environment.storage.removeItem(key);\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 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","export async function fetchAPI(\n url: string,\n init?: RequestInit\n): Promise<Response> {\n return fetch(url, init).catch((err: Error) => {\n throw new Error(\n `${err.message}: The \"host\" value is invalid or a network error occured, according to the FetchAPI's response.`,\n { cause: err }\n );\n });\n}\n","import { v4 as uuidv4 } from \"uuid\";\nimport { Environment } from \"../environment\";\nimport { createBrowserStorage } from \"./storage/storage\";\nimport { fetchAPI } from \"../utils/fetch\";\n\nfunction getReferrerUrl() {\n const referrer = document.referrer;\n\n return referrer === \"\" ? null : referrer;\n}\n\nexport function buildBrowserEnvironment(): Environment {\n return {\n runtime: \"browser\",\n fetch: (url: string, init?: RequestInit) => fetchAPI(url, init),\n getReferrerUrl: () => getReferrerUrl(),\n getUrl: () => window.location.href,\n getUserAgent: () => navigator.userAgent,\n generateUUID: () => uuidv4(),\n storage: createBrowserStorage(),\n };\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 { buildBrowserEnvironment } from \"./browser/browser\";\nimport { buildNodeEnvironment } from \"./node/node\";\nimport { Storage } from \"./storage\";\n\nexport interface Environment {\n runtime: \"browser\" | \"node\";\n fetch: (url: string, init?: RequestInit) => Promise<Response>;\n getReferrerUrl: () => string | null;\n getUrl: () => string | null;\n getUserAgent: () => string | null;\n generateUUID: () => string;\n storage: Storage;\n}\n\nexport function currentEnvironment(): Environment {\n return isBrowser() ? buildBrowserEnvironment() : buildNodeEnvironment();\n}\n\nfunction isBrowser() {\n try {\n return typeof window === \"object\";\n } catch (e) {\n return false;\n }\n}\n","import { v4 as uuidv4 } from \"uuid\";\nimport { Environment } from \"../environment\";\nimport { createNullStorage } from \"../storage\";\nimport { fetchAPI } from \"../utils/fetch\";\n\nexport function buildNodeEnvironment(): Environment {\n return {\n runtime: \"node\",\n fetch: (url: string, init?: RequestInit) => fetchAPI(url, init),\n getReferrerUrl: () => null,\n getUrl: () => null,\n getUserAgent: () => null,\n generateUUID: () => uuidv4(),\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","export const version: string = 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\ninterface EventConfig {\n trackingId: string;\n}\n\nexport interface Meta {\n type: string;\n config: EventConfig;\n ts: number;\n source: string;\n clientId: string;\n userAgent: string | null;\n referrerUrl: string | null;\n url: string | null;\n}\n\nfunction getEventConfig(config: RelayConfig): EventConfig {\n const { trackingId } = config;\n return { trackingId };\n}\n\nfunction getSource(): string {\n return `relay@${version}`;\n}\n\nexport function createMeta(\n type: string,\n config: RelayConfig,\n environment: Environment,\n clientIdManager: ClientIdManager\n): Readonly<Meta> {\n const { getReferrerUrl, getUrl, getUserAgent } = environment;\n const eventConfig = getEventConfig(config);\n const clientId = clientIdManager.getClientId();\n\n return Object.freeze({\n type,\n config: eventConfig,\n ts: Date.now(),\n source: getSource(),\n clientId,\n userAgent: getUserAgent(),\n referrerUrl: getReferrerUrl(),\n url: getUrl(),\n });\n}\n","import { RelayEvent } from \"../event/relay-event\";\n\nconst ANY_EVENT_TYPE = \"*\";\n\nexport type EventCallback = (event: RelayEvent) => void;\n\ninterface Listener {\n type: string;\n callback: EventCallback;\n}\n\ninterface 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","export type RelayMode = \"emit\" | \"validate\";\n\nexport interface RelayConfig {\n url: string;\n token: string;\n trackingId: string;\n mode?: RelayMode;\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 });\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","import { emit } from \"./emit/emit\";\nimport { createClientIdManager } from \"./client-id/client-id\";\nimport { currentEnvironment } from \"./environment/environment\";\nimport { createRelayEvent } from \"./event/relay-event\";\nimport { version } from \"./version\";\nimport { createMeta, Meta } from \"./event/meta/meta\";\nimport { createListenerManager, EventCallback } from \"./listener/listener\";\nimport { createConfigManager, RelayConfig } from \"./config/config\";\nimport {\n validate,\n ValidationError,\n ValidationResponse,\n} from \"./validate/validate\";\n\ntype RelayPayload = Record<string, unknown>;\ntype Off = () => void;\n\ninterface Relay {\n emit: (\n type: string,\n payload: RelayPayload\n ) => Promise<void | ValidationResponse>;\n getMeta: (type: string) => Meta;\n on: (type: string, callback: EventCallback) => Off;\n off: (type: string, callback?: EventCallback) => void;\n updateConfig: (config: Partial<RelayConfig>) => void;\n version: string;\n clearStorage: () => void;\n}\n\nexport function createRelay(initialConfig: RelayConfig): Relay {\n const environment = currentEnvironment();\n const clientIdManager = createClientIdManager(environment);\n const configManager = createConfigManager(initialConfig);\n const { add, call, remove } = createListenerManager();\n\n return {\n emit: (type: string, payload: RelayPayload) => {\n const event = createRelayEvent(\n type,\n payload,\n configManager.get(),\n environment,\n clientIdManager\n );\n\n call(event);\n\n const params = { config: configManager.get(), environment, event };\n\n return configManager.get().mode === \"validate\"\n ? validate(params)\n : emit(params);\n },\n getMeta: (type: string) =>\n createMeta(type, configManager.get(), environment, clientIdManager),\n on: (type: string, callback: EventCallback) => add({ type, callback }),\n off: (type: string, callback?: EventCallback) => remove(type, callback),\n updateConfig: (config: Partial<RelayConfig>) =>\n configManager.update(config),\n version,\n clearStorage: () => {\n clientIdManager.clear();\n },\n };\n}\n\nexport type { RelayPayload, RelayConfig, ValidationError, ValidationResponse };\n","import { ClientIdManager } from \"../client-id/client-id\";\nimport { Environment } from \"../environment/environment\";\nimport { RelayConfig, RelayPayload } from \"../relay\";\nimport { createMeta, Meta } from \"./meta/meta\";\n\nexport interface RelayEvent extends RelayPayload {\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 {\n callEventApi,\n EventApiCallParams,\n} from \"../event-api-call/event-api-caller\";\n\nexport interface ValidationError {\n type: string;\n message: string;\n path: string;\n}\n\nexport interface ValidationResponse {\n valid: boolean;\n errors: ValidationError[];\n}\n\nexport async function validate(\n params: EventApiCallParams\n): Promise<Readonly<ValidationResponse>> {\n const data = await callEventApi(params);\n\n const { valid, errors } = data[0];\n\n return { valid, errors: errors ?? [] };\n}\n","import {\n callEventApi,\n EventApiCallParams,\n} from \"../event-api-call/event-api-caller\";\n\nexport async function emit(params: EventApiCallParams) {\n await callEventApi(params);\n}\n"],"names":["async","callEventApi","event","config","environment","url","token","headers","Authorization","response","fetch","mode","method","body","JSON","stringify","data","json","ok","Error","getRandomValues","rnds8","Uint8Array","rng","crypto","bind","REGEX","byteToHex","i","push","toString","slice","native","randomUUID","v4","options","buf","offset","rnds","random","arr","toLowerCase","unsafeStringify","createClientIdManager","key","getClientId","storage","existingClientId","getItem","clientId","uuid","test","generateUUID","setItem","clear","removeItem","cookieManager","prefix","cookiePrefix","cookieArray","document","cookie","split","prettifyCookie","replace","lastIndexOf","substring","length","expire","domain","host","parts","join","getDomain","window","location","hostname","expireSection","Date","getTime","toUTCString","domainSection","this","createCookieManager","fetchAPI","init","catch","err","message","cause","buildBrowserEnvironment","runtime","getReferrerUrl","referrer","getUrl","href","getUserAgent","navigator","userAgent","uuidv4","localStorage","currentEnvironment","e","isBrowser","version","createMeta","type","clientIdManager","eventConfig","trackingId","getEventConfig","Object","freeze","ts","now","source","referrerUrl","ANY_EVENT_TYPE","createListenerManager","listeners","getListenerIndex","callback","findIndex","listener","remove","index","splice","removeOne","removeMultiple","add","call","forEach","isMatchesType","meta","console","error","pick","rest","createRelay","initialConfig","configManager","_config","get","update","updatedConfig","createConfigManager","emit","payload","createRelayEvent","params","valid","errors","validate","getMeta","on","off","updateConfig","clearStorage"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,7]}
1
+ {"version":3,"file":"relay.min.js","sources":["../../src/event-api-call/event-api-caller.ts","../../../../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/environment/browser/storage/cookie.ts","../../src/environment/utils/fetch.ts","../../src/environment/browser/browser.ts","../../src/environment/browser/storage/storage.ts","../../src/environment/storage.ts","../../src/environment/environment.ts","../../src/environment/node/node.ts","../../src/version.ts","../../src/event/meta/meta.ts","../../src/listener/listener.ts","../../src/config/config.ts","../../src/relay.ts","../../src/environment/null/null.ts","../../src/event/relay-event.ts","../../src/validate/validate.ts","../../src/emit/emit.ts"],"sourcesContent":["import { Environment } from \"../environment/environment\";\nimport { RelayEvent } from \"../event/relay-event\";\nimport { RelayConfig } from \"../config/config\";\nimport { ValidationResponse } from \"../relay\";\n\nexport interface EventApiCallParams {\n config: RelayConfig;\n environment: Environment;\n event: Readonly<RelayEvent>;\n}\n\nexport async function callEventApi<T>({\n event,\n config,\n environment,\n}: EventApiCallParams): Promise<T> {\n const { url, token } = config;\n const headers = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n };\n const response = await environment.fetch(\n `${url}${config.mode == \"validate\" ? \"/validate\" : \"\"}`,\n {\n method: \"POST\",\n body: JSON.stringify([event]),\n headers,\n }\n );\n\n const data = await response.json();\n\n if (!response.ok) {\n throw new Error({\n ...data,\n });\n }\n\n return data;\n}\n","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 { Environment } from \"../environment/environment\";\n\nexport interface ClientIdManager {\n getClientId: () => string;\n clear: () => void;\n}\n\nexport function createClientIdManager(\n environment: Environment\n): ClientIdManager {\n const key = \"visitorId\";\n return {\n getClientId: () => {\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 clear: () => {\n environment.storage.removeItem(key);\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 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","export async function fetchAPI(\n url: string,\n init?: RequestInit\n): Promise<Response> {\n return fetch(url, init).catch((err: Error) => {\n throw new Error(\n `${err.message}: The \"host\" value is invalid or a network error occured, according to the FetchAPI's response.`,\n { cause: err }\n );\n });\n}\n","import { Environment } from \"../environment\";\nimport { createBrowserStorage } from \"./storage/storage\";\nimport { fetchAPI } from \"../utils/fetch\";\n\nfunction getReferrerUrl() {\n const referrer = document.referrer;\n\n return referrer === \"\" ? null : referrer;\n}\n\nexport function buildBrowserEnvironment(): Environment {\n return {\n runtime: \"browser\",\n fetch: (url: string, init?: RequestInit) => fetchAPI(url, init),\n getReferrerUrl: () => getReferrerUrl(),\n getUrl: () => window.location.href,\n getUserAgent: () => navigator.userAgent,\n generateUUID: () => crypto.randomUUID(),\n storage: createBrowserStorage(),\n };\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","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 { buildBrowserEnvironment } from \"./browser/browser\";\nimport { buildNodeEnvironment } from \"./node/node\";\nimport { Storage } from \"./storage\";\n\nexport interface Environment {\n runtime: \"browser\" | \"node\" | \"null\";\n fetch: (url: string, init?: RequestInit) => Promise<Response>;\n getReferrerUrl: () => string | null;\n getUrl: () => string | null;\n getUserAgent: () => string | null;\n generateUUID: () => string;\n storage: Storage;\n}\n\nexport function currentEnvironment(): Environment {\n return isBrowser() ? buildBrowserEnvironment() : buildNodeEnvironment();\n}\n\nfunction isBrowser() {\n try {\n return typeof window === \"object\";\n } catch (e) {\n return false;\n }\n}\n","import { Environment } from \"../environment\";\nimport { createNullStorage } from \"../storage\";\nimport { fetchAPI } from \"../utils/fetch\";\n\nexport function buildNodeEnvironment(): Environment {\n return {\n runtime: \"node\",\n fetch: (url: string, init?: RequestInit) => fetchAPI(url, init),\n getReferrerUrl: () => null,\n getUrl: () => null,\n getUserAgent: () => null,\n generateUUID: () => crypto.randomUUID(),\n storage: createNullStorage(),\n };\n}\n","export const version: string = 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\ninterface EventConfig {\n trackingId: string;\n}\n\nexport interface Meta {\n type: string;\n config: EventConfig;\n ts: number;\n source: string;\n clientId: string;\n userAgent: string | null;\n referrerUrl: string | null;\n url: string | null;\n}\n\nfunction getEventConfig(config: RelayConfig): EventConfig {\n const { trackingId } = config;\n return { trackingId };\n}\n\nfunction getSource(): string {\n return `relay@${version}`;\n}\n\nexport function createMeta(\n type: string,\n config: RelayConfig,\n environment: Environment,\n clientIdManager: ClientIdManager\n): Readonly<Meta> {\n const { getReferrerUrl, getUrl, getUserAgent } = environment;\n const eventConfig = getEventConfig(config);\n const clientId = clientIdManager.getClientId();\n\n return Object.freeze({\n type,\n config: eventConfig,\n ts: Date.now(),\n source: getSource(),\n clientId,\n userAgent: getUserAgent(),\n referrerUrl: getReferrerUrl(),\n url: getUrl(),\n });\n}\n","import { RelayEvent } from \"../event/relay-event\";\n\nconst ANY_EVENT_TYPE = \"*\";\n\nexport type EventCallback = (event: RelayEvent) => void;\n\ninterface Listener {\n type: string;\n callback: EventCallback;\n}\n\ninterface 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","export type RelayMode = \"emit\" | \"validate\" | \"disabled\";\n\nexport interface RelayConfig {\n url: string;\n token: string;\n trackingId: string;\n mode?: RelayMode;\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 });\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","import { emit } from \"./emit/emit\";\nimport { createClientIdManager } from \"./client-id/client-id\";\nimport { currentEnvironment } from \"./environment/environment\";\nimport { createRelayEvent } from \"./event/relay-event\";\nimport { version } from \"./version\";\nimport { createMeta, Meta } from \"./event/meta/meta\";\nimport { createListenerManager, EventCallback } from \"./listener/listener\";\nimport { createConfigManager, RelayConfig } from \"./config/config\";\nimport {\n validate,\n ValidationError,\n ValidationResponse,\n} from \"./validate/validate\";\nimport { buildNullEnvironment } from \"./environment/null/null\";\n\ntype RelayPayload = Record<string, unknown>;\ntype Off = () => void;\n\ninterface Relay {\n emit: (\n type: string,\n payload: RelayPayload\n ) => Promise<void | ValidationResponse>;\n getMeta: (type: string) => Meta;\n on: (type: string, callback: EventCallback) => Off;\n off: (type: string, callback?: EventCallback) => void;\n updateConfig: (config: Partial<RelayConfig>) => void;\n version: string;\n clearStorage: () => void;\n}\n\nexport function createRelay(initialConfig: RelayConfig): Relay {\n const configManager = createConfigManager(initialConfig);\n const getEnvironment = () =>\n configManager.get().mode == \"disabled\"\n ? buildNullEnvironment()\n : currentEnvironment();\n const clientIdManager = createClientIdManager(getEnvironment());\n\n const { add, call, remove } = createListenerManager();\n\n return {\n emit: (type: string, payload: RelayPayload) => {\n const event = createRelayEvent(\n type,\n payload,\n configManager.get(),\n getEnvironment(),\n clientIdManager\n );\n\n call(event);\n\n const params = {\n config: configManager.get(),\n environment: getEnvironment(),\n event,\n };\n\n return configManager.get().mode === \"validate\"\n ? validate(params)\n : emit(params);\n },\n getMeta: (type: string) =>\n createMeta(type, configManager.get(), getEnvironment(), clientIdManager),\n on: (type: string, callback: EventCallback) => add({ type, callback }),\n off: (type: string, callback?: EventCallback) => remove(type, callback),\n updateConfig: (config: Partial<RelayConfig>) =>\n configManager.update(config),\n version,\n clearStorage: () => {\n clientIdManager.clear();\n },\n };\n}\n\nexport type { RelayPayload, RelayConfig, ValidationError, ValidationResponse };\n","import { Environment } from \"../environment\";\nimport { createNullStorage } from \"../storage\";\n\nexport function buildNullEnvironment(): Environment {\n return {\n runtime: \"null\",\n fetch: () => Promise.resolve(new Response(JSON.stringify(\"\"))),\n getReferrerUrl: () => null,\n getUrl: () => null,\n getUserAgent: () => null,\n generateUUID: () => \"\",\n storage: createNullStorage(),\n };\n}\n","import { ClientIdManager } from \"../client-id/client-id\";\nimport { Environment } from \"../environment/environment\";\nimport { RelayConfig, RelayPayload } from \"../relay\";\nimport { createMeta, Meta } from \"./meta/meta\";\n\nexport interface RelayEvent extends RelayPayload {\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 {\n callEventApi,\n EventApiCallParams,\n} from \"../event-api-call/event-api-caller\";\n\nexport interface ValidationError {\n type: string;\n message: string;\n path: string;\n}\n\nexport interface ValidationResponse {\n valid: boolean;\n errors: ValidationError[];\n}\n\nexport async function validate(\n params: EventApiCallParams\n): Promise<Readonly<ValidationResponse>> {\n const data = await callEventApi<ValidationResponse[] | \"\">(params);\n\n if (!data) {\n return {\n valid: false,\n errors: [{ type: \"\", message: \"disabled\", path: \"\" }],\n };\n }\n\n const { valid, errors } = data[0];\n\n return { valid, errors: errors ?? [] };\n}\n","import {\n callEventApi,\n EventApiCallParams,\n} from \"../event-api-call/event-api-caller\";\n\nexport async function emit(params: EventApiCallParams) {\n await callEventApi(params);\n}\n"],"names":["async","callEventApi","event","config","environment","url","token","headers","Authorization","response","fetch","mode","method","body","JSON","stringify","data","json","ok","Error","REGEX","createClientIdManager","key","getClientId","storage","existingClientId","getItem","clientId","uuid","test","generateUUID","setItem","clear","removeItem","cookieManager","prefix","cookiePrefix","cookieArray","document","cookie","split","prettifyCookie","replace","lastIndexOf","substring","length","expire","domain","host","parts","slice","join","getDomain","window","location","hostname","expireSection","Date","getTime","toUTCString","domainSection","this","createCookieManager","fetchAPI","init","catch","err","message","cause","buildBrowserEnvironment","runtime","getReferrerUrl","referrer","getUrl","href","getUserAgent","navigator","userAgent","crypto","randomUUID","localStorage","createNullStorage","currentEnvironment","e","isBrowser","version","createMeta","type","clientIdManager","eventConfig","trackingId","getEventConfig","Object","freeze","ts","now","source","referrerUrl","ANY_EVENT_TYPE","createListenerManager","listeners","getListenerIndex","callback","findIndex","listener","remove","index","splice","removeOne","i","removeMultiple","add","push","call","forEach","isMatchesType","meta","console","error","pick","rest","createRelay","initialConfig","configManager","_config","get","update","updatedConfig","createConfigManager","getEnvironment","Promise","resolve","Response","emit","payload","createRelayEvent","params","valid","errors","path","validate","getMeta","on","off","updateConfig","clearStorage"],"mappings":"AAWOA,eAAeC,GAAgBC,MACpCA,EAAKC,OACLA,EAAMC,YACNA,IAEA,MAAMC,IAAEA,EAAGC,MAAEA,GAAUH,EACjBI,EAAU,CACd,eAAgB,mBAChBC,cAAe,UAAUF,KAErBG,QAAiBL,EAAYM,MACjC,GAAGL,IAAqB,YAAfF,EAAOQ,KAAqB,YAAc,KACnD,CACEC,OAAQ,OACRC,KAAMC,KAAKC,UAAU,CAACb,IACtBK,YAIES,QAAaP,EAASQ,OAE5B,IAAKR,EAASS,GACZ,MAAM,IAAIC,MAAM,IACXH,IAIP,OAAOA,CACT,CCvCA,IAAAI,EAAe,sHCQT,SAAUC,EACdjB,GAEA,MAAMkB,EAAM,YACZ,MAAO,CACLC,YAAa,KACX,MAAMC,EAAUpB,EAAYoB,QAEtBC,EAAmBD,EAAQE,QAAQJ,GACnCK,EACJF,ICfiB,iBADPG,EDgBmBH,ICfAL,EAAMS,KAAKD,IDgBpCH,EACArB,EAAY0B,eClBxB,IAAkBF,EDoBZ,OADAJ,EAAQO,QAAQT,EAAKK,GACdA,CAAQ,EAEjBK,MAAO,KACL5B,EAAYoB,QAAQS,WAAWX,EAAI,EAGzC,CEtBO,MAAMY,EAEb,WACE,MAAMC,EAAS,SAMf,MAAO,CACL,OAAAT,CAAQJ,GACN,MAAMc,EAAe,GAAGD,IAASb,KAC3Be,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,EAAaS,OACbJ,EAAeI,OAGpB,CACD,OAAO,IACR,EACD,OAAAd,CAAQT,EAAaN,EAAc8B,GACjC,MAAMC,EArBQ,CAACC,IACjB,MAAMC,EAAQD,EAAKR,MAAM,KAAKU,OAAO,GACrC,OAAuB,GAAhBD,EAAMJ,OAAcI,EAAME,KAAK,KAAO,EAAE,EAmB9BC,CAAUC,OAAOC,SAASC,UACnCC,EAAgB,YAAY,IAAIC,MACpC,IAAIA,MAAOC,UAAYZ,GACvBa,gBACIC,EAAgBb,EAAS,WAAWA,IAAW,GACrDT,SAASC,OAAS,GAAGJ,IAASb,KAAON,IAAOwC,IAAgBI,uBAC7D,EAED,UAAA3B,CAAWX,GACTuC,KAAK9B,QAAQT,EAAK,IAAK,EACxB,EAEL,CArC4CwC,GCNrC9D,eAAe+D,EACpB1D,EACA2D,GAEA,OAAOtD,MAAML,EAAK2D,GAAMC,OAAOC,IAC7B,MAAM,IAAI/C,MACR,GAAG+C,EAAIC,yGACP,CAAEC,MAAOF,GACV,GAEL,UCAgBG,IACd,MAAO,CACLC,QAAS,UACT5D,MAAO,CAACL,EAAa2D,IAAuBD,EAAS1D,EAAK2D,GAC1DO,eAAgB,IAVpB,WACE,MAAMC,EAAWlC,SAASkC,SAE1B,MAAoB,KAAbA,EAAkB,KAAOA,CAClC,CAM0BD,GACtBE,OAAQ,IAAMpB,OAAOC,SAASoB,KAC9BC,aAAc,IAAMC,UAAUC,UAC9B/C,aAAc,IAAMgD,OAAOC,aAC3BvD,QCdK,CACLE,QAAQJ,GACCY,EAAcR,QAAQJ,IAAQ0D,aAAatD,QAAQJ,GAG5D,UAAAW,CAAWX,GACTY,EAAcD,WAAWX,GACzB0D,aAAa/C,WAAWX,EACzB,EAED,OAAAS,CAAQT,EAAaN,GAEnBgE,aAAajD,QAAQT,EAAKN,GAC1BkB,EAAcH,QAAQT,EAAKN,EAFX,WAGjB,GDEL,UEdgBiE,IACd,MAAO,CACLvD,QAAO,IACE,KAET,UAAAO,GAEC,EACD,OAAAF,GAEC,EAEL,UCJgBmD,IACd,OAGF,WACE,IACE,MAAyB,iBAAX7B,MACf,CAAC,MAAO8B,GACP,OAAO,CACR,CACH,CATSC,GAAcf,ICVd,CACLC,QAAS,OACT5D,MAAO,CAACL,EAAa2D,IAAuBD,EAAS1D,EAAK2D,GAC1DO,eAAgB,IAAM,KACtBE,OAAQ,IAAM,KACdE,aAAc,IAAM,KACpB7C,aAAc,IAAMgD,OAAOC,aAC3BvD,QAASyD,IDIb,CEhBO,MAAMI,EAAkB,QC6BzB,SAAUC,EACdC,EACApF,EACAC,EACAoF,GAEA,MAAMjB,eAAEA,EAAcE,OAAEA,EAAME,aAAEA,GAAiBvE,EAC3CqF,EAhBR,SAAwBtF,GACtB,MAAMuF,WAAEA,GAAevF,EACvB,MAAO,CAAEuF,aACX,CAasBC,CAAexF,GAC7BwB,EAAW6D,EAAgBjE,cAEjC,OAAOqE,OAAOC,OAAO,CACnBN,OACApF,OAAQsF,EACRK,GAAIrC,KAAKsC,MACTC,OAjBK,SAASX,IAkBd1D,WACAkD,UAAWF,IACXsB,YAAa1B,IACblE,IAAKoE,KAET,CC/CA,MAAMyB,EAAiB,aAePC,IACd,MAAMC,EAAwB,GAE9B,SAASC,GAAiBd,KAAEA,EAAIe,SAAEA,IAChC,OAAOF,EAAUG,WACdC,GAAaA,EAASjB,OAASA,GAAQiB,EAASF,WAAaA,GAEjE,CA4CD,SAASG,EAAOlB,EAAce,GAC1BA,EARJ,SAAmBE,GACjB,MAAME,EAAQL,EAAiBG,GAC3BE,GAAS,GACXN,EAAUO,OAAOD,EAAO,EAE3B,CAGcE,CAAU,CAAErB,OAAMe,aApBjC,SAAwBf,GACtB,GAAIA,IAASW,EACXE,EAAUvD,OAAS,OAEnB,IAAK,IAAIgE,EAAIT,EAAUvD,OAAS,EAAGgE,GAAK,EAAGA,IACrCT,EAAUS,GAAGtB,OAASA,GACxBa,EAAUO,OAAOE,EAAG,EAI3B,CAU8CC,CAAevB,EAC7D,CAED,MAAO,CACLwB,IA3CF,SAAaP,GAIX,OAHIH,EAAiBG,GAAY,GAC/BJ,EAAUY,KAAKR,GAEV,IAAMC,EAAOD,EAASjB,KAAMiB,EAASF,SAC7C,EAuCCW,KArCF,SAAc/G,GACZkG,EAAUc,SAASV,IACjB,GAbJ,SAAuBA,EAAoBjB,GACzC,MAAyB,MAAlBiB,EAASjB,MAAgBA,IAASiB,EAASjB,IACnD,CAWO4B,CAAcX,EAAUtG,EAAMkH,KAAK7B,MACrC,IACEiB,EAASF,SAASpG,EACnB,CAAC,MAAOiF,GACPkC,QAAQC,MAAMnC,EACf,CACF,GAEJ,EA4BCsB,SAEJ,CC/DA,SAASc,GAAKlH,IACZA,EAAGC,MACHA,EAAKoF,WACLA,KACG8B,IAEH,OAAO5B,OAAOC,OAAO,CACnBxF,MACAC,QACAoF,kBACM8B,EAAK7G,MAAQ,CAAEA,KAAM6G,EAAK7G,OAEpC,CCKM,SAAU8G,EAAYC,GAC1B,MAAMC,EDJF,SACJD,GAEA,IAAIE,EAAiCL,EAAKG,GAE1C,MAAO,CACLG,IAAK,IAAMD,EACXE,OAASC,IACPH,EAAUL,EAAK,IAAKK,KAAYG,GAAgB,EAGtD,CCPwBC,CAAoBN,GACpCO,EAAiB,IACO,YAA5BN,EAAcE,MAAMlH,KC9Bf,CACL2D,QAAS,OACT5D,MAAO,IAAMwH,QAAQC,QAAQ,IAAIC,SAAStH,KAAKC,UAAU,MACzDwD,eAAgB,IAAM,KACtBE,OAAQ,IAAM,KACdE,aAAc,IAAM,KACpB7C,aAAc,IAAM,GACpBN,QAASyD,KDyBLC,IACAM,EAAkBnE,EAAsB4G,MAExClB,IAAEA,EAAGE,KAAEA,EAAIR,OAAEA,GAAWN,IAE9B,MAAO,CACLkC,KAAM,CAAC9C,EAAc+C,KACnB,MAAMpI,EElCN,SACJqF,EACA+C,EACAnI,EACAC,EACAoF,GAEA,MAAO,IACF8C,EACHlB,KAAM9B,EAAWC,EAAMpF,EAAQC,EAAaoF,GAEhD,CFuBoB+C,CACZhD,EACA+C,EACAX,EAAcE,MACdI,IACAzC,GAGFyB,EAAK/G,GAEL,MAAMsI,EAAS,CACbrI,OAAQwH,EAAcE,MACtBzH,YAAa6H,IACb/H,SAGF,MAAoC,aAA7ByH,EAAcE,MAAMlH,KG3C1BX,eACLwI,GAEA,MAAMxH,QAAaf,EAAwCuI,GAE3D,IAAKxH,EACH,MAAO,CACLyH,OAAO,EACPC,OAAQ,CAAC,CAAEnD,KAAM,GAAIpB,QAAS,WAAYwE,KAAM,MAIpD,MAAMF,MAAEA,EAAKC,OAAEA,GAAW1H,EAAK,GAE/B,MAAO,CAAEyH,QAAOC,OAAQA,GAAU,GACpC,CH6BUE,CAASJ,GIvDZxI,eAAoBwI,SACnBvI,EAAauI,EACrB,CJsDUH,CAAKG,EAAO,EAElBK,QAAUtD,GACRD,EAAWC,EAAMoC,EAAcE,MAAOI,IAAkBzC,GAC1DsD,GAAI,CAACvD,EAAce,IAA4BS,EAAI,CAAExB,OAAMe,aAC3DyC,IAAK,CAACxD,EAAce,IAA6BG,EAAOlB,EAAMe,GAC9D0C,aAAe7I,GACbwH,EAAcG,OAAO3H,GACvBkF,UACA4D,aAAc,KACZzD,EAAgBxD,OAAO,EAG7B","x_google_ignoreList":[1,3]}
@@ -1,4 +1,4 @@
1
- export type RelayMode = "emit" | "validate";
1
+ export type RelayMode = "emit" | "validate" | "disabled";
2
2
  export interface RelayConfig {
3
3
  url: string;
4
4
  token: string;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/config/config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;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;AAgBD,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,WAAW,GACzB,QAAQ,CAAC,aAAa,CAAC,CASzB"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/config/config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;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;AAgBD,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,WAAW,GACzB,QAAQ,CAAC,aAAa,CAAC,CASzB"}
@@ -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,CAUrD"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../src/environment/browser/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAU7C,wBAAgB,uBAAuB,IAAI,WAAW,CAUrD"}
@@ -1,6 +1,6 @@
1
1
  import { Storage } from "./storage";
2
2
  export interface Environment {
3
- runtime: "browser" | "node";
3
+ runtime: "browser" | "node" | "null";
4
4
  fetch: (url: string, init?: RequestInit) => Promise<Response>;
5
5
  getReferrerUrl: () => string | null;
6
6
  getUrl: () => string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../src/environment/environment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,SAAS,GAAG,MAAM,CAAC;IAC5B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9D,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACpC,MAAM,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,kBAAkB,IAAI,WAAW,CAEhD"}
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../src/environment/environment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IACrC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9D,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACpC,MAAM,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,kBAAkB,IAAI,WAAW,CAEhD"}
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../../src/environment/node/node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAI7C,wBAAgB,oBAAoB,IAAI,WAAW,CAUlD"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../../src/environment/node/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAI7C,wBAAgB,oBAAoB,IAAI,WAAW,CAUlD"}
@@ -0,0 +1,3 @@
1
+ import { Environment } from "../environment";
2
+ export declare function buildNullEnvironment(): Environment;
3
+ //# sourceMappingURL=null.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"null.d.ts","sourceRoot":"","sources":["../../../../src/environment/null/null.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,wBAAgB,oBAAoB,IAAI,WAAW,CAUlD"}
@@ -6,5 +6,5 @@ export interface EventApiCallParams {
6
6
  environment: Environment;
7
7
  event: Readonly<RelayEvent>;
8
8
  }
9
- export declare function callEventApi({ event, config, environment, }: EventApiCallParams): Promise<any>;
9
+ export declare function callEventApi<T>({ event, config, environment, }: EventApiCallParams): Promise<T>;
10
10
  //# sourceMappingURL=event-api-caller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-api-caller.d.ts","sourceRoot":"","sources":["../../../src/event-api-call/event-api-caller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;CAC7B;AAED,wBAAsB,YAAY,CAAC,EACjC,KAAK,EACL,MAAM,EACN,WAAW,GACZ,EAAE,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,CAwBnC"}
1
+ {"version":3,"file":"event-api-caller.d.ts","sourceRoot":"","sources":["../../../src/event-api-call/event-api-caller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;CAC7B;AAED,wBAAsB,YAAY,CAAC,CAAC,EAAE,EACpC,KAAK,EACL,MAAM,EACN,WAAW,GACZ,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC,CAwBjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../../src/relay.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAyB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAuB,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAEL,eAAe,EACf,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAE7B,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5C,KAAK,GAAG,GAAG,MAAM,IAAI,CAAC;AAEtB,UAAU,KAAK;IACb,IAAI,EAAE,CACJ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,KAClB,OAAO,CAAC,IAAI,GAAG,kBAAkB,CAAC,CAAC;IACxC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,KAAK,GAAG,CAAC;IACnD,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IACtD,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,wBAAgB,WAAW,CAAC,aAAa,EAAE,WAAW,GAAG,KAAK,CAmC7D;AAED,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../../src/relay.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAyB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAuB,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAEL,eAAe,EACf,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAG7B,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5C,KAAK,GAAG,GAAG,MAAM,IAAI,CAAC;AAEtB,UAAU,KAAK;IACb,IAAI,EAAE,CACJ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,KAClB,OAAO,CAAC,IAAI,GAAG,kBAAkB,CAAC,CAAC;IACxC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,KAAK,GAAG,CAAC;IACnD,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IACtD,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,wBAAgB,WAAW,CAAC,aAAa,EAAE,WAAW,GAAG,KAAK,CA2C7D;AAED,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/validate/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EACnB,MAAM,oCAAoC,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAMvC"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/validate/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EACnB,MAAM,oCAAoC,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAavC"}
package/lib/relay.cjs CHANGED
@@ -1,7 +1,5 @@
1
1
  'use strict';
2
2
 
3
- var crypto = require('crypto');
4
-
5
3
  async function callEventApi({ event, config, environment, }) {
6
4
  const { url, token } = config;
7
5
  const headers = {
@@ -26,69 +24,12 @@ async function emit(params) {
26
24
  await callEventApi(params);
27
25
  }
28
26
 
29
- const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate
30
-
31
- let poolPtr = rnds8Pool.length;
32
- function rng() {
33
- if (poolPtr > rnds8Pool.length - 16) {
34
- crypto.randomFillSync(rnds8Pool);
35
- poolPtr = 0;
36
- }
37
-
38
- return rnds8Pool.slice(poolPtr, poolPtr += 16);
39
- }
40
-
41
27
  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;
42
28
 
43
29
  function validate$1(uuid) {
44
30
  return typeof uuid === 'string' && REGEX.test(uuid);
45
31
  }
46
32
 
47
- /**
48
- * Convert array of 16 byte values to UUID string format of the form:
49
- * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
50
- */
51
-
52
- const byteToHex = [];
53
-
54
- for (let i = 0; i < 256; ++i) {
55
- byteToHex.push((i + 0x100).toString(16).slice(1));
56
- }
57
-
58
- function unsafeStringify(arr, offset = 0) {
59
- // Note: Be careful editing this code! It's been tuned for performance
60
- // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
61
- 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();
62
- }
63
-
64
- var native = {
65
- randomUUID: crypto.randomUUID
66
- };
67
-
68
- function v4(options, buf, offset) {
69
- if (native.randomUUID && !buf && !options) {
70
- return native.randomUUID();
71
- }
72
-
73
- options = options || {};
74
- const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
75
-
76
- rnds[6] = rnds[6] & 0x0f | 0x40;
77
- rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
78
-
79
- if (buf) {
80
- offset = offset || 0;
81
-
82
- for (let i = 0; i < 16; ++i) {
83
- buf[offset + i] = rnds[i];
84
- }
85
-
86
- return buf;
87
- }
88
-
89
- return unsafeStringify(rnds);
90
- }
91
-
92
33
  function createClientIdManager(environment) {
93
34
  const key = "visitorId";
94
35
  return {
@@ -172,7 +113,7 @@ function buildBrowserEnvironment() {
172
113
  getReferrerUrl: () => getReferrerUrl(),
173
114
  getUrl: () => window.location.href,
174
115
  getUserAgent: () => navigator.userAgent,
175
- generateUUID: () => v4(),
116
+ generateUUID: () => crypto.randomUUID(),
176
117
  storage: createBrowserStorage(),
177
118
  };
178
119
  }
@@ -198,7 +139,7 @@ function buildNodeEnvironment() {
198
139
  getReferrerUrl: () => null,
199
140
  getUrl: () => null,
200
141
  getUserAgent: () => null,
201
- generateUUID: () => v4(),
142
+ generateUUID: () => crypto.randomUUID(),
202
143
  storage: createNullStorage(),
203
144
  };
204
145
  }
@@ -215,7 +156,7 @@ function isBrowser() {
215
156
  }
216
157
  }
217
158
 
218
- const version = "0.4.4" ;
159
+ const version = "0.6.0" ;
219
160
 
220
161
  function getEventConfig(config) {
221
162
  const { trackingId } = config;
@@ -322,25 +263,49 @@ function createConfigManager(initialConfig) {
322
263
 
323
264
  async function validate(params) {
324
265
  const data = await callEventApi(params);
266
+ if (!data) {
267
+ return {
268
+ valid: false,
269
+ errors: [{ type: "", message: "disabled", path: "" }],
270
+ };
271
+ }
325
272
  const { valid, errors } = data[0];
326
273
  return { valid, errors: errors ?? [] };
327
274
  }
328
275
 
276
+ function buildNullEnvironment() {
277
+ return {
278
+ runtime: "null",
279
+ fetch: () => Promise.resolve(new Response(JSON.stringify(""))),
280
+ getReferrerUrl: () => null,
281
+ getUrl: () => null,
282
+ getUserAgent: () => null,
283
+ generateUUID: () => "",
284
+ storage: createNullStorage(),
285
+ };
286
+ }
287
+
329
288
  function createRelay(initialConfig) {
330
- const environment = currentEnvironment();
331
- const clientIdManager = createClientIdManager(environment);
332
289
  const configManager = createConfigManager(initialConfig);
290
+ const getEnvironment = () => configManager.get().mode == "disabled"
291
+ ? buildNullEnvironment()
292
+ : currentEnvironment();
293
+ const clientIdManager = createClientIdManager(getEnvironment());
333
294
  const { add, call, remove } = createListenerManager();
334
295
  return {
335
296
  emit: (type, payload) => {
336
- const event = createRelayEvent(type, payload, configManager.get(), environment, clientIdManager);
297
+ const event = createRelayEvent(type, payload, configManager.get(), getEnvironment(), clientIdManager);
337
298
  call(event);
338
- const params = { config: configManager.get(), environment, event };
299
+ const params = {
300
+ config: configManager.get(),
301
+ environment: getEnvironment(),
302
+ event,
303
+ };
339
304
  return configManager.get().mode === "validate"
340
305
  ? validate(params)
341
306
  : emit(params);
342
307
  },
343
- getMeta: (type) => createMeta(type, configManager.get(), environment, clientIdManager),
308
+ getMeta: (type) => createMeta(type, configManager.get(), getEnvironment(), clientIdManager),
344
309
  on: (type, callback) => add({ type, callback }),
345
310
  off: (type, callback) => remove(type, callback),
346
311
  updateConfig: (config) => configManager.update(config),
package/lib/relay.js CHANGED
@@ -22,77 +22,12 @@ async function emit(params) {
22
22
  await callEventApi(params);
23
23
  }
24
24
 
25
- // Unique ID creation requires a high quality random # generator. In the browser we therefore
26
- // require the crypto API and do not support built-in fallback to lower quality random number
27
- // generators (like Math.random()).
28
- let getRandomValues;
29
- const rnds8 = new Uint8Array(16);
30
- function rng() {
31
- // lazy load so that environments that need to polyfill have a chance to do so
32
- if (!getRandomValues) {
33
- // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation.
34
- getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);
35
-
36
- if (!getRandomValues) {
37
- throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
38
- }
39
- }
40
-
41
- return getRandomValues(rnds8);
42
- }
43
-
44
25
  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;
45
26
 
46
27
  function validate$1(uuid) {
47
28
  return typeof uuid === 'string' && REGEX.test(uuid);
48
29
  }
49
30
 
50
- /**
51
- * Convert array of 16 byte values to UUID string format of the form:
52
- * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
53
- */
54
-
55
- const byteToHex = [];
56
-
57
- for (let i = 0; i < 256; ++i) {
58
- byteToHex.push((i + 0x100).toString(16).slice(1));
59
- }
60
-
61
- function unsafeStringify(arr, offset = 0) {
62
- // Note: Be careful editing this code! It's been tuned for performance
63
- // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
64
- 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();
65
- }
66
-
67
- const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);
68
- var native = {
69
- randomUUID
70
- };
71
-
72
- function v4(options, buf, offset) {
73
- if (native.randomUUID && !buf && !options) {
74
- return native.randomUUID();
75
- }
76
-
77
- options = options || {};
78
- const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
79
-
80
- rnds[6] = rnds[6] & 0x0f | 0x40;
81
- rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
82
-
83
- if (buf) {
84
- offset = offset || 0;
85
-
86
- for (let i = 0; i < 16; ++i) {
87
- buf[offset + i] = rnds[i];
88
- }
89
-
90
- return buf;
91
- }
92
-
93
- return unsafeStringify(rnds);
94
- }
95
-
96
31
  function createClientIdManager(environment) {
97
32
  const key = "visitorId";
98
33
  return {
@@ -176,7 +111,7 @@ function buildBrowserEnvironment() {
176
111
  getReferrerUrl: () => getReferrerUrl(),
177
112
  getUrl: () => window.location.href,
178
113
  getUserAgent: () => navigator.userAgent,
179
- generateUUID: () => v4(),
114
+ generateUUID: () => crypto.randomUUID(),
180
115
  storage: createBrowserStorage(),
181
116
  };
182
117
  }
@@ -202,7 +137,7 @@ function buildNodeEnvironment() {
202
137
  getReferrerUrl: () => null,
203
138
  getUrl: () => null,
204
139
  getUserAgent: () => null,
205
- generateUUID: () => v4(),
140
+ generateUUID: () => crypto.randomUUID(),
206
141
  storage: createNullStorage(),
207
142
  };
208
143
  }
@@ -219,7 +154,7 @@ function isBrowser() {
219
154
  }
220
155
  }
221
156
 
222
- const version = "0.4.4" ;
157
+ const version = "0.6.0" ;
223
158
 
224
159
  function getEventConfig(config) {
225
160
  const { trackingId } = config;
@@ -326,25 +261,49 @@ function createConfigManager(initialConfig) {
326
261
 
327
262
  async function validate(params) {
328
263
  const data = await callEventApi(params);
264
+ if (!data) {
265
+ return {
266
+ valid: false,
267
+ errors: [{ type: "", message: "disabled", path: "" }],
268
+ };
269
+ }
329
270
  const { valid, errors } = data[0];
330
271
  return { valid, errors: errors ?? [] };
331
272
  }
332
273
 
274
+ function buildNullEnvironment() {
275
+ return {
276
+ runtime: "null",
277
+ fetch: () => Promise.resolve(new Response(JSON.stringify(""))),
278
+ getReferrerUrl: () => null,
279
+ getUrl: () => null,
280
+ getUserAgent: () => null,
281
+ generateUUID: () => "",
282
+ storage: createNullStorage(),
283
+ };
284
+ }
285
+
333
286
  function createRelay(initialConfig) {
334
- const environment = currentEnvironment();
335
- const clientIdManager = createClientIdManager(environment);
336
287
  const configManager = createConfigManager(initialConfig);
288
+ const getEnvironment = () => configManager.get().mode == "disabled"
289
+ ? buildNullEnvironment()
290
+ : currentEnvironment();
291
+ const clientIdManager = createClientIdManager(getEnvironment());
337
292
  const { add, call, remove } = createListenerManager();
338
293
  return {
339
294
  emit: (type, payload) => {
340
- const event = createRelayEvent(type, payload, configManager.get(), environment, clientIdManager);
295
+ const event = createRelayEvent(type, payload, configManager.get(), getEnvironment(), clientIdManager);
341
296
  call(event);
342
- const params = { config: configManager.get(), environment, event };
297
+ const params = {
298
+ config: configManager.get(),
299
+ environment: getEnvironment(),
300
+ event,
301
+ };
343
302
  return configManager.get().mode === "validate"
344
303
  ? validate(params)
345
304
  : emit(params);
346
305
  },
347
- getMeta: (type) => createMeta(type, configManager.get(), environment, clientIdManager),
306
+ getMeta: (type) => createMeta(type, configManager.get(), getEnvironment(), clientIdManager),
348
307
  on: (type, callback) => add({ type, callback }),
349
308
  off: (type, callback) => remove(type, callback),
350
309
  updateConfig: (config) => configManager.update(config),
package/lib/relay.mjs CHANGED
@@ -1,5 +1,3 @@
1
- import crypto from 'crypto';
2
-
3
1
  async function callEventApi({ event, config, environment, }) {
4
2
  const { url, token } = config;
5
3
  const headers = {
@@ -24,69 +22,12 @@ async function emit(params) {
24
22
  await callEventApi(params);
25
23
  }
26
24
 
27
- const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate
28
-
29
- let poolPtr = rnds8Pool.length;
30
- function rng() {
31
- if (poolPtr > rnds8Pool.length - 16) {
32
- crypto.randomFillSync(rnds8Pool);
33
- poolPtr = 0;
34
- }
35
-
36
- return rnds8Pool.slice(poolPtr, poolPtr += 16);
37
- }
38
-
39
25
  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;
40
26
 
41
27
  function validate$1(uuid) {
42
28
  return typeof uuid === 'string' && REGEX.test(uuid);
43
29
  }
44
30
 
45
- /**
46
- * Convert array of 16 byte values to UUID string format of the form:
47
- * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
48
- */
49
-
50
- const byteToHex = [];
51
-
52
- for (let i = 0; i < 256; ++i) {
53
- byteToHex.push((i + 0x100).toString(16).slice(1));
54
- }
55
-
56
- function unsafeStringify(arr, offset = 0) {
57
- // Note: Be careful editing this code! It's been tuned for performance
58
- // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
59
- 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();
60
- }
61
-
62
- var native = {
63
- randomUUID: crypto.randomUUID
64
- };
65
-
66
- function v4(options, buf, offset) {
67
- if (native.randomUUID && !buf && !options) {
68
- return native.randomUUID();
69
- }
70
-
71
- options = options || {};
72
- const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
73
-
74
- rnds[6] = rnds[6] & 0x0f | 0x40;
75
- rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
76
-
77
- if (buf) {
78
- offset = offset || 0;
79
-
80
- for (let i = 0; i < 16; ++i) {
81
- buf[offset + i] = rnds[i];
82
- }
83
-
84
- return buf;
85
- }
86
-
87
- return unsafeStringify(rnds);
88
- }
89
-
90
31
  function createClientIdManager(environment) {
91
32
  const key = "visitorId";
92
33
  return {
@@ -170,7 +111,7 @@ function buildBrowserEnvironment() {
170
111
  getReferrerUrl: () => getReferrerUrl(),
171
112
  getUrl: () => window.location.href,
172
113
  getUserAgent: () => navigator.userAgent,
173
- generateUUID: () => v4(),
114
+ generateUUID: () => crypto.randomUUID(),
174
115
  storage: createBrowserStorage(),
175
116
  };
176
117
  }
@@ -196,7 +137,7 @@ function buildNodeEnvironment() {
196
137
  getReferrerUrl: () => null,
197
138
  getUrl: () => null,
198
139
  getUserAgent: () => null,
199
- generateUUID: () => v4(),
140
+ generateUUID: () => crypto.randomUUID(),
200
141
  storage: createNullStorage(),
201
142
  };
202
143
  }
@@ -213,7 +154,7 @@ function isBrowser() {
213
154
  }
214
155
  }
215
156
 
216
- const version = "0.4.4" ;
157
+ const version = "0.6.0" ;
217
158
 
218
159
  function getEventConfig(config) {
219
160
  const { trackingId } = config;
@@ -320,25 +261,49 @@ function createConfigManager(initialConfig) {
320
261
 
321
262
  async function validate(params) {
322
263
  const data = await callEventApi(params);
264
+ if (!data) {
265
+ return {
266
+ valid: false,
267
+ errors: [{ type: "", message: "disabled", path: "" }],
268
+ };
269
+ }
323
270
  const { valid, errors } = data[0];
324
271
  return { valid, errors: errors ?? [] };
325
272
  }
326
273
 
274
+ function buildNullEnvironment() {
275
+ return {
276
+ runtime: "null",
277
+ fetch: () => Promise.resolve(new Response(JSON.stringify(""))),
278
+ getReferrerUrl: () => null,
279
+ getUrl: () => null,
280
+ getUserAgent: () => null,
281
+ generateUUID: () => "",
282
+ storage: createNullStorage(),
283
+ };
284
+ }
285
+
327
286
  function createRelay(initialConfig) {
328
- const environment = currentEnvironment();
329
- const clientIdManager = createClientIdManager(environment);
330
287
  const configManager = createConfigManager(initialConfig);
288
+ const getEnvironment = () => configManager.get().mode == "disabled"
289
+ ? buildNullEnvironment()
290
+ : currentEnvironment();
291
+ const clientIdManager = createClientIdManager(getEnvironment());
331
292
  const { add, call, remove } = createListenerManager();
332
293
  return {
333
294
  emit: (type, payload) => {
334
- const event = createRelayEvent(type, payload, configManager.get(), environment, clientIdManager);
295
+ const event = createRelayEvent(type, payload, configManager.get(), getEnvironment(), clientIdManager);
335
296
  call(event);
336
- const params = { config: configManager.get(), environment, event };
297
+ const params = {
298
+ config: configManager.get(),
299
+ environment: getEnvironment(),
300
+ event,
301
+ };
337
302
  return configManager.get().mode === "validate"
338
303
  ? validate(params)
339
304
  : emit(params);
340
305
  },
341
- getMeta: (type) => createMeta(type, configManager.get(), environment, clientIdManager),
306
+ getMeta: (type) => createMeta(type, configManager.get(), getEnvironment(), clientIdManager),
342
307
  on: (type, callback) => add({ type, callback }),
343
308
  off: (type, callback) => remove(type, callback),
344
309
  updateConfig: (config) => configManager.update(config),
@@ -1,4 +1,4 @@
1
- export type RelayMode = "emit" | "validate";
1
+ export type RelayMode = "emit" | "validate" | "disabled";
2
2
  export interface RelayConfig {
3
3
  url: string;
4
4
  token: string;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/config/config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;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;AAgBD,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,WAAW,GACzB,QAAQ,CAAC,aAAa,CAAC,CASzB"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/config/config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;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;AAgBD,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,WAAW,GACzB,QAAQ,CAAC,aAAa,CAAC,CASzB"}
@@ -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,CAUrD"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../src/environment/browser/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAU7C,wBAAgB,uBAAuB,IAAI,WAAW,CAUrD"}
@@ -1,6 +1,6 @@
1
1
  import { Storage } from "./storage";
2
2
  export interface Environment {
3
- runtime: "browser" | "node";
3
+ runtime: "browser" | "node" | "null";
4
4
  fetch: (url: string, init?: RequestInit) => Promise<Response>;
5
5
  getReferrerUrl: () => string | null;
6
6
  getUrl: () => string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../src/environment/environment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,SAAS,GAAG,MAAM,CAAC;IAC5B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9D,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACpC,MAAM,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,kBAAkB,IAAI,WAAW,CAEhD"}
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../src/environment/environment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;IACrC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9D,cAAc,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACpC,MAAM,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,kBAAkB,IAAI,WAAW,CAEhD"}
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../../src/environment/node/node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAI7C,wBAAgB,oBAAoB,IAAI,WAAW,CAUlD"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../../src/environment/node/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAI7C,wBAAgB,oBAAoB,IAAI,WAAW,CAUlD"}
@@ -0,0 +1,3 @@
1
+ import { Environment } from "../environment";
2
+ export declare function buildNullEnvironment(): Environment;
3
+ //# sourceMappingURL=null.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"null.d.ts","sourceRoot":"","sources":["../../../../src/environment/null/null.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,wBAAgB,oBAAoB,IAAI,WAAW,CAUlD"}
@@ -6,5 +6,5 @@ export interface EventApiCallParams {
6
6
  environment: Environment;
7
7
  event: Readonly<RelayEvent>;
8
8
  }
9
- export declare function callEventApi({ event, config, environment, }: EventApiCallParams): Promise<any>;
9
+ export declare function callEventApi<T>({ event, config, environment, }: EventApiCallParams): Promise<T>;
10
10
  //# sourceMappingURL=event-api-caller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-api-caller.d.ts","sourceRoot":"","sources":["../../../src/event-api-call/event-api-caller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;CAC7B;AAED,wBAAsB,YAAY,CAAC,EACjC,KAAK,EACL,MAAM,EACN,WAAW,GACZ,EAAE,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,CAwBnC"}
1
+ {"version":3,"file":"event-api-caller.d.ts","sourceRoot":"","sources":["../../../src/event-api-call/event-api-caller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;CAC7B;AAED,wBAAsB,YAAY,CAAC,CAAC,EAAE,EACpC,KAAK,EACL,MAAM,EACN,WAAW,GACZ,EAAE,kBAAkB,GAAG,OAAO,CAAC,CAAC,CAAC,CAwBjC"}
@@ -1 +1 @@
1
- {"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../../src/relay.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAyB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAuB,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAEL,eAAe,EACf,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAE7B,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5C,KAAK,GAAG,GAAG,MAAM,IAAI,CAAC;AAEtB,UAAU,KAAK;IACb,IAAI,EAAE,CACJ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,KAClB,OAAO,CAAC,IAAI,GAAG,kBAAkB,CAAC,CAAC;IACxC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,KAAK,GAAG,CAAC;IACnD,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IACtD,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,wBAAgB,WAAW,CAAC,aAAa,EAAE,WAAW,GAAG,KAAK,CAmC7D;AAED,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../../src/relay.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAyB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAuB,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAEL,eAAe,EACf,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAG7B,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5C,KAAK,GAAG,GAAG,MAAM,IAAI,CAAC;AAEtB,UAAU,KAAK;IACb,IAAI,EAAE,CACJ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,KAClB,OAAO,CAAC,IAAI,GAAG,kBAAkB,CAAC,CAAC;IACxC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,KAAK,GAAG,CAAC;IACnD,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IACtD,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,wBAAgB,WAAW,CAAC,aAAa,EAAE,WAAW,GAAG,KAAK,CA2C7D;AAED,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/validate/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EACnB,MAAM,oCAAoC,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAMvC"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/validate/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EACnB,MAAM,oCAAoC,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAavC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coveo/relay",
3
- "version": "0.4.4",
3
+ "version": "0.6.0",
4
4
  "description": "A library for sending analytics events using Coveo's Event protocol.",
5
5
  "files": [
6
6
  "lib/**/*"
@@ -43,9 +43,10 @@
43
43
  "@rollup/plugin-terser": "^0.4.3",
44
44
  "@rollup/plugin-typescript": "^11.1.2",
45
45
  "@types/jest": "^29.5.3",
46
- "@types/uuid": "^9.0.2",
47
- "jest": "^29.6.2",
48
- "jest-environment-jsdom": "^29.6.2",
46
+ "@types/uuid": "^9.0.4",
47
+ "jest": "^29.7.0",
48
+ "jest-environment-jsdom": "^29.7.0",
49
+ "rimraf": "5.0.5",
49
50
  "rollup": "^3.28.0",
50
51
  "ts-jest": "^29.1.1",
51
52
  "typescript": "^5.1.6",
@@ -53,11 +54,14 @@
53
54
  "tsconfig": "0.0.0"
54
55
  },
55
56
  "dependencies": {
56
- "uuid": "^9.0.0"
57
+ "uuid": "^9.0.1"
58
+ },
59
+ "engines": {
60
+ "node": "^18.12.0 || ^20.0.0"
57
61
  },
58
62
  "scripts": {
59
63
  "build": "npm run clean && rollup --config ./config/rollup.config.mjs",
60
- "clean": "rm -rf ./lib",
64
+ "clean": "rimraf -rf ./lib",
61
65
  "test": "jest",
62
66
  "test:watch": "jest --watch",
63
67
  "npm:tag": "node ./scripts/update-npm-tag.mjs"