@coveo/relay 0.6.1 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cdn/relay.min.js +1 -1
- package/lib/cdn/relay.min.js.map +1 -1
- package/lib/cdn/types/emit/emit.d.ts +3 -2
- package/lib/cdn/types/emit/emit.d.ts.map +1 -1
- package/lib/cdn/types/environment/browser/browser.d.ts.map +1 -1
- package/lib/cdn/types/environment/environment.d.ts +1 -0
- package/lib/cdn/types/environment/environment.d.ts.map +1 -1
- package/lib/cdn/types/environment/node/node.d.ts.map +1 -1
- package/lib/cdn/types/environment/null/null.d.ts.map +1 -1
- package/lib/cdn/types/relay.d.ts +1 -1
- package/lib/cdn/types/relay.d.ts.map +1 -1
- package/lib/cdn/types/validate/validate.d.ts +9 -2
- package/lib/cdn/types/validate/validate.d.ts.map +1 -1
- package/lib/relay.cjs +28 -10
- package/lib/relay.js +28 -10
- package/lib/relay.mjs +28 -10
- package/lib/types/emit/emit.d.ts +3 -2
- package/lib/types/emit/emit.d.ts.map +1 -1
- package/lib/types/environment/browser/browser.d.ts.map +1 -1
- package/lib/types/environment/environment.d.ts +1 -0
- package/lib/types/environment/environment.d.ts.map +1 -1
- package/lib/types/environment/node/node.d.ts.map +1 -1
- package/lib/types/environment/null/null.d.ts.map +1 -1
- package/lib/types/relay.d.ts +1 -1
- package/lib/types/relay.d.ts.map +1 -1
- package/lib/types/validate/validate.d.ts +9 -2
- package/lib/types/validate/validate.d.ts.map +1 -1
- package/package.json +3 -3
- package/lib/cdn/types/event-api-call/event-api-caller.d.ts +0 -10
- package/lib/cdn/types/event-api-call/event-api-caller.d.ts.map +0 -1
- package/lib/types/event-api-call/event-api-caller.d.ts +0 -10
- package/lib/types/event-api-call/event-api-caller.d.ts.map +0 -1
package/lib/cdn/relay.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
async function e({event:
|
|
1
|
+
async function e(e){const{listenerManager:t,event:n,config:r}=e;return"disabled"!==r.mode&&t.call(n),"validate"===r.mode?async function({config:e,environment:t,event:n}){const{url:r,token:o}=e,a={"Content-Type":"application/json",Authorization:`Bearer ${o}`},c=await t.fetch(`${r}/validate`,{method:"POST",body:JSON.stringify([n]),headers:a}),i=await c.json();if(!c.ok)throw new Error({...i});if(!i)return{valid:!1,errors:[{type:"",message:"disabled",path:""}]};const{valid:s,errors:l}=i[0];return{valid:s,errors:l??[]}}(e):async function({event:e,config:t,environment:n}){const{url:r,token:o}=t;return n.send(r,o,JSON.stringify([e]))}(e)}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),a=o&&("string"==typeof(c=o)&&t.test(c))?o:e.generateUUID();var c;return r.setItem(n,a),a},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),a=`;expires=${new Date((new Date).getTime()+r).toUTCString()}`,c=o?`;domain=${o}`:"";document.cookie=`${e}${t}=${n}${a}${c};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 a(){return{runtime:"browser",fetch:(e,t)=>o(e,t),send:async(e,t,n)=>{if(!navigator.sendBeacon(`${e}?access_token=${t}`,new Blob([n],{type:"application/json"})))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.");return null},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 c(){return{getItem:()=>null,removeItem(){},setItem(){}}}function i(){return function(){try{return"object"==typeof window}catch(e){return!1}}()?a():{runtime:"node",fetch:(e,t)=>o(e,t),send:async(e,t,n)=>(o(e,{method:"POST",body:n,headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`}}),null),getReferrerUrl:()=>null,getUrl:()=>null,getUserAgent:()=>null,generateUUID:()=>crypto.randomUUID(),storage:c()}}const s="0.6.2";function l(e,t,n,r){const{getReferrerUrl:o,getUrl:a,getUserAgent:c}=n,i=function(e){const{trackingId:t}=e;return{trackingId:t}}(t),l=r.getClientId();return Object.freeze({type:e,config:i,ts:Date.now(),source:`relay@${s}`,clientId:l,userAgent:c(),referrerUrl:o(),url:a()})}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 d(t){const r=function(e){let t=f(e);return{get:()=>t,update:e=>{t=f({...t,...e})}}}(t),o=g(),a=()=>"disabled"==r.get().mode?{runtime:"null",fetch:()=>Promise.resolve(new Response(JSON.stringify(""))),send:async()=>null,getReferrerUrl:()=>null,getUrl:()=>null,getUserAgent:()=>null,generateUUID:()=>"",storage:c()}:i(),u=n(a());return{emit:(t,n)=>{const c=r.get(),i=a(),s=function(e,t,n,r,o){return{...t,meta:l(e,n,r,o)}}(t,n,c,i,u);return e({config:c,environment:i,event:s,listenerManager:o})},getMeta:e=>l(e,r.get(),a(),u),on:(e,t)=>o.add({type:e,callback:t}),off:(e,t)=>o.remove(e,t),updateConfig:e=>r.update(e),version:s,clearStorage:()=>{u.clear()}}}export{d 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":["../../src/event-api-call/event-api-caller.ts","../../src/emit/emit.ts","../../src/validate/validate.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"],"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","import { Environment } from \"../environment/environment\";\nimport {\n callEventApi,\n EventApiCallParams,\n} from \"../event-api-call/event-api-caller\";\nimport { RelayEvent } from \"../event/relay-event\";\nimport { ListenerManager } from \"../listener/listener\";\nimport { RelayConfig } from \"../relay\";\nimport { validate } from \"../validate/validate\";\n\nexport interface EmitParams {\n config: RelayConfig;\n environment: Environment;\n event: RelayEvent;\n listenerManager: ListenerManager;\n}\n\nexport async function emit(params: EmitParams) {\n const { listenerManager, event, config } = params;\n const isEnabled = config.mode !== \"disabled\";\n\n isEnabled && listenerManager.call(event);\n return config.mode === \"validate\" ? validate(params) : emitEvent(params);\n}\n\nasync function emitEvent(params: EventApiCallParams) {\n await callEventApi(params);\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","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\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","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 { ValidationError, ValidationResponse } 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 listenerManager = createListenerManager();\n\n const getEnvironment = () =>\n configManager.get().mode == \"disabled\"\n ? buildNullEnvironment()\n : currentEnvironment();\n const clientIdManager = createClientIdManager(getEnvironment());\n\n return {\n emit: (type: string, payload: RelayPayload) => {\n const config = configManager.get();\n const environment = getEnvironment();\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(type, configManager.get(), getEnvironment(), clientIdManager),\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 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"],"names":["async","callEventApi","event","config","environment","url","token","headers","Authorization","response","fetch","mode","method","body","JSON","stringify","data","json","ok","Error","emit","params","listenerManager","call","valid","errors","type","message","path","validate","emitEvent","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","cause","buildBrowserEnvironment","runtime","getReferrerUrl","referrer","getUrl","href","getUserAgent","navigator","userAgent","crypto","randomUUID","localStorage","createNullStorage","currentEnvironment","e","isBrowser","version","createMeta","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","forEach","isMatchesType","meta","console","error","pick","rest","createRelay","initialConfig","configManager","_config","get","update","updatedConfig","createConfigManager","getEnvironment","Promise","resolve","Response","payload","createRelayEvent","getMeta","on","off","updateConfig","clearStorage"],"mappings":"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","x_google_ignoreList":[3,5]}
|
|
1
|
+
{"version":3,"file":"relay.min.js","sources":["../../src/emit/emit.ts","../../src/validate/validate.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"],"sourcesContent":["import { Environment } from \"../environment/environment\";\nimport { ListenerManager } from \"../listener/listener\";\nimport { validate } from \"../validate/validate\";\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 async function emit(params: EmitParams) {\n const { listenerManager, event, config } = params;\n const isEnabled = config.mode !== \"disabled\";\n\n isEnabled && listenerManager.call(event);\n return config.mode === \"validate\" ? validate(params) : emitEvent(params);\n}\n\nexport async function emitEvent({\n event,\n config,\n environment,\n}: EmitParams): Promise<null> {\n const { url, token } = config;\n\n return environment.send(url, token, JSON.stringify([event]));\n}\n","import { Environment } from \"../environment/environment\";\nimport { RelayEvent } from \"../event/relay-event\";\nimport { RelayConfig } from \"../relay\";\n\nexport interface ValidateParams {\n config: RelayConfig;\n environment: Environment;\n event: Readonly<RelayEvent>;\n}\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 config,\n environment,\n event,\n}: ValidateParams): Promise<Readonly<ValidationResponse>> {\n const { url, token } = config;\n const headers = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n };\n\n const response = await environment.fetch(`${url}/validate`, {\n method: \"POST\",\n body: JSON.stringify([event]),\n headers,\n });\n const data = await response.json();\n\n if (!response.ok) {\n throw new Error({\n ...data,\n });\n }\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","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 send: async (url: string, token: string, body: string) => {\n const response = navigator.sendBeacon(\n `${url}?access_token=${token}`,\n new Blob([body], {\n type: \"application/json\",\n })\n );\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 return null;\n },\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 send: (url: string, token: string, body: string) => Promise<null>;\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 send: async (url: string, token: string, body: string) => {\n const headers = {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n };\n fetchAPI(url, {\n method: \"POST\",\n body,\n headers,\n });\n return null;\n },\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\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","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 { ValidationError, ValidationResponse } 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<ValidationResponse | null>;\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 listenerManager = createListenerManager();\n\n const getEnvironment = () =>\n configManager.get().mode == \"disabled\"\n ? buildNullEnvironment()\n : currentEnvironment();\n const clientIdManager = createClientIdManager(getEnvironment());\n\n return {\n emit: (type: string, payload: RelayPayload) => {\n const config = configManager.get();\n const environment = getEnvironment();\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(type, configManager.get(), getEnvironment(), clientIdManager),\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 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 send: async () => null,\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"],"names":["async","emit","params","listenerManager","event","config","mode","call","environment","url","token","headers","Authorization","response","fetch","method","body","JSON","stringify","data","json","ok","Error","valid","errors","type","message","path","validate","send","emitEvent","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","cause","buildBrowserEnvironment","runtime","navigator","sendBeacon","Blob","getReferrerUrl","referrer","getUrl","href","getUserAgent","userAgent","crypto","randomUUID","localStorage","createNullStorage","currentEnvironment","e","isBrowser","version","createMeta","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","forEach","isMatchesType","meta","console","error","pick","rest","createRelay","initialConfig","configManager","_config","get","update","updatedConfig","createConfigManager","getEnvironment","Promise","resolve","Response","payload","createRelayEvent","getMeta","on","off","updateConfig","clearStorage"],"mappings":"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","x_google_ignoreList":[2,4]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Environment } from "../environment/environment";
|
|
2
|
-
import { RelayEvent } from "../event/relay-event";
|
|
3
2
|
import { ListenerManager } from "../listener/listener";
|
|
3
|
+
import { RelayEvent } from "../event/relay-event";
|
|
4
4
|
import { RelayConfig } from "../relay";
|
|
5
5
|
export interface EmitParams {
|
|
6
6
|
config: RelayConfig;
|
|
@@ -8,5 +8,6 @@ export interface EmitParams {
|
|
|
8
8
|
event: RelayEvent;
|
|
9
9
|
listenerManager: ListenerManager;
|
|
10
10
|
}
|
|
11
|
-
export declare function emit(params: EmitParams): Promise<
|
|
11
|
+
export declare function emit(params: EmitParams): Promise<Readonly<import("../relay").ValidationResponse> | null>;
|
|
12
|
+
export declare function emitEvent({ event, config, environment, }: EmitParams): Promise<null>;
|
|
12
13
|
//# sourceMappingURL=emit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../../src/emit/emit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../../src/emit/emit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,UAAU,CAAC;IAClB,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,wBAAsB,IAAI,CAAC,MAAM,EAAE,UAAU,mEAM5C;AAED,wBAAsB,SAAS,CAAC,EAC9B,KAAK,EACL,MAAM,EACN,WAAW,GACZ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAI5B"}
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,CA0BrD"}
|
|
@@ -2,6 +2,7 @@ import { Storage } from "./storage";
|
|
|
2
2
|
export interface Environment {
|
|
3
3
|
runtime: "browser" | "node" | "null";
|
|
4
4
|
fetch: (url: string, init?: RequestInit) => Promise<Response>;
|
|
5
|
+
send: (url: string, token: string, body: string) => Promise<null>;
|
|
5
6
|
getReferrerUrl: () => string | null;
|
|
6
7
|
getUrl: () => string | null;
|
|
7
8
|
getUserAgent: () => 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,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
|
+
{"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,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,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":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAI7C,wBAAgB,oBAAoB,IAAI,WAAW,
|
|
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,CAsBlD"}
|
|
@@ -1 +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,
|
|
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,CAWlD"}
|
package/lib/cdn/types/relay.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { ValidationError, ValidationResponse } from "./validate/validate";
|
|
|
5
5
|
type RelayPayload = Record<string, unknown>;
|
|
6
6
|
type Off = () => void;
|
|
7
7
|
interface Relay {
|
|
8
|
-
emit: (type: string, payload: RelayPayload) => Promise<
|
|
8
|
+
emit: (type: string, payload: RelayPayload) => Promise<ValidationResponse | null>;
|
|
9
9
|
getMeta: (type: string) => Meta;
|
|
10
10
|
on: (type: string, callback: EventCallback) => Off;
|
|
11
11
|
off: (type: string, callback?: EventCallback) => void;
|
|
@@ -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,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG1E,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,
|
|
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,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG1E,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,kBAAkB,GAAG,IAAI,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,4 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Environment } from "../environment/environment";
|
|
2
|
+
import { RelayEvent } from "../event/relay-event";
|
|
3
|
+
import { RelayConfig } from "../relay";
|
|
4
|
+
export interface ValidateParams {
|
|
5
|
+
config: RelayConfig;
|
|
6
|
+
environment: Environment;
|
|
7
|
+
event: Readonly<RelayEvent>;
|
|
8
|
+
}
|
|
2
9
|
export interface ValidationError {
|
|
3
10
|
type: string;
|
|
4
11
|
message: string;
|
|
@@ -8,5 +15,5 @@ export interface ValidationResponse {
|
|
|
8
15
|
valid: boolean;
|
|
9
16
|
errors: ValidationError[];
|
|
10
17
|
}
|
|
11
|
-
export declare function validate(
|
|
18
|
+
export declare function validate({ config, environment, event, }: ValidateParams): Promise<Readonly<ValidationResponse>>;
|
|
12
19
|
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/validate/validate.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/validate/validate.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,UAAU,CAAC;AAEvC,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;CAC7B;AAED,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,CAAC,EAC7B,MAAM,EACN,WAAW,EACX,KAAK,GACN,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CA8BxD"}
|
package/lib/relay.cjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
async function
|
|
3
|
+
async function validate$1({ config, environment, event, }) {
|
|
4
4
|
const { url, token } = config;
|
|
5
5
|
const headers = {
|
|
6
6
|
"Content-Type": "application/json",
|
|
7
7
|
Authorization: `Bearer ${token}`,
|
|
8
8
|
};
|
|
9
|
-
const response = await environment.fetch(`${url}
|
|
9
|
+
const response = await environment.fetch(`${url}/validate`, {
|
|
10
10
|
method: "POST",
|
|
11
11
|
body: JSON.stringify([event]),
|
|
12
12
|
headers,
|
|
@@ -17,11 +17,6 @@ async function callEventApi({ event, config, environment, }) {
|
|
|
17
17
|
...data,
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
|
-
return data;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
async function validate$1(params) {
|
|
24
|
-
const data = await callEventApi(params);
|
|
25
20
|
if (!data) {
|
|
26
21
|
return {
|
|
27
22
|
valid: false,
|
|
@@ -38,8 +33,9 @@ async function emit(params) {
|
|
|
38
33
|
isEnabled && listenerManager.call(event);
|
|
39
34
|
return config.mode === "validate" ? validate$1(params) : emitEvent(params);
|
|
40
35
|
}
|
|
41
|
-
async function emitEvent(
|
|
42
|
-
|
|
36
|
+
async function emitEvent({ event, config, environment, }) {
|
|
37
|
+
const { url, token } = config;
|
|
38
|
+
return environment.send(url, token, JSON.stringify([event]));
|
|
43
39
|
}
|
|
44
40
|
|
|
45
41
|
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;
|
|
@@ -128,6 +124,15 @@ function buildBrowserEnvironment() {
|
|
|
128
124
|
return {
|
|
129
125
|
runtime: "browser",
|
|
130
126
|
fetch: (url, init) => fetchAPI(url, init),
|
|
127
|
+
send: async (url, token, body) => {
|
|
128
|
+
const response = navigator.sendBeacon(`${url}?access_token=${token}`, new Blob([body], {
|
|
129
|
+
type: "application/json",
|
|
130
|
+
}));
|
|
131
|
+
if (!response) {
|
|
132
|
+
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.`);
|
|
133
|
+
}
|
|
134
|
+
return null;
|
|
135
|
+
},
|
|
131
136
|
getReferrerUrl: () => getReferrerUrl(),
|
|
132
137
|
getUrl: () => window.location.href,
|
|
133
138
|
getUserAgent: () => navigator.userAgent,
|
|
@@ -154,6 +159,18 @@ function buildNodeEnvironment() {
|
|
|
154
159
|
return {
|
|
155
160
|
runtime: "node",
|
|
156
161
|
fetch: (url, init) => fetchAPI(url, init),
|
|
162
|
+
send: async (url, token, body) => {
|
|
163
|
+
const headers = {
|
|
164
|
+
"Content-Type": "application/json",
|
|
165
|
+
Authorization: `Bearer ${token}`,
|
|
166
|
+
};
|
|
167
|
+
fetchAPI(url, {
|
|
168
|
+
method: "POST",
|
|
169
|
+
body,
|
|
170
|
+
headers,
|
|
171
|
+
});
|
|
172
|
+
return null;
|
|
173
|
+
},
|
|
157
174
|
getReferrerUrl: () => null,
|
|
158
175
|
getUrl: () => null,
|
|
159
176
|
getUserAgent: () => null,
|
|
@@ -174,7 +191,7 @@ function isBrowser() {
|
|
|
174
191
|
}
|
|
175
192
|
}
|
|
176
193
|
|
|
177
|
-
const version = "0.6.
|
|
194
|
+
const version = "0.6.2" ;
|
|
178
195
|
|
|
179
196
|
function getEventConfig(config) {
|
|
180
197
|
const { trackingId } = config;
|
|
@@ -283,6 +300,7 @@ function buildNullEnvironment() {
|
|
|
283
300
|
return {
|
|
284
301
|
runtime: "null",
|
|
285
302
|
fetch: () => Promise.resolve(new Response(JSON.stringify(""))),
|
|
303
|
+
send: async () => null,
|
|
286
304
|
getReferrerUrl: () => null,
|
|
287
305
|
getUrl: () => null,
|
|
288
306
|
getUserAgent: () => null,
|
package/lib/relay.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
async function
|
|
1
|
+
async function validate$1({ config, environment, event, }) {
|
|
2
2
|
const { url, token } = config;
|
|
3
3
|
const headers = {
|
|
4
4
|
"Content-Type": "application/json",
|
|
5
5
|
Authorization: `Bearer ${token}`,
|
|
6
6
|
};
|
|
7
|
-
const response = await environment.fetch(`${url}
|
|
7
|
+
const response = await environment.fetch(`${url}/validate`, {
|
|
8
8
|
method: "POST",
|
|
9
9
|
body: JSON.stringify([event]),
|
|
10
10
|
headers,
|
|
@@ -15,11 +15,6 @@ async function callEventApi({ event, config, environment, }) {
|
|
|
15
15
|
...data,
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
|
-
return data;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
async function validate$1(params) {
|
|
22
|
-
const data = await callEventApi(params);
|
|
23
18
|
if (!data) {
|
|
24
19
|
return {
|
|
25
20
|
valid: false,
|
|
@@ -36,8 +31,9 @@ async function emit(params) {
|
|
|
36
31
|
isEnabled && listenerManager.call(event);
|
|
37
32
|
return config.mode === "validate" ? validate$1(params) : emitEvent(params);
|
|
38
33
|
}
|
|
39
|
-
async function emitEvent(
|
|
40
|
-
|
|
34
|
+
async function emitEvent({ event, config, environment, }) {
|
|
35
|
+
const { url, token } = config;
|
|
36
|
+
return environment.send(url, token, JSON.stringify([event]));
|
|
41
37
|
}
|
|
42
38
|
|
|
43
39
|
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;
|
|
@@ -126,6 +122,15 @@ function buildBrowserEnvironment() {
|
|
|
126
122
|
return {
|
|
127
123
|
runtime: "browser",
|
|
128
124
|
fetch: (url, init) => fetchAPI(url, init),
|
|
125
|
+
send: async (url, token, body) => {
|
|
126
|
+
const response = navigator.sendBeacon(`${url}?access_token=${token}`, new Blob([body], {
|
|
127
|
+
type: "application/json",
|
|
128
|
+
}));
|
|
129
|
+
if (!response) {
|
|
130
|
+
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.`);
|
|
131
|
+
}
|
|
132
|
+
return null;
|
|
133
|
+
},
|
|
129
134
|
getReferrerUrl: () => getReferrerUrl(),
|
|
130
135
|
getUrl: () => window.location.href,
|
|
131
136
|
getUserAgent: () => navigator.userAgent,
|
|
@@ -152,6 +157,18 @@ function buildNodeEnvironment() {
|
|
|
152
157
|
return {
|
|
153
158
|
runtime: "node",
|
|
154
159
|
fetch: (url, init) => fetchAPI(url, init),
|
|
160
|
+
send: async (url, token, body) => {
|
|
161
|
+
const headers = {
|
|
162
|
+
"Content-Type": "application/json",
|
|
163
|
+
Authorization: `Bearer ${token}`,
|
|
164
|
+
};
|
|
165
|
+
fetchAPI(url, {
|
|
166
|
+
method: "POST",
|
|
167
|
+
body,
|
|
168
|
+
headers,
|
|
169
|
+
});
|
|
170
|
+
return null;
|
|
171
|
+
},
|
|
155
172
|
getReferrerUrl: () => null,
|
|
156
173
|
getUrl: () => null,
|
|
157
174
|
getUserAgent: () => null,
|
|
@@ -172,7 +189,7 @@ function isBrowser() {
|
|
|
172
189
|
}
|
|
173
190
|
}
|
|
174
191
|
|
|
175
|
-
const version = "0.6.
|
|
192
|
+
const version = "0.6.2" ;
|
|
176
193
|
|
|
177
194
|
function getEventConfig(config) {
|
|
178
195
|
const { trackingId } = config;
|
|
@@ -281,6 +298,7 @@ function buildNullEnvironment() {
|
|
|
281
298
|
return {
|
|
282
299
|
runtime: "null",
|
|
283
300
|
fetch: () => Promise.resolve(new Response(JSON.stringify(""))),
|
|
301
|
+
send: async () => null,
|
|
284
302
|
getReferrerUrl: () => null,
|
|
285
303
|
getUrl: () => null,
|
|
286
304
|
getUserAgent: () => null,
|
package/lib/relay.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
async function
|
|
1
|
+
async function validate$1({ config, environment, event, }) {
|
|
2
2
|
const { url, token } = config;
|
|
3
3
|
const headers = {
|
|
4
4
|
"Content-Type": "application/json",
|
|
5
5
|
Authorization: `Bearer ${token}`,
|
|
6
6
|
};
|
|
7
|
-
const response = await environment.fetch(`${url}
|
|
7
|
+
const response = await environment.fetch(`${url}/validate`, {
|
|
8
8
|
method: "POST",
|
|
9
9
|
body: JSON.stringify([event]),
|
|
10
10
|
headers,
|
|
@@ -15,11 +15,6 @@ async function callEventApi({ event, config, environment, }) {
|
|
|
15
15
|
...data,
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
|
-
return data;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
async function validate$1(params) {
|
|
22
|
-
const data = await callEventApi(params);
|
|
23
18
|
if (!data) {
|
|
24
19
|
return {
|
|
25
20
|
valid: false,
|
|
@@ -36,8 +31,9 @@ async function emit(params) {
|
|
|
36
31
|
isEnabled && listenerManager.call(event);
|
|
37
32
|
return config.mode === "validate" ? validate$1(params) : emitEvent(params);
|
|
38
33
|
}
|
|
39
|
-
async function emitEvent(
|
|
40
|
-
|
|
34
|
+
async function emitEvent({ event, config, environment, }) {
|
|
35
|
+
const { url, token } = config;
|
|
36
|
+
return environment.send(url, token, JSON.stringify([event]));
|
|
41
37
|
}
|
|
42
38
|
|
|
43
39
|
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;
|
|
@@ -126,6 +122,15 @@ function buildBrowserEnvironment() {
|
|
|
126
122
|
return {
|
|
127
123
|
runtime: "browser",
|
|
128
124
|
fetch: (url, init) => fetchAPI(url, init),
|
|
125
|
+
send: async (url, token, body) => {
|
|
126
|
+
const response = navigator.sendBeacon(`${url}?access_token=${token}`, new Blob([body], {
|
|
127
|
+
type: "application/json",
|
|
128
|
+
}));
|
|
129
|
+
if (!response) {
|
|
130
|
+
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.`);
|
|
131
|
+
}
|
|
132
|
+
return null;
|
|
133
|
+
},
|
|
129
134
|
getReferrerUrl: () => getReferrerUrl(),
|
|
130
135
|
getUrl: () => window.location.href,
|
|
131
136
|
getUserAgent: () => navigator.userAgent,
|
|
@@ -152,6 +157,18 @@ function buildNodeEnvironment() {
|
|
|
152
157
|
return {
|
|
153
158
|
runtime: "node",
|
|
154
159
|
fetch: (url, init) => fetchAPI(url, init),
|
|
160
|
+
send: async (url, token, body) => {
|
|
161
|
+
const headers = {
|
|
162
|
+
"Content-Type": "application/json",
|
|
163
|
+
Authorization: `Bearer ${token}`,
|
|
164
|
+
};
|
|
165
|
+
fetchAPI(url, {
|
|
166
|
+
method: "POST",
|
|
167
|
+
body,
|
|
168
|
+
headers,
|
|
169
|
+
});
|
|
170
|
+
return null;
|
|
171
|
+
},
|
|
155
172
|
getReferrerUrl: () => null,
|
|
156
173
|
getUrl: () => null,
|
|
157
174
|
getUserAgent: () => null,
|
|
@@ -172,7 +189,7 @@ function isBrowser() {
|
|
|
172
189
|
}
|
|
173
190
|
}
|
|
174
191
|
|
|
175
|
-
const version = "0.6.
|
|
192
|
+
const version = "0.6.2" ;
|
|
176
193
|
|
|
177
194
|
function getEventConfig(config) {
|
|
178
195
|
const { trackingId } = config;
|
|
@@ -281,6 +298,7 @@ function buildNullEnvironment() {
|
|
|
281
298
|
return {
|
|
282
299
|
runtime: "null",
|
|
283
300
|
fetch: () => Promise.resolve(new Response(JSON.stringify(""))),
|
|
301
|
+
send: async () => null,
|
|
284
302
|
getReferrerUrl: () => null,
|
|
285
303
|
getUrl: () => null,
|
|
286
304
|
getUserAgent: () => null,
|
package/lib/types/emit/emit.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Environment } from "../environment/environment";
|
|
2
|
-
import { RelayEvent } from "../event/relay-event";
|
|
3
2
|
import { ListenerManager } from "../listener/listener";
|
|
3
|
+
import { RelayEvent } from "../event/relay-event";
|
|
4
4
|
import { RelayConfig } from "../relay";
|
|
5
5
|
export interface EmitParams {
|
|
6
6
|
config: RelayConfig;
|
|
@@ -8,5 +8,6 @@ export interface EmitParams {
|
|
|
8
8
|
event: RelayEvent;
|
|
9
9
|
listenerManager: ListenerManager;
|
|
10
10
|
}
|
|
11
|
-
export declare function emit(params: EmitParams): Promise<
|
|
11
|
+
export declare function emit(params: EmitParams): Promise<Readonly<import("../relay").ValidationResponse> | null>;
|
|
12
|
+
export declare function emitEvent({ event, config, environment, }: EmitParams): Promise<null>;
|
|
12
13
|
//# sourceMappingURL=emit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../../src/emit/emit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../../src/emit/emit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,UAAU,CAAC;IAClB,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,wBAAsB,IAAI,CAAC,MAAM,EAAE,UAAU,mEAM5C;AAED,wBAAsB,SAAS,CAAC,EAC9B,KAAK,EACL,MAAM,EACN,WAAW,GACZ,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAI5B"}
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,CA0BrD"}
|
|
@@ -2,6 +2,7 @@ import { Storage } from "./storage";
|
|
|
2
2
|
export interface Environment {
|
|
3
3
|
runtime: "browser" | "node" | "null";
|
|
4
4
|
fetch: (url: string, init?: RequestInit) => Promise<Response>;
|
|
5
|
+
send: (url: string, token: string, body: string) => Promise<null>;
|
|
5
6
|
getReferrerUrl: () => string | null;
|
|
6
7
|
getUrl: () => string | null;
|
|
7
8
|
getUserAgent: () => 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,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
|
+
{"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,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,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":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAI7C,wBAAgB,oBAAoB,IAAI,WAAW,
|
|
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,CAsBlD"}
|
|
@@ -1 +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,
|
|
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,CAWlD"}
|
package/lib/types/relay.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { ValidationError, ValidationResponse } from "./validate/validate";
|
|
|
5
5
|
type RelayPayload = Record<string, unknown>;
|
|
6
6
|
type Off = () => void;
|
|
7
7
|
interface Relay {
|
|
8
|
-
emit: (type: string, payload: RelayPayload) => Promise<
|
|
8
|
+
emit: (type: string, payload: RelayPayload) => Promise<ValidationResponse | null>;
|
|
9
9
|
getMeta: (type: string) => Meta;
|
|
10
10
|
on: (type: string, callback: EventCallback) => Off;
|
|
11
11
|
off: (type: string, callback?: EventCallback) => void;
|
package/lib/types/relay.d.ts.map
CHANGED
|
@@ -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,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG1E,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,
|
|
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,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAG1E,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,kBAAkB,GAAG,IAAI,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,4 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Environment } from "../environment/environment";
|
|
2
|
+
import { RelayEvent } from "../event/relay-event";
|
|
3
|
+
import { RelayConfig } from "../relay";
|
|
4
|
+
export interface ValidateParams {
|
|
5
|
+
config: RelayConfig;
|
|
6
|
+
environment: Environment;
|
|
7
|
+
event: Readonly<RelayEvent>;
|
|
8
|
+
}
|
|
2
9
|
export interface ValidationError {
|
|
3
10
|
type: string;
|
|
4
11
|
message: string;
|
|
@@ -8,5 +15,5 @@ export interface ValidationResponse {
|
|
|
8
15
|
valid: boolean;
|
|
9
16
|
errors: ValidationError[];
|
|
10
17
|
}
|
|
11
|
-
export declare function validate(
|
|
18
|
+
export declare function validate({ config, environment, event, }: ValidateParams): Promise<Readonly<ValidationResponse>>;
|
|
12
19
|
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/validate/validate.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/validate/validate.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,UAAU,CAAC;AAEvC,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;CAC7B;AAED,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,CAAC,EAC7B,MAAM,EACN,WAAW,EACX,KAAK,GACN,EAAE,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CA8BxD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coveo/relay",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.2",
|
|
4
4
|
"description": "A library for sending analytics events using Coveo's Event protocol.",
|
|
5
5
|
"files": [
|
|
6
6
|
"lib/**/*"
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
"rollup": "^3.28.0",
|
|
51
51
|
"ts-jest": "^29.1.1",
|
|
52
52
|
"typescript": "^5.1.6",
|
|
53
|
-
"
|
|
54
|
-
"
|
|
53
|
+
"tsconfig": "0.0.0",
|
|
54
|
+
"eslint-config-custom": "0.0.0"
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"uuid": "^9.0.1"
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Environment } from "../environment/environment";
|
|
2
|
-
import { RelayEvent } from "../event/relay-event";
|
|
3
|
-
import { RelayConfig } from "../config/config";
|
|
4
|
-
export interface EventApiCallParams {
|
|
5
|
-
config: RelayConfig;
|
|
6
|
-
environment: Environment;
|
|
7
|
-
event: Readonly<RelayEvent>;
|
|
8
|
-
}
|
|
9
|
-
export declare function callEventApi<T>({ event, config, environment, }: EventApiCallParams): Promise<T>;
|
|
10
|
-
//# sourceMappingURL=event-api-caller.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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,10 +0,0 @@
|
|
|
1
|
-
import { Environment } from "../environment/environment";
|
|
2
|
-
import { RelayEvent } from "../event/relay-event";
|
|
3
|
-
import { RelayConfig } from "../config/config";
|
|
4
|
-
export interface EventApiCallParams {
|
|
5
|
-
config: RelayConfig;
|
|
6
|
-
environment: Environment;
|
|
7
|
-
event: Readonly<RelayEvent>;
|
|
8
|
-
}
|
|
9
|
-
export declare function callEventApi<T>({ event, config, environment, }: EventApiCallParams): Promise<T>;
|
|
10
|
-
//# sourceMappingURL=event-api-caller.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|