{"version":3,"file":"oculus.min.js","sources":["../../../node_modules/tslib/tslib.es6.js","../src/enums.ts","../src/util/query.ts","../src/config.ts","../src/ajax.ts","../src/dispatch.ts","../src/util/sessionid.ts","../src/message.ts","../src/tracker.ts","../src/tracker-store.ts","../src/command-processor.ts","../src/initializer.ts","../src/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","/**\n * Whether tracked events should be logged to the console, sent to the server, or both.\n *\n * @public\n * @enum\n */\nexport enum DispatchTarget {\n CONSOLE,\n GSS,\n SERVER\n}\n\n/**\n * The list of supported DOM and Window events.\n */\nexport enum Events {\n abort,\n afterprint,\n beforeprint,\n beforeunload,\n blur,\n change,\n click,\n contextmenu,\n copy,\n cut,\n custom,\n dblclick,\n error,\n focus,\n focusin,\n focusout,\n hashchange,\n input,\n keydown,\n keypress,\n keyup,\n load,\n offline,\n online,\n paste,\n popstate,\n reset,\n scroll,\n select,\n submit,\n unload,\n wheel\n}\n\nexport default { DispatchTarget, Events };\n","/**\n * The URL to which the tracked events are sent.\n *\n * Note: this value is not region aware.\n */\nexport const DISPATCH_URL = '/ui-sl/ext/api/apa/v1/record';\n\n/**\n * The URL to which the stream registration request is sent.\n *\n * Note: this value is not region aware.\n */\nexport const REGISTRATION_URL ='/ui-sl/ext/api/apa/v1/register';\n\n/**\n * Builds the dispatch url.\n *\n * @param queryParams The query parameters to append to the dispatch url.\n * @param dispatchURLOverride The user provided dispatchUrl.\n * @returns The dispatch url.\n */\nexport function buildDispatchURL(\n queryParams?: Record,\n dispatchURLOverride?: string\n): string {\n const dispatchUrl = `${window.location.origin}${dispatchURLOverride || DISPATCH_URL}`;\n if (queryParams && Object.keys(queryParams).length) {\n return `${dispatchUrl}?${parseQueryParameters(queryParams)}`;\n }\n\n return dispatchUrl;\n}\n\n/**\n * Builds the registration url.\n *\n * @param queryParams The query parameters to append to the registration url.\n * @param registrationURLOverride The user provided registrationUrl.\n * @returns The registration url.\n */\nexport function buildRegistrationURL(\n queryParams?: Record,\n registrationURLOverride?: string\n): string {\n const registrationURL = `${window.location.origin}${registrationURLOverride || REGISTRATION_URL}`;\n if (queryParams && Object.keys(queryParams).length) {\n return `${registrationURL}?${parseQueryParameters(queryParams)}`;\n }\n\n return registrationURL;\n}\n\n/**\n * Parses query parameters into a query string.\n *\n * @param queryParams The query parameters.\n * @returns The serialized query parameters.\n */\nexport function parseQueryParameters(queryParams: Record | undefined): string {\n const parameters: Record = {};\n\n for (const [key, value] of Object.entries(queryParams || {})) {\n if (!!key) {\n if (typeof value === 'boolean' || typeof value === 'number') {\n parameters[key] = value;\n } else if (typeof value === 'string' && value) {\n parameters[key] = value;\n }\n }\n }\n\n return Object.keys(parameters)\n .map(key => `${key}=${parameters[key]}`)\n .join('&');\n}\n","import { DispatchTarget } from './enums';\nimport { Configuration, StartupOptions } from './interfaces';\nimport { buildDispatchURL, buildRegistrationURL } from './util/query';\n\n/**\n * The default tracker name.\n */\nexport const DEFAULT_TRACKER_NAME = 't-0';\n\n/**\n * The configuration options.\n */\nlet configuration: Configuration;\n\n/**\n * Whether the configuration options have been parsed.\n */\nlet hasParsedConfig = false;\n\n/**\n * Determine tracker name.\n *\n * @param config The configuration options.\n */\nfunction getTrackerName(startupConfig?: StartupOptions): string {\n const appName = startupConfig?.appDetails?.name || '';\n const appVersion = startupConfig?.appDetails?.version || '';\n const cacheVersion = startupConfig?.cacheVersion || '';\n let trackerName = DEFAULT_TRACKER_NAME;\n\n if (appName !== '') {\n if (cacheVersion !== '') {\n trackerName = `t-${startupConfig?.appDetails?.name}-${startupConfig?.cacheVersion}`;\n } else if (appVersion !== '') {\n trackerName = `t-${startupConfig?.appDetails?.name}-${startupConfig?.appDetails?.version}`;\n }\n }\n\n return trackerName;\n}\n\n/**\n * Parses and returns the global configuration options.\n *\n * @param startupConfig The initial/startup options.\n *\n * @return The global configuration options.\n */\nexport default function (startupConfig?: StartupOptions): Configuration {\n if (!hasParsedConfig) {\n const dispatchInterval = 10000;\n const dispatchTargets: DispatchTarget[] = [DispatchTarget.SERVER];\n const dispatchURL: string = buildDispatchURL(startupConfig?.queryParams, startupConfig?.dispatchURL);\n const registrationURL: string = buildRegistrationURL(startupConfig?.queryParams, startupConfig?.registrationURL);\n const trackerName = getTrackerName(startupConfig);\n\n // build the configuration object with defaults first, then user overrides, and finally our formatted urls.\n configuration = Object.assign(\n {\n appDetails: {\n name: '',\n version: ''\n },\n dispatchInterval,\n dispatchTargets,\n trackerName\n },\n startupConfig,\n {\n dispatchURL,\n registrationURL\n }\n );\n\n hasParsedConfig = true;\n }\n\n return configuration;\n}\n","/**\n * Fires an HTTP POST request.\n *\n * @param url The URL to which the request is sent.\n * @param payload The payload to send.\n * @param requestOptions The request options.\n * @return {Promise} An attempt to send the request.\n */\nfunction _post(url: string, payload: string, requestOptions?: any): Promise {\n return new Promise((resolve: (result?: any) => any, reject: (reason?: any) => any): void => {\n const xhr = new XMLHttpRequest();\n\n xhr.open('POST', url, true);\n\n xhr.onload = function(): void {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n resolve(xhr);\n } else {\n reject(xhr);\n }\n }\n };\n\n xhr.onerror = function(): void {\n reject(xhr);\n };\n\n xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8');\n\n const requestHeaderKeys = Object.keys((requestOptions && requestOptions.headers) || {});\n\n // Add core and custom request headers\n requestHeaderKeys.forEach((key: string): void => {\n xhr.setRequestHeader(key, requestOptions.headers[key]);\n });\n\n xhr.send(payload);\n });\n}\n\n/**\n * Fires a retriable HTTP POST request.\n *\n * @param url The URL to which the request is sent.\n * @param payload The payload to send.\n * @param requestOptions The request options.\n * @param {Promise} An attempt to send the request.\n */\nexport function post(url: string, payload: string, requestOptions?: any): Promise {\n const delay = 500;\n const maxRetries = 3;\n let retries = 0;\n\n const retriable = (): Promise =>\n new Promise((resolve: (result?: any) => any, reject: (reason?: any) => any): void => {\n _post(url, payload, requestOptions)\n .then(resolve)\n .catch((e: Error): void => {\n console.error(e);\n\n if (retries < maxRetries) {\n setTimeout((): void => {\n retries++;\n retriable().then(resolve);\n }, delay * 2);\n } else {\n reject(e);\n }\n });\n });\n\n return retriable();\n}\n","import { post } from './ajax';\nimport { DataEvent } from './interfaces';\nimport { Message } from './message';\n\n/**\n * Logs the message to the console.\n *\n * @since 1.0.0\n *\n * @param message The message to log.\n *\n * @return A promise that resolves with an empty object.\n */\nexport function toConsole(message: Message): Promise {\n console.info('message: %o', message);\n return Promise.resolve();\n}\n\n/**\n * Sends the message events to GSS.\n *\n * @param {Message} message The message to send.\n *\n * @return {Promise} An attempt to send the message events to GSS.\n */\nexport function toGSS(message: Message): void {\n for (const dataEvent of message.events as DataEvent[]) {\n if (dataEvent.type) {\n if (dataEvent.type === 'page_view' && dataEvent.transit) {\n // @ts-ignore: ignore build error from global.d.ts file\n window.GSS.analytics.pageView(dataEvent.transit.to.title, dataEvent.transit.to.path);\n }\n\n if (dataEvent.type !== 'page_view' && dataEvent.type !== 'headless') {\n // @ts-ignore: ignore build error from global.d.ts file\n window.GSS.analytics.event(\n dataEvent.type,\n {\n event_category: dataEvent.name,\n event_label: dataEvent.label,\n event_value: dataEvent.value\n },\n dataEvent.userInteraction === undefined ? false : !dataEvent.userInteraction\n );\n }\n }\n }\n}\n\n/**\n * Sends the message to the server.\n *\n * @since 1.0.0\n *\n * @param {string} url The url to which the request is sent.\n * @param {Message} message The message to send.\n * @param {Object} requestOptions The request options.\n *\n * @return {Promise} An attempt to send the message to the server\n */\nexport function toServer(url: string, message: Message, requestOptions?: any): Promise {\n return post(url, JSON.stringify(message), requestOptions);\n}\n\nexport default {\n toConsole,\n toServer\n};\n","/**\n * Gets the sessionId.\n *\n * @return {string} The sessionId.\n */\nexport function getSessionId(): string {\n return sessionStorage.getItem('gar-sessionId') || '0';\n}\n\n/**\n * Saves the sessionId.\n *\n * @param sessionId The sessionId.\n */\nexport function saveSessionId(sessionId: string): void {\n sessionStorage.setItem('gar-sessionId', sessionId);\n}\n","import Config from './config';\nimport { DataEvent, TenantId } from './interfaces';\nimport { getSessionId } from './util/sessionid';\n\nexport type Message = {\n /**\n * The app details.\n */\n app: {\n /**\n * The app code name.\n */\n name: string;\n\n /**\n * The tenant Id.\n */\n tenantId?: TenantId;\n\n /**\n * The app version.\n */\n version: string;\n };\n\n /**\n * The client id.\n */\n clientId: string;\n\n /**\n * The tracked events. At least one Event is required.\n */\n events: DataEvent[];\n\n /**\n * The host name.\n */\n host: string;\n\n /**\n * The member Id\n */\n memberId: string;\n\n /**\n * Whether the events message is from past events\n */\n pastEvents: boolean;\n\n /**\n * The event source.\n */\n platform: {\n /**\n * The current locale.\n */\n locale: string;\n\n resolution: {\n /**\n * The screen height.\n */\n height: number;\n\n /**\n * The screen width.\n */\n width: number;\n };\n\n type: 'desktop' | 'mobile' | 'other';\n\n userAgent: string | undefined;\n };\n\n /**\n * The session Id.\n */\n sessionId?: string | null;\n\n /**\n * The timestamp when the message is being sent\n */\n timestamp: string;\n\n /**\n * The user Id.\n */\n userId: string;\n};\n\n/**\n * Generates a User Tracking message envelope.\n *\n * @return The message envelope.\n */\nfunction createMessage(): Message {\n return {\n app: Config().appDetails,\n clientId: '0',\n events: [],\n host: window.location.host,\n pastEvents: false,\n platform: {\n locale: window.navigator.language,\n resolution: {\n height: window.screen.height,\n width: window.screen.width,\n },\n type: 'desktop',\n userAgent: window.navigator.userAgent,\n },\n memberId: '0',\n sessionId: getSessionId(),\n timestamp: new Date().toISOString(),\n userId: '0',\n };\n}\n\n/**\n * Creates and returns a event message.\n *\n * @param {Event} The event.\n * @return {Message} The events message.\n */\nexport function createEventsMessage(events: DataEvent[] | DataEvent): Message {\n const message = createMessage();\n\n message.events = Array.isArray(events) ? events : [events];\n\n return message;\n}\n","import Config from './config';\nimport { toConsole, toGSS, toServer } from './dispatch';\nimport { DispatchTarget } from './enums';\nimport { CommandOptions, DataEvent } from './interfaces';\nimport { Message, createEventsMessage } from './message';\nimport { buildDispatchURL } from './util/query';\nimport { getSessionId } from './util/sessionid';\n\n/**\n * Event types and their associated handlers.\n */\ninterface EventListeners {\n [name: string]: (e: Event) => void;\n}\n\n/**\n * The message and request properties.\n *\n * @since 1.0.0\n */\ninterface EventStore {\n /**\n * Where to send the tracked events.\n */\n dispatchTargets: DispatchTarget[];\n\n /**\n * The endpoint to which the tracked events are sent.\n */\n dispatchUrl: string;\n\n /**\n * The session id.\n */\n sessionId?: string;\n\n /**\n * The event times.\n */\n eventTimes: {\n lastEvent: number;\n lastPageEvent: number;\n };\n\n /**\n * The tracked events wrapper.\n */\n message: Message;\n}\n\n/**\n * An object that tracks various DOM and window events.\n *\n * @since 1.0.0\n */\nexport default class Tracker {\n /**\n * The attached event handlers.\n */\n private attachedEventListeners: EventListeners = {};\n\n /**\n * The interval (in milliseconds) at which the event queue is flushed and its contents dispatched.\n */\n private dispatchInterval: number;\n\n /**\n * The interval timer token.\n */\n private dispatchSavedEventsToken = 0;\n\n /**\n * This tracker's name.\n */\n private name: string;\n\n /**\n * The options with which to configure this tracker.\n */\n private options: CommandOptions;\n\n /**\n * Constructs a tracker instance.\n *\n * @param name the tracker name.\n * @param options the tracker options.\n */\n public constructor(name: string, options: CommandOptions) {\n this.name = name;\n this.options = options;\n this.dispatchInterval = options.config ? options.config.dispatchInterval : 10000;\n\n this.initializeStore();\n this.initializeQueueFlushTimer();\n }\n\n /**\n * Get's active event store.\n *\n * @return The event store.\n */\n private getEventStore(): EventStore {\n const eventStore: string | null = localStorage.getItem(this.name);\n let store: EventStore;\n\n if (!eventStore) {\n store = this.initializeStore();\n } else {\n store = JSON.parse(eventStore);\n }\n\n return store;\n }\n\n /**\n * Starts the timer that monitors that event queue.\n */\n private initializeQueueFlushTimer(): void {\n this.dispatchSavedEventsToken = window.setInterval((): void => this.dispatchSavedEvents(), this.dispatchInterval);\n }\n\n /**\n * Initializes the event store.\n *\n * @return {EventStore} The event store.\n */\n private initializeStore(): EventStore {\n // The event store is present when the previous tracking session was unable to dispatch the tracked events.\n try {\n const pastEventStore = localStorage.getItem(this.name);\n\n if (pastEventStore) {\n const eventStore: EventStore = JSON.parse(pastEventStore);\n\n // Dispatch a record request only if tracked events are present.\n if (eventStore?.message?.events?.length) {\n // Flag the message as old\n eventStore.message.pastEvents = true;\n\n this.sendEvents(eventStore.message);\n }\n }\n } catch (e) {\n console.error('initializeStore() > Unable to send previously recorded events.', e);\n }\n\n // Get the current time\n const now = Date.now();\n\n // Create a new store\n const store: EventStore = {\n dispatchTargets: this.options.config?.dispatchTargets || [DispatchTarget.CONSOLE],\n dispatchUrl: this.getDispatchUrl(),\n sessionId: getSessionId(),\n eventTimes: {\n lastEvent: now,\n lastPageEvent: now\n },\n message: createEventsMessage([])\n };\n\n // Save the store\n localStorage.setItem(this.name, JSON.stringify(store));\n\n return store;\n }\n\n /**\n * Resets the tracked events in the active event store.\n */\n private resetEventStore(): void {\n const store: EventStore = this.getEventStore();\n\n store.message = createEventsMessage([]);\n\n localStorage.setItem(this.name, JSON.stringify(store));\n }\n\n /**\n * Saves a tracked event.\n *\n * @param event The event to save.\n */\n private saveEvent(event: DataEvent): void {\n // Get the event store\n const store: EventStore = this.getEventStore();\n\n // Add the event to the event store\n store.message.events.push(event);\n\n // persist the event store\n localStorage.setItem(this.name, JSON.stringify(store));\n }\n\n /**\n * Dispatches the tracked events to the configured target.\n *\n * @param message The message to send.\n * @param headers The headers to use.\n *\n * @return An attempt to dispatch the tracked events.\n */\n private async sendEvents(message: Message): Promise {\n const dispatchUrl: string = this.getDispatchUrl();\n const requestHeaders = Object.assign({}, Config().requestHeaders);\n\n for (const dispatchTarget of this.options.config?.dispatchTargets || []) {\n if (dispatchTarget === DispatchTarget.CONSOLE) {\n toConsole(message);\n } else if (dispatchTarget === DispatchTarget.GSS) {\n toGSS(message);\n } else if (dispatchTarget === DispatchTarget.SERVER) {\n await toServer(dispatchUrl, message, {\n headers: requestHeaders\n });\n }\n }\n }\n\n /**\n * Dispatches all currently saved events.\n */\n private dispatchSavedEvents(): void {\n const store = this.getEventStore();\n\n if (store.message.events.length > 0) {\n const dispatchUrl = this.getDispatchUrl();\n\n for (const dispatchTarget of this.options.config?.dispatchTargets || []) {\n if (dispatchTarget === DispatchTarget.CONSOLE) {\n toConsole(store.message);\n } else if (dispatchTarget === DispatchTarget.GSS) {\n toGSS(store.message);\n } else if (dispatchTarget === DispatchTarget.SERVER) {\n toServer(dispatchUrl, store.message, {\n headers: Config().requestHeaders\n });\n }\n }\n\n this.resetEventStore();\n }\n }\n\n /**\n * Gets the dispatch URL.\n *\n * @returns The dispatch URL.\n */\n private getDispatchUrl(): string {\n return this.options && this.options.config\n ? this.options.config.dispatchURL\n : buildDispatchURL(this.options.config?.queryParams, this.options.config?.dispatchURL);\n }\n\n /**\n * Removes all registered event listeners.\n *\n * @since 1.0.0\n */\n public destroy(): void {\n // Tear down events\n Object.keys(this.attachedEventListeners).forEach((key: string): void => {\n document.removeEventListener(key, this.attachedEventListeners[key]);\n });\n\n // Cancel the dispatch interval timer\n window.clearInterval(this.dispatchSavedEventsToken);\n\n // Removes the event store\n localStorage.removeItem(this.name);\n }\n\n /**\n * Triggers an event on demand.\n *\n * @since 1.0.0\n * @param {CommandOptions} event The event options to use.\n */\n public track(event: CommandOptions): void {\n const eventDetails = event.data?.eventDetails;\n\n const trackedEvent: DataEvent = {\n classList: eventDetails?.classList || ['event', 'user'],\n label: eventDetails?.label || 'unknown',\n name: eventDetails?.name || 'unknown',\n path: eventDetails?.path || 'unknown',\n state: event.data?.state || {},\n timestamp: new Date().toISOString(),\n transit: eventDetails?.transit,\n type: eventDetails?.type,\n url: window.location.pathname + window.location.search + window.location.hash\n };\n\n if (trackedEvent.classList && trackedEvent.classList.includes('audit')) {\n const message = createEventsMessage(trackedEvent);\n this.sendEvents(message).catch((e: Error): void => {\n console.error('Unable to send audit event', e);\n });\n } else {\n this.saveEvent(trackedEvent);\n }\n }\n}\n","import Tracker from './tracker';\n\n/**\n * An object that maps keys (tracker names) to values (tracker objects).\n */\nexport interface Store {\n [name: string]: Tracker;\n}\n\nconst store: Store = Object.create(null);\n\n/**\n * Adds the tracker with the provided name.\n *\n * @param name the tracker name.\n * @param tracker the tracker object.\n */\nexport function add(name: string, tracker: Tracker): void {\n store[name] = tracker;\n}\n\n/**\n * Checks whether a tracker with the provided name exists.\n *\n * @param name the tracker name.\n * @returns true if the tracker exits.\n */\nexport function contains(name: string): boolean {\n return Object.hasOwnProperty.call(store, name);\n}\n\n/**\n * Returns the tracker with the provided name.\n *\n * @param name the tracker to retrieve.\n * @returns the tracker.\n */\nexport function get(name: string): Tracker {\n return store[name];\n}\n\n/**\n * Returns the store size.\n *\n * @returns {number} the store size.\n */\nexport function isEmpty(): boolean {\n return Object.keys(store).length === 0;\n}\n\n/**\n * Removes the tracker with the provided name.\n *\n * @param name the tracker to remove.\n * @returns the removed tracker.\n */\nexport function remove(name: string): Tracker | null {\n let tracker: Tracker | null = null;\n\n if (contains(name)) {\n tracker = store[name];\n delete store[name];\n }\n\n return tracker;\n}\n\n/**\n * Returns the store size.\n *\n * @returns {number} the store size.\n */\nexport function size(): number {\n return Object.keys(store).length;\n}\n\nexport default {\n add,\n contains,\n get,\n isEmpty,\n remove,\n size\n};\n","import { DEFAULT_TRACKER_NAME } from './config';\nimport { CommandOptions } from './interfaces';\nimport Tracker from './tracker';\nimport * as store from './tracker-store';\n\n/**\n * Processes all commands.\n *\n * @param command The command to trigger.\n * @param options The options with which to trigger the command.\n */\nexport default function (command: string, options: CommandOptions): void {\n const trackerName = options.config ? options.config.trackerName : DEFAULT_TRACKER_NAME;\n\n switch (command) {\n case 'create':\n if (store.contains(trackerName)) {\n console.warn(`CommandProcessor - The tracker with name, ${trackerName}, already exists.`);\n } else {\n store.add(trackerName, new Tracker(trackerName, options));\n }\n\n break;\n\n case 'send':\n if (store.contains(trackerName)) {\n store.get(trackerName).track(options);\n } else {\n console.warn(`CommandProcessor - The tracker with name, ${trackerName}, was not found.`);\n }\n\n break;\n\n case 'stop':\n if (store.contains(trackerName)) {\n store.get(trackerName).destroy();\n store.remove(trackerName);\n } else {\n console.warn(`CommandProcessor - The tracker with name, ${trackerName}, was not found.`);\n }\n\n break;\n default:\n console.warn(`CommandProcessor - The command, ${command}, is not supported.`);\n }\n}\n","import { toConsole, toServer } from './dispatch';\nimport { DispatchTarget } from './enums';\nimport { Configuration, DataEvent } from './interfaces';\nimport { createEventsMessage } from './message';\nimport { saveSessionId } from './util/sessionid';\n\n/**\n * Initializes the tracking session.\n *\n * @param options The global configuration startup options.\n */\nexport default async function initialize(options: Configuration): Promise {\n const appName = options.appDetails ? options.appDetails.name.toLocaleLowerCase() : 'unknown';\n const tenantId =\n options.appDetails && options.appDetails.tenantId ? options.appDetails.tenantId.toLocaleLowerCase() : 'unknown';\n\n const event: DataEvent = {\n classList: ['event', 'user'],\n label: 'Application Visit',\n name: `${appName}`,\n path: `${tenantId}.${appName}.visit`,\n timestamp: new Date().toISOString(),\n type: 'headless',\n url: window.location.pathname + window.location.search + window.location.hash,\n };\n\n window.sessionStorage.setItem('event-tracking::app-name', appName);\n\n const message = createEventsMessage(event);\n\n for (const dispatchTarget of options.dispatchTargets) {\n if (dispatchTarget === DispatchTarget.CONSOLE) {\n toConsole(message);\n } else if (dispatchTarget === DispatchTarget.SERVER) {\n const result = await toServer(options.registrationURL, message, {\n headers: options.requestHeaders,\n });\n\n try {\n // try to get the sessionId from the response\n const response = JSON.parse(result.response);\n\n if (response && response.data && response.data.sessionId) {\n saveSessionId(response.data.sessionId);\n } else {\n throw new Error('Unable to find sessionId.');\n }\n } catch (e) {\n throw new Error('Unable to find sessionId.');\n }\n }\n }\n}\n","import CommandProcessor from './command-processor';\nimport Config from './config';\nimport initialize from './initializer';\nimport {\n CommandOptions,\n Configuration,\n InteractionCommandOptions,\n PageViewCommandOptions,\n StartupOptions,\n} from './interfaces';\n\n/**\n * The list of commands issued before registration completes.\n */\nlet deferredCommands: [string, CommandOptions][] = [];\n\n/**\n * Whether the tracking process has started.\n */\nlet isTracking = false;\n\n/**\n * Whether the registration process is in progress.\n */\nlet isRegistrationInFlight = false;\n\n/**\n * Processes the provided list of commands.\n *\n * @param commandQueue the list of commands to process.\n * @param config the global configuration.\n */\nfunction processCommandQueue(commandQueue: [string, CommandOptions][]): void {\n commandQueue.forEach((command: [string, CommandOptions]): void => {\n CommandProcessor(command[0], {\n ...command[1],\n });\n });\n}\n\n/**\n * Records a single event.\n *\n * @param options The options to record.\n * @param isAudit Whether or not this is an audit event.\n */\nfunction record(options: InteractionCommandOptions | PageViewCommandOptions): void {\n const config: Configuration = Config();\n const data = {\n eventDetails: options.eventDetails,\n state: options.state,\n };\n const commandOptions: CommandOptions = Object.assign({\n config,\n data,\n });\n\n if (isTracking) {\n CommandProcessor('send', commandOptions);\n } else {\n deferredCommands = deferredCommands.concat([['send', commandOptions]]);\n }\n}\n\n/**\n * Records a single interaction event.\n *\n * @param options The options to record.\n */\nexport function recordInteraction(options: InteractionCommandOptions): void {\n record(options);\n}\n\n/**\n * Records a single page view event.\n *\n * @param options The options to record.\n */\nexport function recordPageView(options: PageViewCommandOptions): void {\n options.eventDetails.type = 'page_view';\n record(options);\n}\n\n/**\n * Starts the tracking process.\n *\n * @since 1.0.0\n * @param options The options with which to start the tracking process.\n * @return An attempt to start the tracking process.\n */\nexport async function startUserTracking(options: StartupOptions): Promise {\n if (isRegistrationInFlight || isTracking) {\n console.warn('start() > Initialization is either in progress or complete.');\n\n return {\n isRegistrationInFlight,\n isTracking,\n };\n }\n\n isRegistrationInFlight = true;\n\n const config: Configuration = Config(options);\n\n try {\n await initialize(config);\n\n // create the default tracker\n CommandProcessor('create', { config });\n\n // process any existing commands\n processCommandQueue(deferredCommands);\n\n isRegistrationInFlight = false;\n isTracking = true;\n\n return {\n isRegistrationInFlight,\n isTracking,\n };\n } catch (e) {\n console.error('start() > Unable to start the tracking session.', e);\n isRegistrationInFlight = false;\n\n return {\n isRegistrationInFlight,\n isTracking,\n };\n }\n}\n\nexport default {\n recordInteraction,\n recordPageView,\n startUserTracking,\n};\n"],"names":["DispatchTarget","Events","__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","exports","DISPATCH_URL","REGISTRATION_URL","buildDispatchURL","queryParams","dispatchURLOverride","dispatchUrl","concat","window","location","origin","keys","parseQueryParameters","parameters","_i","_a","entries","_b","key","map","join","configuration","DEFAULT_TRACKER_NAME","hasParsedConfig","Config","startupConfig","dispatchTargets","SERVER","dispatchURL","registrationURL","registrationURLOverride","buildRegistrationURL","trackerName","appName","appDetails","name","appVersion","version","cacheVersion","_c","_d","_e","getTrackerName","dispatchInterval","post","url","payload","requestOptions","retries","retriable","xhr","XMLHttpRequest","open","onload","readyState","status","onerror","setRequestHeader","headers","forEach","send","_post","catch","console","error","setTimeout","delay","toConsole","message","info","toGSS","events","dataEvent","type","transit","GSS","analytics","pageView","to","title","path","event","event_category","event_label","event_value","undefined","userInteraction","toServer","JSON","stringify","getSessionId","sessionStorage","getItem","createEventsMessage","app","clientId","host","pastEvents","platform","locale","navigator","language","resolution","height","screen","width","userAgent","memberId","sessionId","timestamp","Date","toISOString","userId","Array","isArray","Tracker","options","attachedEventListeners","dispatchSavedEventsToken","config","initializeStore","initializeQueueFlushTimer","getEventStore","eventStore","localStorage","parse","_this","setInterval","dispatchSavedEvents","pastEventStore","sendEvents","now","store","CONSOLE","getDispatchUrl","eventTimes","lastEvent","lastPageEvent","setItem","resetEventStore","saveEvent","requestHeaders","dispatchTarget","destroy","document","removeEventListener","clearInterval","removeItem","track","eventDetails","data","trackedEvent","classList","state","pathname","search","hash","includes","create","contains","get","CommandProcessor","command","tracker","store.contains","warn","store.get","store.remove","initialize","toLocaleLowerCase","tenantId","response","Error","deferredCommands","isTracking","isRegistrationInFlight","record","commandOptions","recordInteraction","recordPageView","startUserTracking","e_1","index"],"mappings":"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"}