/*! * 1DS JS SDK POST plugin, 3.2.13 * Copyright (c) Microsoft and contributors. All rights reserved. * (Microsoft Internal Only) */ 'use strict'; (function (global, factory) { var undef = "undefined"; typeof exports === "object" && typeof module !== undef ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (function(global){ var nsKey, key, nm, theExports = {}, modName = "esm_ms_post_3_2_13", msMod="__ms$mod__"; var mods={}, modDetail=mods[modName]={}, ver="3.2.13"; // Versioned namespace "oneDS3" var exportNs=global, nsKey="oneDS3", exportNs=exportNs[nsKey]=(exportNs[nsKey]||{}); // Global namespace "oneDS" var destNs=global, nsKey="oneDS", destNs=destNs[nsKey]=(destNs[nsKey]||{}); var expNsDetail=(exportNs[msMod]=(exportNs[msMod] || {})), expNameVer=(expNsDetail["v"]=(expNsDetail["v"] || [])); var destNsDetail=(destNs[msMod]=(destNs[msMod] || {})), destNameVer=(destNsDetail["v"]=(destNsDetail["v"] || [])); (destNsDetail["o"]=(destNsDetail["o"] || [])).push(mods); factory(theExports); for(var key in theExports) { // Always set the imported value into the "export" versioned namespace (last-write wins) nm="x", exportNs[key]=theExports[key], expNameVer[key]=ver; // Overwrite every elements in namespace and record (last-write wins) nm="n", destNs[key]=theExports[key], destNameVer[key]=ver; (modDetail[nm] = (modDetail[nm] || [])).push(key); } })(typeof globalThis !== undef ? globalThis : global || self); })(this, (function (exports) { 'use strict'; (function(obj, prop, descriptor) { /* ai_es3_polyfil defineProperty */ var func = Object["defineProperty"]; if (func) { try { return func(obj, prop, descriptor); } catch(e) { /* IE8 defines defineProperty, but will throw */ } } if (descriptor && typeof descriptor.value !== undefined) { obj[prop] = descriptor.value; } return obj; })(exports, '__esModule', { value: true }); var strShimFunction = "function"; var strShimObject = "object"; var strShimUndefined = "undefined"; var strShimPrototype = "prototype"; var strShimHasOwnProperty = "hasOwnProperty"; var ObjClass = Object; var ObjProto = ObjClass[strShimPrototype]; var ObjAssign = ObjClass["assign"]; var ObjCreate = ObjClass["create"]; var ObjDefineProperty = ObjClass["defineProperty"]; var ObjHasOwnProperty = ObjProto[strShimHasOwnProperty]; var _cachedGlobal = null; function getGlobal(useCached) { if (useCached === void 0) { useCached = true; } var result = useCached === false ? null : _cachedGlobal; if (!result) { if (typeof globalThis !== strShimUndefined) { result = globalThis; } if (!result && typeof self !== strShimUndefined) { result = self; } if (!result && typeof window !== strShimUndefined) { result = window; } if (!result && typeof global !== strShimUndefined) { result = global; } _cachedGlobal = result; } return result; } function throwTypeError(message) { throw new TypeError(message); } function objCreateFn(obj) { var func = ObjCreate; if (func) { return func(obj); } if (obj == null) { return {}; } var type = typeof obj; if (type !== strShimObject && type !== strShimFunction) { throwTypeError("Object prototype may only be an Object:" + obj); } function tmpFunc() { } tmpFunc[strShimPrototype] = obj; return new tmpFunc(); } (getGlobal() || {})["Symbol"]; (getGlobal() || {})["Reflect"]; var extendStaticsFn = function (d, b) { extendStaticsFn = ObjClass["setPrototypeOf"] || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) { if (b[strShimHasOwnProperty](p)) { d[p] = b[p]; } } }; return extendStaticsFn(d, b); }; function __extendsFn(d, b) { if (typeof b !== strShimFunction && b !== null) { throwTypeError("Class extends value " + String(b) + " is not a constructor or null"); } extendStaticsFn(d, b); function __() { this.constructor = d; } d[strShimPrototype] = b === null ? objCreateFn(b) : (__[strShimPrototype] = b[strShimPrototype], new __()); } /*! * Microsoft Dynamic Proto Utility, 1.1.9 * Copyright (c) Microsoft and contributors. All rights reserved. */ var _a$2; var UNDEFINED = "undefined"; var Constructor = 'constructor'; var Prototype = 'prototype'; var strFunction = 'function'; var DynInstFuncTable = '_dynInstFuncs'; var DynProxyTag = '_isDynProxy'; var DynClassName = '_dynClass'; var DynClassNamePrefix = '_dynCls$'; var DynInstChkTag = '_dynInstChk'; var DynAllowInstChkTag = DynInstChkTag; var DynProtoDefaultOptions = '_dfOpts'; var UnknownValue = '_unknown_'; var str__Proto$1 = "__proto__"; var DynProtoBaseProto = "_dyn" + str__Proto$1; var DynProtoGlobalSettings = "__dynProto$Gbl"; var DynProtoCurrent = "_dynInstProto"; var strUseBaseInst = 'useBaseInst'; var strSetInstFuncs = 'setInstFuncs'; var Obj = Object; var _objGetPrototypeOf$1 = Obj["getPrototypeOf"]; var _objGetOwnProps = Obj["getOwnPropertyNames"]; function _getGlobal() { var result; if (typeof globalThis !== UNDEFINED) { result = globalThis; } if (!result && typeof self !== UNDEFINED) { result = self; } if (!result && typeof window !== UNDEFINED) { result = window; } if (!result && typeof global !== UNDEFINED) { result = global; } return result || {}; } var _gbl = _getGlobal(); var _gblInst = _gbl[DynProtoGlobalSettings] || (_gbl[DynProtoGlobalSettings] = { o: (_a$2 = {}, _a$2[strSetInstFuncs] = true, _a$2[strUseBaseInst] = true, _a$2), n: 1000 }); function _hasOwnProperty(obj, prop) { return obj && Obj[Prototype].hasOwnProperty.call(obj, prop); } function _isObjectOrArrayPrototype(target) { return target && (target === Obj[Prototype] || target === Array[Prototype]); } function _isObjectArrayOrFunctionPrototype(target) { return _isObjectOrArrayPrototype(target) || target === Function[Prototype]; } function _getObjProto$1(target) { var newProto; if (target) { if (_objGetPrototypeOf$1) { return _objGetPrototypeOf$1(target); } var curProto = target[str__Proto$1] || target[Prototype] || (target[Constructor] ? target[Constructor][Prototype] : null); newProto = target[DynProtoBaseProto] || curProto; if (!_hasOwnProperty(target, DynProtoBaseProto)) { delete target[DynProtoCurrent]; newProto = target[DynProtoBaseProto] = target[DynProtoCurrent] || target[DynProtoBaseProto]; target[DynProtoCurrent] = curProto; } } return newProto; } function _forEachProp(target, func) { var props = []; if (_objGetOwnProps) { props = _objGetOwnProps(target); } else { for (var name_1 in target) { if (typeof name_1 === "string" && _hasOwnProperty(target, name_1)) { props.push(name_1); } } } if (props && props.length > 0) { for (var lp = 0; lp < props.length; lp++) { func(props[lp]); } } } function _isDynamicCandidate(target, funcName, skipOwn) { return (funcName !== Constructor && typeof target[funcName] === strFunction && (skipOwn || _hasOwnProperty(target, funcName))); } function _throwTypeError(message) { throw new TypeError("DynamicProto: " + message); } function _getInstanceFuncs(thisTarget) { var instFuncs = {}; _forEachProp(thisTarget, function (name) { if (!instFuncs[name] && _isDynamicCandidate(thisTarget, name, false)) { instFuncs[name] = thisTarget[name]; } }); return instFuncs; } function _hasVisited(values, value) { for (var lp = values.length - 1; lp >= 0; lp--) { if (values[lp] === value) { return true; } } return false; } function _getBaseFuncs(classProto, thisTarget, instFuncs, useBaseInst) { function _instFuncProxy(target, funcHost, funcName) { var theFunc = funcHost[funcName]; if (theFunc[DynProxyTag] && useBaseInst) { var instFuncTable = target[DynInstFuncTable] || {}; if (instFuncTable[DynAllowInstChkTag] !== false) { theFunc = (instFuncTable[funcHost[DynClassName]] || {})[funcName] || theFunc; } } return function () { return theFunc.apply(target, arguments); }; } var baseFuncs = {}; _forEachProp(instFuncs, function (name) { baseFuncs[name] = _instFuncProxy(thisTarget, instFuncs, name); }); var baseProto = _getObjProto$1(classProto); var visited = []; while (baseProto && !_isObjectArrayOrFunctionPrototype(baseProto) && !_hasVisited(visited, baseProto)) { _forEachProp(baseProto, function (name) { if (!baseFuncs[name] && _isDynamicCandidate(baseProto, name, !_objGetPrototypeOf$1)) { baseFuncs[name] = _instFuncProxy(thisTarget, baseProto, name); } }); visited.push(baseProto); baseProto = _getObjProto$1(baseProto); } return baseFuncs; } function _getInstFunc(target, funcName, proto, currentDynProtoProxy) { var instFunc = null; if (target && _hasOwnProperty(proto, DynClassName)) { var instFuncTable = target[DynInstFuncTable] || {}; instFunc = (instFuncTable[proto[DynClassName]] || {})[funcName]; if (!instFunc) { _throwTypeError("Missing [" + funcName + "] " + strFunction); } if (!instFunc[DynInstChkTag] && instFuncTable[DynAllowInstChkTag] !== false) { var canAddInst = !_hasOwnProperty(target, funcName); var objProto = _getObjProto$1(target); var visited = []; while (canAddInst && objProto && !_isObjectArrayOrFunctionPrototype(objProto) && !_hasVisited(visited, objProto)) { var protoFunc = objProto[funcName]; if (protoFunc) { canAddInst = (protoFunc === currentDynProtoProxy); break; } visited.push(objProto); objProto = _getObjProto$1(objProto); } try { if (canAddInst) { target[funcName] = instFunc; } instFunc[DynInstChkTag] = 1; } catch (e) { instFuncTable[DynAllowInstChkTag] = false; } } } return instFunc; } function _getProtoFunc(funcName, proto, currentDynProtoProxy) { var protoFunc = proto[funcName]; if (protoFunc === currentDynProtoProxy) { protoFunc = _getObjProto$1(proto)[funcName]; } if (typeof protoFunc !== strFunction) { _throwTypeError("[" + funcName + "] is not a " + strFunction); } return protoFunc; } function _populatePrototype(proto, className, target, baseInstFuncs, setInstanceFunc) { function _createDynamicPrototype(proto, funcName) { var dynProtoProxy = function () { var instFunc = _getInstFunc(this, funcName, proto, dynProtoProxy) || _getProtoFunc(funcName, proto, dynProtoProxy); return instFunc.apply(this, arguments); }; dynProtoProxy[DynProxyTag] = 1; return dynProtoProxy; } if (!_isObjectOrArrayPrototype(proto)) { var instFuncTable = target[DynInstFuncTable] = target[DynInstFuncTable] || {}; var instFuncs_1 = instFuncTable[className] = (instFuncTable[className] || {}); if (instFuncTable[DynAllowInstChkTag] !== false) { instFuncTable[DynAllowInstChkTag] = !!setInstanceFunc; } _forEachProp(target, function (name) { if (_isDynamicCandidate(target, name, false) && target[name] !== baseInstFuncs[name]) { instFuncs_1[name] = target[name]; delete target[name]; if (!_hasOwnProperty(proto, name) || (proto[name] && !proto[name][DynProxyTag])) { proto[name] = _createDynamicPrototype(proto, name); } } }); } } function _checkPrototype(classProto, thisTarget) { if (_objGetPrototypeOf$1) { var visited = []; var thisProto = _getObjProto$1(thisTarget); while (thisProto && !_isObjectArrayOrFunctionPrototype(thisProto) && !_hasVisited(visited, thisProto)) { if (thisProto === classProto) { return true; } visited.push(thisProto); thisProto = _getObjProto$1(thisProto); } return false; } return true; } function _getObjName(target, unknownValue) { if (_hasOwnProperty(target, Prototype)) { return target.name || unknownValue || UnknownValue; } return (((target || {})[Constructor]) || {}).name || unknownValue || UnknownValue; } function dynamicProto(theClass, target, delegateFunc, options) { if (!_hasOwnProperty(theClass, Prototype)) { _throwTypeError("theClass is an invalid class definition."); } var classProto = theClass[Prototype]; if (!_checkPrototype(classProto, target)) { _throwTypeError("[" + _getObjName(theClass) + "] not in hierarchy of [" + _getObjName(target) + "]"); } var className = null; if (_hasOwnProperty(classProto, DynClassName)) { className = classProto[DynClassName]; } else { className = DynClassNamePrefix + _getObjName(theClass, "_") + "$" + _gblInst.n; _gblInst.n++; classProto[DynClassName] = className; } var perfOptions = dynamicProto[DynProtoDefaultOptions]; var useBaseInst = !!perfOptions[strUseBaseInst]; if (useBaseInst && options && options[strUseBaseInst] !== undefined) { useBaseInst = !!options[strUseBaseInst]; } var instFuncs = _getInstanceFuncs(target); var baseFuncs = _getBaseFuncs(classProto, target, instFuncs, useBaseInst); delegateFunc(target, baseFuncs); var setInstanceFunc = !!_objGetPrototypeOf$1 && !!perfOptions[strSetInstFuncs]; if (setInstanceFunc && options) { setInstanceFunc = !!options[strSetInstFuncs]; } _populatePrototype(classProto, className, target, instFuncs, setInstanceFunc !== false); } dynamicProto[DynProtoDefaultOptions] = _gblInst.o; var _DYN_INITIALIZE = "initialize"; var _DYN_NAME = "name"; var _DYN_IDENTIFIER = "identifier"; var _DYN_PUSH = "push"; var _DYN_IS_INITIALIZED = "isInitialized"; var _DYN_CONFIG = "config"; var _DYN_LOGGER = "logger"; var _DYN_LENGTH = "length"; var _DYN_TIME = "time"; var _DYN_PROCESS_NEXT = "processNext"; var _DYN_GET_PROCESS_TEL_CONT0 = "getProcessTelContext"; var _DYN_GET_PLUGIN = "getPlugin"; var _DYN_SPLICE = "splice"; var _DYN_TEARDOWN = "teardown"; var _DYN_MESSAGE_ID = "messageId"; var _DYN_MESSAGE = "message"; var _DYN_IS_ASYNC = "isAsync"; var _DYN__DO_TEARDOWN = "_doTeardown"; var _DYN_UPDATE = "update"; var _DYN_GET_NEXT = "getNext"; var _DYN_DIAG_LOG = "diagLog"; var _DYN_SET_NEXT_PLUGIN = "setNextPlugin"; var _DYN_CREATE_NEW = "createNew"; var _DYN_INDEX_OF = "indexOf"; var _DYN_USER_AGENT = "userAgent"; var _DYN_SPLIT = "split"; var _DYN_NODE_TYPE = "nodeType"; var _DYN_APPLY = "apply"; var _DYN_REPLACE = "replace"; var _DYN_ENABLE_DEBUG_EXCEPTI4 = "enableDebugExceptions"; var _DYN_LOG_INTERNAL_MESSAGE = "logInternalMessage"; var _DYN_TO_LOWER_CASE = "toLowerCase"; var _DYN_CALL = "call"; var _DYN_TYPE = "type"; var _DYN_HANDLER = "handler"; var _DYN_IS_CHILD_EVT = "isChildEvt"; var _DYN_GET_CTX = "getCtx"; var _DYN_SET_CTX = "setCtx"; var _DYN_COMPLETE = "complete"; var STR_EMPTY$2 = ""; var STR_CORE = "core"; var STR_DISABLED = "disabled"; var STR_EXTENSION_CONFIG = "extensionConfig"; var STR_PROCESS_TELEMETRY = "processTelemetry"; var STR_PRIORITY = "priority"; var STR_ERROR_TO_CONSOLE = "errorToConsole"; var STR_WARN_TO_CONSOLE = "warnToConsole"; var STR_GET_PERF_MGR = "getPerfMgr"; var cStrStartsWith = "startsWith"; var strIndexOf = "indexOf"; var cStrTrim = "trim"; var strToString = "toString"; var str__Proto = "__proto__"; var strConstructor = "constructor"; var _objDefineProperty$1 = ObjDefineProperty; var _objFreeze = ObjClass.freeze; var _objKeys = ObjClass.keys; var StringProto = String[strShimPrototype]; var _strTrim = StringProto[cStrTrim]; var _strStartsWith = StringProto[cStrStartsWith]; var _isArray = Array.isArray; var _objToString = ObjProto[strToString]; var _fnToString = ObjHasOwnProperty[strToString]; var _objFunctionString = _fnToString[_DYN_CALL ](ObjClass); var rCamelCase = /-([a-z])/g; var rNormalizeInvalid = /([^\w\d_$])/g; var rLeadingNumeric = /^(\d+[\w\d_$])/; var _objGetPrototypeOf = Object["getPrototypeOf"]; function _getObjProto(target) { if (target) { if (_objGetPrototypeOf) { return _objGetPrototypeOf(target); } var newProto = target[str__Proto] || target[strShimPrototype] || target[strConstructor]; if (newProto) { return newProto; } } return null; } function isUndefined(value) { return value === undefined || typeof value === strShimUndefined; } function isNullOrUndefined(value) { return (value === null || isUndefined(value)); } function hasOwnProperty(obj, prop) { return !!(obj && ObjHasOwnProperty[_DYN_CALL ](obj, prop)); } function isObject(value) { return !!(value && typeof value === strShimObject); } function isFunction(value) { return !!(value && typeof value === strShimFunction); } function normalizeJsName(name) { var value = name; if (value && isString(value)) { value = value[_DYN_REPLACE ](rCamelCase, function (_all, letter) { return letter.toUpperCase(); }); value = value[_DYN_REPLACE ](rNormalizeInvalid, "_"); value = value[_DYN_REPLACE ](rLeadingNumeric, function (_all, match) { return "_" + match; }); } return value; } function objForEachKey(target, callbackfn) { if (target) { for (var prop in target) { if (ObjHasOwnProperty[_DYN_CALL ](target, prop)) { callbackfn[_DYN_CALL ](target, prop, target[prop]); } } } } function strStartsWith(value, checkValue) { var result = false; if (value && checkValue && !(result = value === checkValue)) { result = _strStartsWith ? value[cStrStartsWith](checkValue) : _strStartsWithPoly(value, checkValue); } return result; } function _strStartsWithPoly(value, checkValue) { var result = false; var chkLen = checkValue ? checkValue[_DYN_LENGTH ] : 0; if (value && chkLen && value[_DYN_LENGTH ] >= chkLen && !(result = value === checkValue)) { for (var lp = 0; lp < chkLen; lp++) { if (value[lp] !== checkValue[lp]) { return false; } } result = true; } return result; } function strContains(value, search) { if (value && search) { return value[_DYN_INDEX_OF ](search) !== -1; } return false; } var isArray = _isArray || _isArrayPoly; function _isArrayPoly(obj) { return !!(obj && _objToString[_DYN_CALL ](obj) === "[object Array]"); } function isString(value) { return typeof value === "string"; } function isNumber(value) { return typeof value === "number"; } function isBoolean(value) { return typeof value === "boolean"; } function isPlainObject(value) { var result = false; if (value && typeof value === "object") { var proto = _objGetPrototypeOf ? _objGetPrototypeOf(value) : _getObjProto(value); if (!proto) { result = true; } else { if (proto[strConstructor] && ObjHasOwnProperty[_DYN_CALL ](proto, strConstructor)) { proto = proto[strConstructor]; } result = typeof proto === strShimFunction && _fnToString[_DYN_CALL ](proto) === _objFunctionString; } } return result; } function arrForEach(arr, callbackfn, thisArg) { var len = arr[_DYN_LENGTH ]; try { for (var idx = 0; idx < len; idx++) { if (idx in arr) { if (callbackfn[_DYN_CALL ](thisArg || arr, arr[idx], idx, arr) === -1) { break; } } } } catch (e) { } } function arrIndexOf(arr, searchElement, fromIndex) { if (arr) { if (arr[strIndexOf]) { return arr[strIndexOf](searchElement, fromIndex); } var len = arr[_DYN_LENGTH ]; var from = fromIndex || 0; try { for (var lp = Math.max(from >= 0 ? from : len - Math.abs(from), 0); lp < len; lp++) { if (lp in arr && arr[lp] === searchElement) { return lp; } } } catch (e) { } } return -1; } function strTrim(str) { if (str) { str = (_strTrim && str[cStrTrim]) ? str[cStrTrim]() : (str[_DYN_REPLACE ] ? str[_DYN_REPLACE ](/^\s+|(?=\s)\s+$/g, STR_EMPTY$2) : str); } return str; } var _objKeysHasDontEnumBug = !({ toString: null }).propertyIsEnumerable("toString"); var _objKeysDontEnums = [ "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor" ]; function objKeys(obj) { var objType = typeof obj; if (objType !== strShimFunction && (objType !== strShimObject || obj === null)) { throwTypeError("objKeys called on non-object"); } if (!_objKeysHasDontEnumBug && _objKeys) { return _objKeys(obj); } var result = []; for (var prop in obj) { if (obj && ObjHasOwnProperty[_DYN_CALL ](obj, prop)) { result[_DYN_PUSH ](prop); } } if (_objKeysHasDontEnumBug) { var dontEnumsLength = _objKeysDontEnums[_DYN_LENGTH ]; for (var lp = 0; lp < dontEnumsLength; lp++) { if (obj && ObjHasOwnProperty[_DYN_CALL ](obj, _objKeysDontEnums[lp])) { result[_DYN_PUSH ](_objKeysDontEnums[lp]); } } } return result; } function objDefineAccessors(target, prop, getProp, setProp) { if (_objDefineProperty$1) { try { var descriptor = { enumerable: true, configurable: true }; if (getProp) { descriptor.get = getProp; } if (setProp) { descriptor.set = setProp; } _objDefineProperty$1(target, prop, descriptor); return true; } catch (e) { } } return false; } function _doNothing(value) { return value; } function deepFreeze(obj) { if (_objFreeze) { objForEachKey(obj, function (name, value) { if (isArray(value) || isObject(value)) { _objFreeze(value); } }); } return objFreeze(obj); } var objFreeze = _objFreeze || _doNothing; function dateNow() { var dt = Date; return dt.now ? dt.now() : new dt().getTime(); } function setValue(target, field, value, valChk, srcChk) { var theValue = value; if (target) { theValue = target[field]; if (theValue !== value && (!srcChk || srcChk(theValue)) && (!valChk || valChk(value))) { theValue = value; target[field] = theValue; } } return theValue; } function getCfgValue(theValue, defaultValue) { return !isNullOrUndefined(theValue) ? theValue : defaultValue; } function _createProxyFunction(source, funcName) { var srcFunc = null; var src = null; if (isFunction(source)) { srcFunc = source; } else { src = source; } return function () { var originalArguments = arguments; if (srcFunc) { src = srcFunc(); } if (src) { return src[funcName][_DYN_APPLY ](src, originalArguments); } }; } function proxyFunctionAs(target, name, source, theFunc, overwriteTarget) { if (target && name && source) { if (overwriteTarget !== false || isUndefined(target[name])) { target[name] = _createProxyFunction(source, theFunc); } } } function optimizeObject(theObject) { if (theObject && ObjAssign) { theObject = ObjClass(ObjAssign({}, theObject)); } return theObject; } function objExtend(obj1, obj2, obj3, obj4, obj5, obj6) { var theArgs = arguments; var extended = theArgs[0] || {}; var argLen = theArgs[_DYN_LENGTH ]; var deep = false; var idx = 1; if (argLen > 0 && isBoolean(extended)) { deep = extended; extended = theArgs[idx] || {}; idx++; } if (!isObject(extended)) { extended = {}; } for (; idx < argLen; idx++) { var arg = theArgs[idx]; var isArgArray = isArray(arg); var isArgObj = isObject(arg); for (var prop in arg) { var propOk = (isArgArray && (prop in arg)) || (isArgObj && (ObjHasOwnProperty[_DYN_CALL ](arg, prop))); if (!propOk) { continue; } var newValue = arg[prop]; var isNewArray = void 0; if (deep && newValue && ((isNewArray = isArray(newValue)) || isPlainObject(newValue))) { var clone = extended[prop]; if (isNewArray) { if (!isArray(clone)) { clone = []; } } else if (!isPlainObject(clone)) { clone = {}; } newValue = objExtend(deep, clone, newValue); } if (newValue !== undefined) { extended[prop] = newValue; } } } return extended; } function createEnumStyle(values) { var enumClass = {}; objForEachKey(values, function (field, value) { enumClass[field] = value; enumClass[value] = field; }); return deepFreeze(enumClass); } var EventsDiscardedReason = createEnumStyle({ Unknown: 0 , NonRetryableStatus: 1 , InvalidEvent: 2 , SizeLimitExceeded: 3 , KillSwitch: 4 , QueueFull: 5 }); var strWindow = "window"; var strDocument = "document"; var strNavigator = "navigator"; var strLocation = "location"; var strConsole = "console"; var strPerformance = "performance"; var strJSON = "JSON"; var strCrypto = "crypto"; var strMsCrypto = "msCrypto"; var strReactNative = "ReactNative"; var strMsie = "msie"; var strTrident = "trident/"; var strXMLHttpRequest = "XMLHttpRequest"; var _isTrident = null; var _navUserAgentCheck = null; var _enableMocks = false; var _useXDomainRequest = null; var _beaconsSupported = null; function _hasProperty(theClass, property) { var supported = false; if (theClass) { try { supported = property in theClass; if (!supported) { var proto = theClass[strShimPrototype]; if (proto) { supported = property in proto; } } } catch (e) { } if (!supported) { try { var tmp = new theClass(); supported = !isUndefined(tmp[property]); } catch (e) { } } } return supported; } function getGlobalInst(name) { var gbl = getGlobal(); if (gbl && gbl[name]) { return gbl[name]; } if (name === strWindow && hasWindow()) { return window; } return null; } function hasWindow() { return Boolean(typeof window === strShimObject && window); } function getWindow() { if (hasWindow()) { return window; } return getGlobalInst(strWindow); } function hasDocument() { return Boolean(typeof document === strShimObject && document); } function getDocument() { if (hasDocument()) { return document; } return getGlobalInst(strDocument); } function hasNavigator() { return Boolean(typeof navigator === strShimObject && navigator); } function getNavigator() { if (hasNavigator()) { return navigator; } return getGlobalInst(strNavigator); } function getLocation(checkForMock) { if (checkForMock && _enableMocks) { var mockLocation = getGlobalInst("__mockLocation"); if (mockLocation) { return mockLocation; } } if (typeof location === strShimObject && location) { return location; } return getGlobalInst(strLocation); } function getConsole() { if (typeof console !== strShimUndefined) { return console; } return getGlobalInst(strConsole); } function getPerformance() { return getGlobalInst(strPerformance); } function hasJSON() { return Boolean((typeof JSON === strShimObject && JSON) || getGlobalInst(strJSON) !== null); } function getJSON() { if (hasJSON()) { return JSON || getGlobalInst(strJSON); } return null; } function getCrypto() { return getGlobalInst(strCrypto); } function getMsCrypto() { return getGlobalInst(strMsCrypto); } function isReactNative() { var nav = getNavigator(); if (nav && nav.product) { return nav.product === strReactNative; } return false; } function isIE() { var nav = getNavigator(); if (nav && (nav[_DYN_USER_AGENT ] !== _navUserAgentCheck || _isTrident === null)) { _navUserAgentCheck = nav[_DYN_USER_AGENT ]; var userAgent = (_navUserAgentCheck || STR_EMPTY$2)[_DYN_TO_LOWER_CASE ](); _isTrident = (strContains(userAgent, strMsie) || strContains(userAgent, strTrident)); } return _isTrident; } function dumpObj(object) { var objectTypeDump = Object[strShimPrototype].toString[_DYN_CALL ](object); var propertyValueDump = STR_EMPTY$2; if (objectTypeDump === "[object Error]") { propertyValueDump = "{ stack: '" + object.stack + "', message: '" + object.message + "', name: '" + object[_DYN_NAME ] + "'"; } else if (hasJSON()) { propertyValueDump = getJSON().stringify(object); } return objectTypeDump + propertyValueDump; } function isBeaconsSupported() { if (_beaconsSupported === null) { _beaconsSupported = hasNavigator() && Boolean(getNavigator().sendBeacon); } return _beaconsSupported; } function isFetchSupported(withKeepAlive) { var isSupported = false; try { isSupported = !!getGlobalInst("fetch"); var request = getGlobalInst("Request"); if (isSupported && withKeepAlive && request) { isSupported = _hasProperty(request, "keepalive"); } } catch (e) { } return isSupported; } function useXDomainRequest() { if (_useXDomainRequest === null) { _useXDomainRequest = (typeof XDomainRequest !== strShimUndefined); if (_useXDomainRequest && isXhrSupported()) { _useXDomainRequest = _useXDomainRequest && !_hasProperty(getGlobalInst(strXMLHttpRequest), "withCredentials"); } } return _useXDomainRequest; } function isXhrSupported() { var isSupported = false; try { var xmlHttpRequest = getGlobalInst(strXMLHttpRequest); isSupported = !!xmlHttpRequest; } catch (e) { } return isSupported; } var _aiNamespace = null; function _getExtensionNamespace() { var target = getGlobalInst("Microsoft"); if (target) { _aiNamespace = target["ApplicationInsights"]; } return _aiNamespace; } function getDebugExt(config) { var ns = _aiNamespace; if (!ns && config.disableDbgExt !== true) { ns = _aiNamespace || _getExtensionNamespace(); } return ns ? ns["ChromeDbgExt"] : null; } var AiNonUserActionablePrefix = "AI (Internal): "; var AiUserActionablePrefix = "AI: "; var AIInternalMessagePrefix = "AITR_"; function _sanitizeDiagnosticText(text) { if (text) { return "\"" + text[_DYN_REPLACE ](/\"/g, STR_EMPTY$2) + "\""; } return STR_EMPTY$2; } function _logToConsole(func, message) { var theConsole = getConsole(); if (!!theConsole) { var logFunc = "log"; if (theConsole[func]) { logFunc = func; } if (isFunction(theConsole[logFunc])) { theConsole[logFunc](message); } } } var _InternalLogMessage = /** @class */ (function () { function _InternalLogMessage(msgId, msg, isUserAct, properties) { if (isUserAct === void 0) { isUserAct = false; } var _self = this; _self[_DYN_MESSAGE_ID ] = msgId; _self[_DYN_MESSAGE ] = (isUserAct ? AiUserActionablePrefix : AiNonUserActionablePrefix) + msgId; var strProps = STR_EMPTY$2; if (hasJSON()) { strProps = getJSON().stringify(properties); } var diagnosticText = (msg ? " message:" + _sanitizeDiagnosticText(msg) : STR_EMPTY$2) + (properties ? " props:" + _sanitizeDiagnosticText(strProps) : STR_EMPTY$2); _self[_DYN_MESSAGE ] += diagnosticText; } _InternalLogMessage.dataType = "MessageData"; return _InternalLogMessage; }()); function safeGetLogger(core, config) { return (core || {})[_DYN_LOGGER ] || new DiagnosticLogger(config); } var DiagnosticLogger = /** @class */ (function () { function DiagnosticLogger(config) { this.identifier = "DiagnosticLogger"; this.queue = []; var _messageCount = 0; var _messageLogged = {}; var _loggingLevelConsole; var _loggingLevelTelemetry; var _maxInternalMessageLimit; var _enableDebug; dynamicProto(DiagnosticLogger, this, function (_self) { _setDefaultsFromConfig(config || {}); _self.consoleLoggingLevel = function () { return _loggingLevelConsole; }; _self.telemetryLoggingLevel = function () { return _loggingLevelTelemetry; }; _self.maxInternalMessageLimit = function () { return _maxInternalMessageLimit; }; _self[_DYN_ENABLE_DEBUG_EXCEPTI4 ] = function () { return _enableDebug; }; _self.throwInternal = function (severity, msgId, msg, properties, isUserAct) { if (isUserAct === void 0) { isUserAct = false; } var message = new _InternalLogMessage(msgId, msg, isUserAct, properties); if (_enableDebug) { throw dumpObj(message); } else { var logFunc = severity === 1 ? STR_ERROR_TO_CONSOLE : STR_WARN_TO_CONSOLE; if (!isUndefined(message[_DYN_MESSAGE ])) { if (isUserAct) { var messageKey = +message[_DYN_MESSAGE_ID ]; if (!_messageLogged[messageKey] && _loggingLevelConsole >= severity) { _self[logFunc](message[_DYN_MESSAGE ]); _messageLogged[messageKey] = true; } } else { if (_loggingLevelConsole >= severity) { _self[logFunc](message[_DYN_MESSAGE ]); } } _logInternalMessage(severity, message); } else { _debugExtMsg("throw" + (severity === 1 ? "Critical" : "Warning"), message); } } }; _self[STR_WARN_TO_CONSOLE ] = function (message) { _logToConsole("warn", message); _debugExtMsg("warning", message); }; _self[STR_ERROR_TO_CONSOLE ] = function (message) { _logToConsole("error", message); _debugExtMsg("error", message); }; _self.resetInternalMessageCount = function () { _messageCount = 0; _messageLogged = {}; }; _self[_DYN_LOG_INTERNAL_MESSAGE ] = _logInternalMessage; function _logInternalMessage(severity, message) { if (_areInternalMessagesThrottled()) { return; } var logMessage = true; var messageKey = AIInternalMessagePrefix + message[_DYN_MESSAGE_ID ]; if (_messageLogged[messageKey]) { logMessage = false; } else { _messageLogged[messageKey] = true; } if (logMessage) { if (severity <= _loggingLevelTelemetry) { _self.queue[_DYN_PUSH ](message); _messageCount++; _debugExtMsg((severity === 1 ? "error" : "warn"), message); } if (_messageCount === _maxInternalMessageLimit) { var throttleLimitMessage = "Internal events throttle limit per PageView reached for this app."; var throttleMessage = new _InternalLogMessage(23 , throttleLimitMessage, false); _self.queue[_DYN_PUSH ](throttleMessage); if (severity === 1 ) { _self[STR_ERROR_TO_CONSOLE ](throttleLimitMessage); } else { _self[STR_WARN_TO_CONSOLE ](throttleLimitMessage); } } } } function _setDefaultsFromConfig(config) { _loggingLevelConsole = getCfgValue(config.loggingLevelConsole, 0); _loggingLevelTelemetry = getCfgValue(config.loggingLevelTelemetry, 1); _maxInternalMessageLimit = getCfgValue(config.maxMessageLimit, 25); _enableDebug = getCfgValue(config.enableDebug, getCfgValue(config[_DYN_ENABLE_DEBUG_EXCEPTI4 ], false)); } function _areInternalMessagesThrottled() { return _messageCount >= _maxInternalMessageLimit; } function _debugExtMsg(name, data) { var dbgExt = getDebugExt(config || {}); if (dbgExt && dbgExt[_DYN_DIAG_LOG ]) { dbgExt[_DYN_DIAG_LOG ](name, data); } } }); } DiagnosticLogger.__ieDyn=1; return DiagnosticLogger; }()); function _getLogger(logger) { return (logger || new DiagnosticLogger()); } function _throwInternal(logger, severity, msgId, msg, properties, isUserAct) { if (isUserAct === void 0) { isUserAct = false; } _getLogger(logger).throwInternal(severity, msgId, msg, properties, isUserAct); } function _warnToConsole(logger, message) { _getLogger(logger)[STR_WARN_TO_CONSOLE ](message); } var strExecutionContextKey = "ctx"; var strParentContextKey = "ParentContextKey"; var strChildrenContextKey = "ChildrenContextKey"; var PerfEvent = /** @class */ (function () { function PerfEvent(name, payloadDetails, isAsync) { var _self = this; var accessorDefined = false; _self.start = dateNow(); _self[_DYN_NAME ] = name; _self[_DYN_IS_ASYNC ] = isAsync; _self[_DYN_IS_CHILD_EVT ] = function () { return false; }; if (isFunction(payloadDetails)) { var theDetails_1; accessorDefined = objDefineAccessors(_self, "payload", function () { if (!theDetails_1 && isFunction(payloadDetails)) { theDetails_1 = payloadDetails(); payloadDetails = null; } return theDetails_1; }); } _self[_DYN_GET_CTX ] = function (key) { if (key) { if (key === PerfEvent[strParentContextKey] || key === PerfEvent[strChildrenContextKey]) { return _self[key]; } return (_self[strExecutionContextKey] || {})[key]; } return null; }; _self[_DYN_SET_CTX ] = function (key, value) { if (key) { if (key === PerfEvent[strParentContextKey]) { if (!_self[key]) { _self[_DYN_IS_CHILD_EVT ] = function () { return true; }; } _self[key] = value; } else if (key === PerfEvent[strChildrenContextKey]) { _self[key] = value; } else { var ctx = _self[strExecutionContextKey] = _self[strExecutionContextKey] || {}; ctx[key] = value; } } }; _self[_DYN_COMPLETE ] = function () { var childTime = 0; var childEvts = _self[_DYN_GET_CTX ](PerfEvent[strChildrenContextKey]); if (isArray(childEvts)) { for (var lp = 0; lp < childEvts[_DYN_LENGTH ]; lp++) { var childEvt = childEvts[lp]; if (childEvt) { childTime += childEvt[_DYN_TIME ]; } } } _self[_DYN_TIME ] = dateNow() - _self.start; _self.exTime = _self[_DYN_TIME ] - childTime; _self[_DYN_COMPLETE ] = function () { }; if (!accessorDefined && isFunction(payloadDetails)) { _self.payload = payloadDetails(); } }; } PerfEvent.ParentContextKey = "parent"; PerfEvent.ChildrenContextKey = "childEvts"; return PerfEvent; }()); var doPerfActiveKey = "CoreUtils.doPerf"; function doPerf(mgrSource, getSource, func, details, isAsync) { if (mgrSource) { var perfMgr = mgrSource; if (perfMgr[STR_GET_PERF_MGR]) { perfMgr = perfMgr[STR_GET_PERF_MGR](); } if (perfMgr) { var perfEvt = void 0; var currentActive = perfMgr[_DYN_GET_CTX ](doPerfActiveKey); try { perfEvt = perfMgr.create(getSource(), details, isAsync); if (perfEvt) { if (currentActive && perfEvt[_DYN_SET_CTX ]) { perfEvt[_DYN_SET_CTX ](PerfEvent[strParentContextKey], currentActive); if (currentActive[_DYN_GET_CTX ] && currentActive[_DYN_SET_CTX ]) { var children = currentActive[_DYN_GET_CTX ](PerfEvent[strChildrenContextKey]); if (!children) { children = []; currentActive[_DYN_SET_CTX ](PerfEvent[strChildrenContextKey], children); } children[_DYN_PUSH ](perfEvt); } } perfMgr[_DYN_SET_CTX ](doPerfActiveKey, perfEvt); return func(perfEvt); } } catch (ex) { if (perfEvt && perfEvt[_DYN_SET_CTX ]) { perfEvt[_DYN_SET_CTX ]("exception", ex); } } finally { if (perfEvt) { perfMgr.fire(perfEvt); } perfMgr[_DYN_SET_CTX ](doPerfActiveKey, currentActive); } } } return func(); } var UInt32Mask = 0x100000000; var MaxUInt32 = 0xffffffff; var _mwcSeeded = false; var _mwcW = 123456789; var _mwcZ = 987654321; function _mwcSeed(seedValue) { if (seedValue < 0) { seedValue >>>= 0; } _mwcW = (123456789 + seedValue) & MaxUInt32; _mwcZ = (987654321 - seedValue) & MaxUInt32; _mwcSeeded = true; } function _autoSeedMwc() { try { var now = dateNow() & 0x7fffffff; _mwcSeed(((Math.random() * UInt32Mask) ^ now) + now); } catch (e) { } } function random32(signed) { var value = 0; var c = getCrypto() || getMsCrypto(); if (c && c.getRandomValues) { value = c.getRandomValues(new Uint32Array(1))[0] & MaxUInt32; } if (value === 0 && isIE()) { if (!_mwcSeeded) { _autoSeedMwc(); } value = mwcRandom32() & MaxUInt32; } if (value === 0) { value = Math.floor((UInt32Mask * Math.random()) | 0); } if (!signed) { value >>>= 0; } return value; } function mwcRandom32(signed) { _mwcZ = (36969 * (_mwcZ & 0xFFFF) + (_mwcZ >> 16)) & MaxUInt32; _mwcW = (18000 * (_mwcW & 0xFFFF) + (_mwcW >> 16)) & MaxUInt32; var value = (((_mwcZ << 16) + (_mwcW & 0xFFFF)) >>> 0) & MaxUInt32 | 0; if (!signed) { value >>>= 0; } return value; } function newId(maxLength) { if (maxLength === void 0) { maxLength = 22; } var base64chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var number = random32() >>> 0; var chars = 0; var result = STR_EMPTY$2; while (result[_DYN_LENGTH ] < maxLength) { chars++; result += base64chars.charAt(number & 0x3F); number >>>= 6; if (chars === 5) { number = (((random32() << 2) & 0xFFFFFFFF) | (number & 0x03)) >>> 0; chars = 0; } } return result; } var _objDefineProperty = ObjDefineProperty; var version = '2.8.15'; var instanceName = "." + newId(6); var _dataUid = 0; function _createAccessor(target, prop, value) { if (_objDefineProperty) { try { _objDefineProperty(target, prop, { value: value, enumerable: false, configurable: true }); return true; } catch (e) { } } return false; } function _canAcceptData(target) { return target[_DYN_NODE_TYPE ] === 1 || target[_DYN_NODE_TYPE ] === 9 || !(+target[_DYN_NODE_TYPE ]); } function _getCache(data, target) { var theCache = target[data.id]; if (!theCache) { theCache = {}; try { if (_canAcceptData(target)) { if (!_createAccessor(target, data.id, theCache)) { target[data.id] = theCache; } } } catch (e) { } } return theCache; } function createUniqueNamespace(name, includeVersion) { if (includeVersion === void 0) { includeVersion = false; } return normalizeJsName(name + (_dataUid++) + (includeVersion ? "." + version : STR_EMPTY$2) + instanceName); } function createElmNodeData(name) { var data = { id: createUniqueNamespace("_aiData-" + (name || STR_EMPTY$2) + "." + version), accept: function (target) { return _canAcceptData(target); }, get: function (target, name, defValue, addDefault) { var theCache = target[data.id]; if (!theCache) { if (addDefault) { theCache = _getCache(data, target); theCache[normalizeJsName(name)] = defValue; } return defValue; } return theCache[normalizeJsName(name)]; }, kill: function (target, name) { if (target && target[name]) { try { delete target[name]; } catch (e) { } } } }; return data; } var strOnPrefix = "on"; var strAttachEvent = "attachEvent"; var strAddEventHelper = "addEventListener"; var strDetachEvent = "detachEvent"; var strRemoveEventListener = "removeEventListener"; var strEvents = "events"; var strVisibilityChangeEvt = "visibilitychange"; var strPageHide = "pagehide"; var strPageShow = "pageshow"; var strUnload = "unload"; var strBeforeUnload = "beforeunload"; var strPageHideNamespace = createUniqueNamespace("aiEvtPageHide"); var strPageShowNamespace = createUniqueNamespace("aiEvtPageShow"); var rRemoveEmptyNs = /\.[\.]+/g; var rRemoveTrailingEmptyNs = /[\.]+$/; var _guid = 1; var elmNodeData = createElmNodeData("events"); var eventNamespace = /^([^.]*)(?:\.(.+)|)/; function _normalizeNamespace(name) { if (name && name[_DYN_REPLACE ]) { return name[_DYN_REPLACE ](/^[\s\.]+|(?=[\s\.])[\.\s]+$/g, STR_EMPTY$2); } return name; } function _getEvtNamespace(eventName, evtNamespace) { var _a; if (evtNamespace) { var theNamespace_1 = STR_EMPTY$2; if (isArray(evtNamespace)) { theNamespace_1 = STR_EMPTY$2; arrForEach(evtNamespace, function (name) { name = _normalizeNamespace(name); if (name) { if (name[0] !== ".") { name = "." + name; } theNamespace_1 += name; } }); } else { theNamespace_1 = _normalizeNamespace(evtNamespace); } if (theNamespace_1) { if (theNamespace_1[0] !== ".") { theNamespace_1 = "." + theNamespace_1; } eventName = (eventName || STR_EMPTY$2) + theNamespace_1; } } var parsedEvent = (eventNamespace.exec(eventName || STR_EMPTY$2) || []); return _a = {}, _a[_DYN_TYPE ] = parsedEvent[1], _a.ns = ((parsedEvent[2] || STR_EMPTY$2).replace(rRemoveEmptyNs, ".").replace(rRemoveTrailingEmptyNs, STR_EMPTY$2)[_DYN_SPLIT ](".").sort()).join("."), _a; } function _getRegisteredEvents(target, evtName, addDefault) { if (addDefault === void 0) { addDefault = true; } var aiEvts = elmNodeData.get(target, strEvents, {}, addDefault); var registeredEvents = aiEvts[evtName]; if (!registeredEvents) { registeredEvents = aiEvts[evtName] = []; } return registeredEvents; } function _doDetach(obj, evtName, handlerRef, useCapture) { if (obj && evtName && evtName[_DYN_TYPE ]) { if (obj[strRemoveEventListener]) { obj[strRemoveEventListener](evtName[_DYN_TYPE ], handlerRef, useCapture); } else if (obj[strDetachEvent]) { obj[strDetachEvent](strOnPrefix + evtName[_DYN_TYPE ], handlerRef); } } } function _doAttach(obj, evtName, handlerRef, useCapture) { var result = false; if (obj && evtName && evtName[_DYN_TYPE ] && handlerRef) { if (obj[strAddEventHelper]) { obj[strAddEventHelper](evtName[_DYN_TYPE ], handlerRef, useCapture); result = true; } else if (obj[strAttachEvent]) { obj[strAttachEvent](strOnPrefix + evtName[_DYN_TYPE ], handlerRef); result = true; } } return result; } function _doUnregister(target, events, evtName, unRegFn) { var idx = events[_DYN_LENGTH ]; while (idx--) { var theEvent = events[idx]; if (theEvent) { if (!evtName.ns || evtName.ns === theEvent.evtName.ns) { if (!unRegFn || unRegFn(theEvent)) { _doDetach(target, theEvent.evtName, theEvent[_DYN_HANDLER ], theEvent.capture); events[_DYN_SPLICE ](idx, 1); } } } } } function _unregisterEvents(target, evtName, unRegFn) { if (evtName[_DYN_TYPE ]) { _doUnregister(target, _getRegisteredEvents(target, evtName[_DYN_TYPE ]), evtName, unRegFn); } else { var eventCache = elmNodeData.get(target, strEvents, {}); objForEachKey(eventCache, function (evtType, events) { _doUnregister(target, events, evtName, unRegFn); }); if (objKeys(eventCache)[_DYN_LENGTH ] === 0) { elmNodeData.kill(target, strEvents); } } } function mergeEvtNamespace(theNamespace, namespaces) { var newNamespaces; if (namespaces) { if (isArray(namespaces)) { newNamespaces = [theNamespace].concat(namespaces); } else { newNamespaces = [theNamespace, namespaces]; } newNamespaces = (_getEvtNamespace("xx", newNamespaces).ns)[_DYN_SPLIT ]("."); } else { newNamespaces = theNamespace; } return newNamespaces; } function eventOn(target, eventName, handlerRef, evtNamespace, useCapture) { var _a; if (useCapture === void 0) { useCapture = false; } var result = false; if (target) { try { var evtName = _getEvtNamespace(eventName, evtNamespace); result = _doAttach(target, evtName, handlerRef, useCapture); if (result && elmNodeData.accept(target)) { var registeredEvent = (_a = { guid: _guid++, evtName: evtName }, _a[_DYN_HANDLER ] = handlerRef, _a.capture = useCapture, _a); _getRegisteredEvents(target, evtName.type)[_DYN_PUSH ](registeredEvent); } } catch (e) { } } return result; } function eventOff(target, eventName, handlerRef, evtNamespace, useCapture) { if (useCapture === void 0) { useCapture = false; } if (target) { try { var evtName_1 = _getEvtNamespace(eventName, evtNamespace); var found_1 = false; _unregisterEvents(target, evtName_1, function (regEvent) { if ((evtName_1.ns && !handlerRef) || regEvent[_DYN_HANDLER ] === handlerRef) { found_1 = true; return true; } return false; }); if (!found_1) { _doDetach(target, evtName_1, handlerRef, useCapture); } } catch (e) { } } } function addEventHandler(eventName, callback, evtNamespace) { var result = false; var w = getWindow(); if (w) { result = eventOn(w, eventName, callback, evtNamespace); result = eventOn(w["body"], eventName, callback, evtNamespace) || result; } var doc = getDocument(); if (doc) { result = eventOn(doc, eventName, callback, evtNamespace) || result; } return result; } function removeEventHandler(eventName, callback, evtNamespace) { var w = getWindow(); if (w) { eventOff(w, eventName, callback, evtNamespace); eventOff(w["body"], eventName, callback, evtNamespace); } var doc = getDocument(); if (doc) { eventOff(doc, eventName, callback, evtNamespace); } } function _addEventListeners(events, listener, excludeEvents, evtNamespace) { var added = false; if (listener && events && events[_DYN_LENGTH ] > 0) { arrForEach(events, function (name) { if (name) { if (!excludeEvents || arrIndexOf(excludeEvents, name) === -1) { added = addEventHandler(name, listener, evtNamespace) || added; } } }); } return added; } function addEventListeners(events, listener, excludeEvents, evtNamespace) { var added = false; if (listener && events && isArray(events)) { added = _addEventListeners(events, listener, excludeEvents, evtNamespace); if (!added && excludeEvents && excludeEvents[_DYN_LENGTH ] > 0) { added = _addEventListeners(events, listener, null, evtNamespace); } } return added; } function removeEventListeners(events, listener, evtNamespace) { if (events && isArray(events)) { arrForEach(events, function (name) { if (name) { removeEventHandler(name, listener, evtNamespace); } }); } } function addPageUnloadEventListener(listener, excludeEvents, evtNamespace) { return addEventListeners([strBeforeUnload, strUnload, strPageHide], listener, excludeEvents, evtNamespace); } function removePageUnloadEventListener(listener, evtNamespace) { removeEventListeners([strBeforeUnload, strUnload, strPageHide], listener, evtNamespace); } function addPageHideEventListener(listener, excludeEvents, evtNamespace) { function _handlePageVisibility(evt) { var doc = getDocument(); if (listener && doc && doc.visibilityState === "hidden") { listener(evt); } } var newNamespaces = mergeEvtNamespace(strPageHideNamespace, evtNamespace); var pageUnloadAdded = _addEventListeners([strPageHide], listener, excludeEvents, newNamespaces); if (!excludeEvents || arrIndexOf(excludeEvents, strVisibilityChangeEvt) === -1) { pageUnloadAdded = _addEventListeners([strVisibilityChangeEvt], _handlePageVisibility, excludeEvents, newNamespaces) || pageUnloadAdded; } if (!pageUnloadAdded && excludeEvents) { pageUnloadAdded = addPageHideEventListener(listener, null, evtNamespace); } return pageUnloadAdded; } function removePageHideEventListener(listener, evtNamespace) { var newNamespaces = mergeEvtNamespace(strPageHideNamespace, evtNamespace); removeEventListeners([strPageHide], listener, newNamespaces); removeEventListeners([strVisibilityChangeEvt], null, newNamespaces); } function addPageShowEventListener(listener, excludeEvents, evtNamespace) { function _handlePageVisibility(evt) { var doc = getDocument(); if (listener && doc && doc.visibilityState === "visible") { listener(evt); } } var newNamespaces = mergeEvtNamespace(strPageShowNamespace, evtNamespace); var pageShowAdded = _addEventListeners([strPageShow], listener, excludeEvents, newNamespaces); pageShowAdded = _addEventListeners([strVisibilityChangeEvt], _handlePageVisibility, excludeEvents, newNamespaces) || pageShowAdded; if (!pageShowAdded && excludeEvents) { pageShowAdded = addPageShowEventListener(listener, null, evtNamespace); } return pageShowAdded; } function removePageShowEventListener(listener, evtNamespace) { var newNamespaces = mergeEvtNamespace(strPageShowNamespace, evtNamespace); removeEventListeners([strPageShow], listener, newNamespaces); removeEventListeners([strVisibilityChangeEvt], null, newNamespaces); } function perfNow() { var perf = getPerformance(); if (perf && perf.now) { return perf.now(); } return dateNow(); } var pluginStateData = createElmNodeData("plugin"); function _getPluginState(plugin) { return pluginStateData.get(plugin, "state", {}, true); } var strTelemetryPluginChain = "TelemetryPluginChain"; var strHasRunFlags = "_hasRun"; var strGetTelCtx = "_getTelCtx"; var _chainId = 0; function _getNextProxyStart(proxy, core, startAt) { while (proxy) { if (proxy[_DYN_GET_PLUGIN ]() === startAt) { return proxy; } proxy = proxy[_DYN_GET_NEXT ](); } return createTelemetryProxyChain([startAt], core[_DYN_CONFIG ] || {}, core); } function _createInternalContext(telemetryChain, config, core, startAt) { var _nextProxy = null; var _onComplete = []; if (startAt !== null) { _nextProxy = startAt ? _getNextProxyStart(telemetryChain, core, startAt) : telemetryChain; } var context = { _next: _moveNext, ctx: { core: function () { return core; }, diagLog: function () { return safeGetLogger(core, config); }, getCfg: function () { return config; }, getExtCfg: _getExtCfg, getConfig: _getConfig, hasNext: function () { return !!_nextProxy; }, getNext: function () { return _nextProxy; }, setNext: function (nextPlugin) { _nextProxy = nextPlugin; }, iterate: _iterateChain, onComplete: _addOnComplete } }; function _addOnComplete(onComplete, that) { var args = []; for (var _i = 2; _i < arguments.length; _i++) { args[_i - 2] = arguments[_i]; } if (onComplete) { _onComplete[_DYN_PUSH ]({ func: onComplete, self: !isUndefined(that) ? that : context.ctx, args: args }); } } function _moveNext() { var nextProxy = _nextProxy; _nextProxy = nextProxy ? nextProxy[_DYN_GET_NEXT ]() : null; if (!nextProxy) { var onComplete = _onComplete; if (onComplete && onComplete[_DYN_LENGTH ] > 0) { arrForEach(onComplete, function (completeDetails) { try { completeDetails.func[_DYN_CALL ](completeDetails.self, completeDetails.args); } catch (e) { _throwInternal(core[_DYN_LOGGER ], 2 , 73 , "Unexpected Exception during onComplete - " + dumpObj(e)); } }); _onComplete = []; } } return nextProxy; } function _getExtCfg(identifier, defaultValue, mergeDefault) { if (defaultValue === void 0) { defaultValue = {}; } if (mergeDefault === void 0) { mergeDefault = 0 ; } var theConfig; if (config) { var extConfig = config[STR_EXTENSION_CONFIG ]; if (extConfig && identifier) { theConfig = extConfig[identifier]; } } if (!theConfig) { theConfig = defaultValue; } else if (isObject(defaultValue)) { if (mergeDefault !== 0 ) { var newConfig_1 = objExtend(true, defaultValue, theConfig); if (config && mergeDefault === 2 ) { objForEachKey(defaultValue, function (field) { if (isNullOrUndefined(newConfig_1[field])) { var cfgValue = config[field]; if (!isNullOrUndefined(cfgValue)) { newConfig_1[field] = cfgValue; } } }); } theConfig = newConfig_1; } } return theConfig; } function _getConfig(identifier, field, defaultValue) { if (defaultValue === void 0) { defaultValue = false; } var theValue; var extConfig = _getExtCfg(identifier, null); if (extConfig && !isNullOrUndefined(extConfig[field])) { theValue = extConfig[field]; } else if (config && !isNullOrUndefined(config[field])) { theValue = config[field]; } return !isNullOrUndefined(theValue) ? theValue : defaultValue; } function _iterateChain(cb) { var nextPlugin; while (!!(nextPlugin = context._next())) { var plugin = nextPlugin[_DYN_GET_PLUGIN ](); if (plugin) { cb(plugin); } } } return context; } function createProcessTelemetryContext(telemetryChain, config, core, startAt) { var internalContext = _createInternalContext(telemetryChain, config, core, startAt); var context = internalContext.ctx; function _processNext(env) { var nextPlugin = internalContext._next(); nextPlugin && nextPlugin[STR_PROCESS_TELEMETRY ](env, context); return !nextPlugin; } function _createNew(plugins, startAt) { if (plugins === void 0) { plugins = null; } if (isArray(plugins)) { plugins = createTelemetryProxyChain(plugins, config, core, startAt); } return createProcessTelemetryContext(plugins || context[_DYN_GET_NEXT ](), config, core, startAt); } context[_DYN_PROCESS_NEXT ] = _processNext; context[_DYN_CREATE_NEW ] = _createNew; return context; } function createProcessTelemetryUnloadContext(telemetryChain, core, startAt) { var config = core[_DYN_CONFIG ] || {}; var internalContext = _createInternalContext(telemetryChain, config, core, startAt); var context = internalContext.ctx; function _processNext(unloadState) { var nextPlugin = internalContext._next(); nextPlugin && nextPlugin.unload(context, unloadState); return !nextPlugin; } function _createNew(plugins, startAt) { if (plugins === void 0) { plugins = null; } if (isArray(plugins)) { plugins = createTelemetryProxyChain(plugins, config, core, startAt); } return createProcessTelemetryUnloadContext(plugins || context[_DYN_GET_NEXT ](), core, startAt); } context[_DYN_PROCESS_NEXT ] = _processNext; context[_DYN_CREATE_NEW ] = _createNew; return context; } function createProcessTelemetryUpdateContext(telemetryChain, core, startAt) { var config = core[_DYN_CONFIG ] || {}; var internalContext = _createInternalContext(telemetryChain, config, core, startAt); var context = internalContext.ctx; function _processNext(updateState) { return context.iterate(function (plugin) { if (isFunction(plugin[_DYN_UPDATE ])) { plugin[_DYN_UPDATE ](context, updateState); } }); } function _createNew(plugins, startAt) { if (plugins === void 0) { plugins = null; } if (isArray(plugins)) { plugins = createTelemetryProxyChain(plugins, config, core, startAt); } return createProcessTelemetryUpdateContext(plugins || context[_DYN_GET_NEXT ](), core, startAt); } context[_DYN_PROCESS_NEXT ] = _processNext; context[_DYN_CREATE_NEW ] = _createNew; return context; } function createTelemetryProxyChain(plugins, config, core, startAt) { var firstProxy = null; var add = startAt ? false : true; if (isArray(plugins) && plugins[_DYN_LENGTH ] > 0) { var lastProxy_1 = null; arrForEach(plugins, function (thePlugin) { if (!add && startAt === thePlugin) { add = true; } if (add && thePlugin && isFunction(thePlugin[STR_PROCESS_TELEMETRY ])) { var newProxy = createTelemetryPluginProxy(thePlugin, config, core); if (!firstProxy) { firstProxy = newProxy; } if (lastProxy_1) { lastProxy_1._setNext(newProxy); } lastProxy_1 = newProxy; } }); } if (startAt && !firstProxy) { return createTelemetryProxyChain([startAt], config, core); } return firstProxy; } function createTelemetryPluginProxy(plugin, config, core) { var nextProxy = null; var hasProcessTelemetry = isFunction(plugin[STR_PROCESS_TELEMETRY ]); var hasSetNext = isFunction(plugin[_DYN_SET_NEXT_PLUGIN ]); var chainId; if (plugin) { chainId = plugin[_DYN_IDENTIFIER ] + "-" + plugin[STR_PRIORITY ] + "-" + _chainId++; } else { chainId = "Unknown-0-" + _chainId++; } var proxyChain = { getPlugin: function () { return plugin; }, getNext: function () { return nextProxy; }, processTelemetry: _processTelemetry, unload: _unloadPlugin, update: _updatePlugin, _id: chainId, _setNext: function (nextPlugin) { nextProxy = nextPlugin; } }; function _getTelCtx() { var itemCtx; if (plugin && isFunction(plugin[strGetTelCtx])) { itemCtx = plugin[strGetTelCtx](); } if (!itemCtx) { itemCtx = createProcessTelemetryContext(proxyChain, config, core); } return itemCtx; } function _processChain(itemCtx, processPluginFn, name, details, isAsync) { var hasRun = false; var identifier = plugin ? plugin[_DYN_IDENTIFIER ] : strTelemetryPluginChain; var hasRunContext = itemCtx[strHasRunFlags]; if (!hasRunContext) { hasRunContext = itemCtx[strHasRunFlags] = {}; } itemCtx.setNext(nextProxy); if (plugin) { doPerf(itemCtx[STR_CORE ](), function () { return identifier + ":" + name; }, function () { hasRunContext[chainId] = true; try { var nextId = nextProxy ? nextProxy._id : STR_EMPTY$2; if (nextId) { hasRunContext[nextId] = false; } hasRun = processPluginFn(itemCtx); } catch (error) { var hasNextRun = nextProxy ? hasRunContext[nextProxy._id] : true; if (hasNextRun) { hasRun = true; } if (!nextProxy || !hasNextRun) { _throwInternal(itemCtx[_DYN_DIAG_LOG ](), 1 , 73 , "Plugin [" + identifier + "] failed during " + name + " - " + dumpObj(error) + ", run flags: " + dumpObj(hasRunContext)); } } }, details, isAsync); } return hasRun; } function _processTelemetry(env, itemCtx) { itemCtx = itemCtx || _getTelCtx(); function _callProcessTelemetry(itemCtx) { if (!plugin || !hasProcessTelemetry) { return false; } var pluginState = _getPluginState(plugin); if (pluginState[_DYN_TEARDOWN ] || pluginState[STR_DISABLED]) { return false; } if (hasSetNext) { plugin[_DYN_SET_NEXT_PLUGIN ](nextProxy); } plugin[STR_PROCESS_TELEMETRY ](env, itemCtx); return true; } if (!_processChain(itemCtx, _callProcessTelemetry, "processTelemetry", function () { return ({ item: env }); }, !(env.sync))) { itemCtx[_DYN_PROCESS_NEXT ](env); } } function _unloadPlugin(unloadCtx, unloadState) { function _callTeardown() { var hasRun = false; if (plugin) { var pluginState = _getPluginState(plugin); var pluginCore = plugin[STR_CORE] || pluginState[STR_CORE ]; if (plugin && (!pluginCore || pluginCore === unloadCtx.core()) && !pluginState[_DYN_TEARDOWN ]) { pluginState[STR_CORE ] = null; pluginState[_DYN_TEARDOWN ] = true; pluginState[_DYN_IS_INITIALIZED ] = false; if (plugin[_DYN_TEARDOWN ] && plugin[_DYN_TEARDOWN ](unloadCtx, unloadState) === true) { hasRun = true; } } } return hasRun; } if (!_processChain(unloadCtx, _callTeardown, "unload", function () { }, unloadState[_DYN_IS_ASYNC ])) { unloadCtx[_DYN_PROCESS_NEXT ](unloadState); } } function _updatePlugin(updateCtx, updateState) { function _callUpdate() { var hasRun = false; if (plugin) { var pluginState = _getPluginState(plugin); var pluginCore = plugin[STR_CORE] || pluginState[STR_CORE ]; if (plugin && (!pluginCore || pluginCore === updateCtx.core()) && !pluginState[_DYN_TEARDOWN ]) { if (plugin[_DYN_UPDATE ] && plugin[_DYN_UPDATE ](updateCtx, updateState) === true) { hasRun = true; } } } return hasRun; } if (!_processChain(updateCtx, _callUpdate, "update", function () { }, false)) { updateCtx[_DYN_PROCESS_NEXT ](updateState); } } return objFreeze(proxyChain); } function createUnloadHandlerContainer() { var handlers = []; function _addHandler(handler) { if (handler) { handlers[_DYN_PUSH ](handler); } } function _runHandlers(unloadCtx, unloadState) { arrForEach(handlers, function (handler) { try { handler(unloadCtx, unloadState); } catch (e) { _throwInternal(unloadCtx[_DYN_DIAG_LOG ](), 2 , 73 , "Unexpected error calling unload handler - " + dumpObj(e)); } }); handlers = []; } return { add: _addHandler, run: _runHandlers }; } var strGetPlugin = "getPlugin"; var BaseTelemetryPlugin = /** @class */ (function () { function BaseTelemetryPlugin() { var _self = this; var _isinitialized; var _rootCtx; var _nextPlugin; var _unloadHandlerContainer; var _hooks; _initDefaults(); dynamicProto(BaseTelemetryPlugin, _self, function (_self) { _self[_DYN_INITIALIZE ] = function (config, core, extensions, pluginChain) { _setDefaults(config, core, pluginChain); _isinitialized = true; }; _self[_DYN_TEARDOWN ] = function (unloadCtx, unloadState) { var _a; var core = _self[STR_CORE ]; if (!core || (unloadCtx && core !== unloadCtx[STR_CORE ]())) { return; } var result; var unloadDone = false; var theUnloadCtx = unloadCtx || createProcessTelemetryUnloadContext(null, core, _nextPlugin && _nextPlugin[strGetPlugin] ? _nextPlugin[strGetPlugin]() : _nextPlugin); var theUnloadState = unloadState || (_a = { reason: 0 }, _a[_DYN_IS_ASYNC ] = false, _a); function _unloadCallback() { if (!unloadDone) { unloadDone = true; _unloadHandlerContainer.run(theUnloadCtx, unloadState); var oldHooks = _hooks; _hooks = []; arrForEach(oldHooks, function (fn) { fn.rm(); }); if (result === true) { theUnloadCtx[_DYN_PROCESS_NEXT ](theUnloadState); } _initDefaults(); } } if (!_self[_DYN__DO_TEARDOWN ] || _self[_DYN__DO_TEARDOWN ](theUnloadCtx, theUnloadState, _unloadCallback) !== true) { _unloadCallback(); } else { result = true; } return result; }; _self[_DYN_UPDATE ] = function (updateCtx, updateState) { var core = _self[STR_CORE ]; if (!core || (updateCtx && core !== updateCtx[STR_CORE ]())) { return; } var result; var updateDone = false; var theUpdateCtx = updateCtx || createProcessTelemetryUpdateContext(null, core, _nextPlugin && _nextPlugin[strGetPlugin] ? _nextPlugin[strGetPlugin]() : _nextPlugin); var theUpdateState = updateState || { reason: 0 }; function _updateCallback() { if (!updateDone) { updateDone = true; _setDefaults(theUpdateCtx.getCfg(), theUpdateCtx.core(), theUpdateCtx[_DYN_GET_NEXT ]()); } } if (!_self._doUpdate || _self._doUpdate(theUpdateCtx, theUpdateState, _updateCallback) !== true) { _updateCallback(); } else { result = true; } return result; }; _self._addHook = function (hooks) { if (hooks) { if (isArray(hooks)) { _hooks = _hooks.concat(hooks); } else { _hooks[_DYN_PUSH ](hooks); } } }; proxyFunctionAs(_self, "_addUnloadCb", function () { return _unloadHandlerContainer; }, "add"); }); _self[_DYN_DIAG_LOG ] = function (itemCtx) { return _getTelCtx(itemCtx)[_DYN_DIAG_LOG ](); }; _self[_DYN_IS_INITIALIZED ] = function () { return _isinitialized; }; _self.setInitialized = function (isInitialized) { _isinitialized = isInitialized; }; _self[_DYN_SET_NEXT_PLUGIN ] = function (next) { _nextPlugin = next; }; _self[_DYN_PROCESS_NEXT ] = function (env, itemCtx) { if (itemCtx) { itemCtx[_DYN_PROCESS_NEXT ](env); } else if (_nextPlugin && isFunction(_nextPlugin[STR_PROCESS_TELEMETRY ])) { _nextPlugin[STR_PROCESS_TELEMETRY ](env, null); } }; _self._getTelCtx = _getTelCtx; function _getTelCtx(currentCtx) { if (currentCtx === void 0) { currentCtx = null; } var itemCtx = currentCtx; if (!itemCtx) { var rootCtx = _rootCtx || createProcessTelemetryContext(null, {}, _self[STR_CORE ]); if (_nextPlugin && _nextPlugin[strGetPlugin]) { itemCtx = rootCtx[_DYN_CREATE_NEW ](null, _nextPlugin[strGetPlugin]); } else { itemCtx = rootCtx[_DYN_CREATE_NEW ](null, _nextPlugin); } } return itemCtx; } function _setDefaults(config, core, pluginChain) { if (config) { setValue(config, STR_EXTENSION_CONFIG, [], null, isNullOrUndefined); } if (!pluginChain && core) { pluginChain = core[_DYN_GET_PROCESS_TEL_CONT0 ]()[_DYN_GET_NEXT ](); } var nextPlugin = _nextPlugin; if (_nextPlugin && _nextPlugin[strGetPlugin]) { nextPlugin = _nextPlugin[strGetPlugin](); } _self[STR_CORE ] = core; _rootCtx = createProcessTelemetryContext(pluginChain, config, core, nextPlugin); } function _initDefaults() { _isinitialized = false; _self[STR_CORE ] = null; _rootCtx = null; _nextPlugin = null; _hooks = []; _unloadHandlerContainer = createUnloadHandlerContainer(); } } BaseTelemetryPlugin.__ieDyn=1; return BaseTelemetryPlugin; }()); var STR_EMPTY$1 = ""; var _a$1; var Version = '3.2.13'; var FullVersionString = "1DS-Web-JS-" + Version; var strDisabledPropertyName = "Microsoft_ApplicationInsights_BypassAjaxInstrumentation"; var strWithCredentials = "withCredentials"; var strTimeout = "timeout"; var _fieldTypeEventPropMap = (_a$1 = {}, _a$1[0 ] = 0 , _a$1[2 ] = 6 , _a$1[1 ] = 1 , _a$1[3 ] = 7 , _a$1[4096 | 2 ] = 6 , _a$1[4096 | 1 ] = 1 , _a$1[4096 | 3 ] = 7 , _a$1); Boolean(getDocument()); Boolean(getWindow()); function isValueAssigned(value) { return !(value === STR_EMPTY$1 || isNullOrUndefined(value)); } function getTenantId(apiKey) { if (apiKey) { var indexTenantId = apiKey.indexOf("-"); if (indexTenantId > -1) { return apiKey.substring(0, indexTenantId); } } return STR_EMPTY$1; } function sanitizeProperty(name, property, stringifyObjects) { if ((!property && !isValueAssigned(property)) || typeof name !== "string") { return null; } var propType = typeof property; if (propType === "string" || propType === "number" || propType === "boolean" || isArray(property)) { property = { value: property }; } else if (propType === "object" && !ObjHasOwnProperty.call(property, "value")) { property = { value: stringifyObjects ? JSON.stringify(property) : property }; } else if (isNullOrUndefined(property.value) || property.value === STR_EMPTY$1 || (!isString(property.value) && !isNumber(property.value) && !isBoolean(property.value) && !isArray(property.value))) { return null; } if (isArray(property.value) && !isArrayValid(property.value)) { return null; } if (!isNullOrUndefined(property.kind)) { if (isArray(property.value) || !isValueKind(property.kind)) { return null; } property.value = property.value.toString(); } return property; } function getCommonSchemaMetaData(value, kind, type) { var encodedTypeValue = -1; if (!isUndefined(value)) { if (kind > 0) { if (kind === 32) { encodedTypeValue = (1 << 13); } else if (kind <= 13) { encodedTypeValue = (kind << 5); } } if (isDataType(type)) { if (encodedTypeValue === -1) { encodedTypeValue = 0; } encodedTypeValue |= type; } else { var propType = _fieldTypeEventPropMap[getFieldValueType(value)] || -1; if (encodedTypeValue !== -1 && propType !== -1) { encodedTypeValue |= propType; } else if (propType === 6 ) { encodedTypeValue = propType; } } } return encodedTypeValue; } function extend(obj, obj2, obj3, obj4, obj5) { var extended = {}; var deep = false; var i = 0; var length = arguments.length; var objProto = Object[strShimPrototype]; var theArgs = arguments; if (objProto.toString.call(theArgs[0]) === "[object Boolean]") { deep = theArgs[0]; i++; } for (; i < length; i++) { var obj = theArgs[i]; objForEachKey(obj, function (prop, value) { if (deep && value && isObject(value)) { if (isArray(value)) { extended[prop] = extended[prop] || []; arrForEach(value, function (arrayValue, arrayIndex) { if (arrayValue && isObject(arrayValue)) { extended[prop][arrayIndex] = extend(true, extended[prop][arrayIndex], arrayValue); } else { extended[prop][arrayIndex] = arrayValue; } }); } else { extended[prop] = extend(true, extended[prop], value); } } else { extended[prop] = value; } }); } return extended; } var getTime = perfNow; function isValueKind(value) { if (value === 0 || ((value > 0 && value <= 13 ) || value === 32 )) { return true; } return false; } function isDataType(value) { if (value >= 0 && value <= 9) { return true; } return false; } function isArrayValid(value) { return value.length > 0; } function setProcessTelemetryTimings(event, identifier) { var evt = event; evt.timings = evt.timings || {}; evt.timings.processTelemetryStart = evt.timings.processTelemetryStart || {}; evt.timings.processTelemetryStart[identifier] = getTime(); } function getFieldValueType(value) { var theType = 0 ; if (value !== null && value !== undefined) { var objType = typeof value; if (objType === "string") { theType = 1 ; } else if (objType === "number") { theType = 2 ; } else if (objType === "boolean") { theType = 3 ; } else if (objType === strShimObject) { theType = 4 ; if (isArray(value)) { theType = 4096 ; if (value.length > 0) { theType |= getFieldValueType(value[0]); } } else if (ObjHasOwnProperty.call(value, "value")) { theType = 8192 | getFieldValueType(value.value); } } } return theType; } function isChromium() { return !!getGlobalInst("chrome"); } function openXhr(method, urlString, withCredentials, disabled, isSync, timeout) { if (disabled === void 0) { disabled = false; } if (isSync === void 0) { isSync = false; } function _wrapSetXhrProp(xhr, prop, value) { try { xhr[prop] = value; } catch (e) { } } var xhr = new XMLHttpRequest(); if (disabled) { _wrapSetXhrProp(xhr, strDisabledPropertyName, disabled); } if (withCredentials) { _wrapSetXhrProp(xhr, strWithCredentials, withCredentials); } xhr.open(method, urlString, !isSync); if (withCredentials) { _wrapSetXhrProp(xhr, strWithCredentials, withCredentials); } if (!isSync && timeout) { _wrapSetXhrProp(xhr, strTimeout, timeout); } return xhr; } var RT_PROFILE = "REAL_TIME"; var NRT_PROFILE = "NEAR_REAL_TIME"; var BE_PROFILE = "BEST_EFFORT"; var STR_EMPTY = ""; var STR_POST_METHOD = "POST"; var STR_DISABLED_PROPERTY_NAME = "Microsoft_ApplicationInsights_BypassAjaxInstrumentation"; var STR_DROPPED = "drop"; var STR_SENDING = "send"; var STR_REQUEUE = "requeue"; var STR_RESPONSE_FAIL = "rspFail"; var STR_OTHER = "oth"; var DEFAULT_CACHE_CONTROL = "no-cache, no-store"; var DEFAULT_CONTENT_TYPE = "application/x-json-stream"; var STR_CACHE_CONTROL = "cache-control"; var STR_CONTENT_TYPE_HEADER = "content-type"; var STR_KILL_TOKENS_HEADER = "kill-tokens"; var STR_KILL_DURATION_HEADER = "kill-duration"; var STR_KILL_DURATION_SECONDS_HEADER = "kill-duration-seconds"; var STR_TIME_DELTA_HEADER = "time-delta-millis"; var STR_CLIENT_VERSION = "client-version"; var STR_CLIENT_ID = "client-id"; var STR_TIME_DELTA_TO_APPLY = "time-delta-to-apply-millis"; var STR_UPLOAD_TIME = "upload-time"; var STR_API_KEY = "apikey"; var STR_MSA_DEVICE_TICKET = "AuthMsaDeviceTicket"; var STR_AUTH_XTOKEN = "AuthXToken"; var STR_NO_RESPONSE_BODY = "NoResponseBody"; var STR_MSFPC = "msfpc"; var STR_TRACE = "trace"; var STR_USER = "user"; function _getEventMsfpc(theEvent) { var intWeb = ((theEvent.ext || {})["intweb"]); if (intWeb && isValueAssigned(intWeb[STR_MSFPC])) { return intWeb[STR_MSFPC]; } return null; } function _getMsfpc(theEvents) { var msfpc = null; for (var lp = 0; msfpc === null && lp < theEvents.length; lp++) { msfpc = _getEventMsfpc(theEvents[lp]); } return msfpc; } var EventBatch = /** @class */ (function () { function EventBatch(iKey, addEvents) { var events = addEvents ? [].concat(addEvents) : []; var _self = this; var _msfpc = _getMsfpc(events); _self.iKey = function () { return iKey; }; _self.Msfpc = function () { return _msfpc || STR_EMPTY; }; _self.count = function () { return events.length; }; _self.events = function () { return events; }; _self.addEvent = function (theEvent) { if (theEvent) { events.push(theEvent); if (!_msfpc) { _msfpc = _getEventMsfpc(theEvent); } return true; } return false; }; _self.split = function (fromEvent, numEvents) { var theEvents; if (fromEvent < events.length) { var cnt = events.length - fromEvent; if (!isNullOrUndefined(numEvents)) { cnt = numEvents < cnt ? numEvents : cnt; } theEvents = events.splice(fromEvent, cnt); _msfpc = _getMsfpc(events); } return new EventBatch(iKey, theEvents); }; } EventBatch.create = function (iKey, theEvents) { return new EventBatch(iKey, theEvents); }; return EventBatch; }()); var ClockSkewManager = /** @class */ (function () { function ClockSkewManager() { var _allowRequestSending = true; var _shouldAddClockSkewHeaders = true; var _isFirstRequest = true; var _clockSkewHeaderValue = "use-collector-delta"; var _clockSkewSet = false; dynamicProto(ClockSkewManager, this, function (_self) { _self.allowRequestSending = function () { return _allowRequestSending; }; _self.firstRequestSent = function () { if (_isFirstRequest) { _isFirstRequest = false; if (!_clockSkewSet) { _allowRequestSending = false; } } }; _self.shouldAddClockSkewHeaders = function () { return _shouldAddClockSkewHeaders; }; _self.getClockSkewHeaderValue = function () { return _clockSkewHeaderValue; }; _self.setClockSkew = function (timeDeltaInMillis) { if (!_clockSkewSet) { if (timeDeltaInMillis) { _clockSkewHeaderValue = timeDeltaInMillis; _shouldAddClockSkewHeaders = true; _clockSkewSet = true; } else { _shouldAddClockSkewHeaders = false; } _allowRequestSending = true; } }; }); } ClockSkewManager.__ieDyn=1; return ClockSkewManager; }()); var EVTClockSkewManager = ClockSkewManager; var SecToMsMultiplier = 1000; var KillSwitch = /** @class */ (function () { function KillSwitch() { var _killedTokenDictionary = {}; function _normalizeTenants(values) { var result = []; if (values) { arrForEach(values, function (value) { result.push(strTrim(value)); }); } return result; } dynamicProto(KillSwitch, this, function (_self) { _self.setKillSwitchTenants = function (killTokens, killDuration) { if (killTokens && killDuration) { try { var killedTokens = _normalizeTenants(killTokens.split(",")); if (killDuration === "this-request-only") { return killedTokens; } var durationMs = parseInt(killDuration, 10) * SecToMsMultiplier; for (var i = 0; i < killedTokens.length; ++i) { _killedTokenDictionary[killedTokens[i]] = dateNow() + durationMs; } } catch (ex) { return []; } } return []; }; _self.isTenantKilled = function (tenantToken) { var killDictionary = _killedTokenDictionary; var name = strTrim(tenantToken); if (killDictionary[name] !== undefined && killDictionary[name] > dateNow()) { return true; } delete killDictionary[name]; return false; }; }); } KillSwitch.__ieDyn=1; return KillSwitch; }()); var EVTKillSwitch = KillSwitch; var RandomizationLowerThreshold = 0.8; var RandomizationUpperThreshold = 1.2; var BaseBackoff = 3000; var MaxBackoff = 600000; function retryPolicyShouldRetryForStatus(httpStatusCode) { return !((httpStatusCode >= 300 && httpStatusCode < 500 && httpStatusCode != 408 && httpStatusCode != 429) || (httpStatusCode == 501) || (httpStatusCode == 505)); } function retryPolicyGetMillisToBackoffForRetry(retriesSoFar) { var waitDuration = 0; var minBackoff = BaseBackoff * RandomizationLowerThreshold; var maxBackoff = BaseBackoff * RandomizationUpperThreshold; var randomBackoff = Math.floor(Math.random() * (maxBackoff - minBackoff)) + minBackoff; waitDuration = Math.pow(2, retriesSoFar) * randomBackoff; return Math.min(waitDuration, MaxBackoff); } var _MAX_STRING_JOINS = 20; var RequestSizeLimitBytes = 3984588; var BeaconRequestSizeLimitBytes = 65000; var MaxRecordSize = 2000000; var MaxBeaconRecordSize = Math.min(MaxRecordSize, BeaconRequestSizeLimitBytes); var metadata = "metadata"; var f = "f"; var rCheckDot = /\./; var Serializer = /** @class */ (function () { function Serializer(perfManager, valueSanitizer, stringifyObjects, enableCompoundKey) { var strData = "data"; var strBaseData = "baseData"; var strExt = "ext"; var _checkForCompoundkey = !!enableCompoundKey; var _processSubMetaData = true; var _theSanitizer = valueSanitizer; var _isReservedCache = {}; dynamicProto(Serializer, this, function (_self) { _self.createPayload = function (retryCnt, isTeardown, isSync, isReducedPayload, sendReason, sendType) { return { apiKeys: [], payloadBlob: STR_EMPTY, overflow: null, sizeExceed: [], failedEvts: [], batches: [], numEvents: 0, retryCnt: retryCnt, isTeardown: isTeardown, isSync: isSync, isBeacon: isReducedPayload, sendType: sendType, sendReason: sendReason }; }; _self.appendPayload = function (payload, theBatch, maxEventsPerBatch) { var canAddEvents = payload && theBatch && !payload.overflow; if (canAddEvents) { doPerf(perfManager, function () { return "Serializer:appendPayload"; }, function () { var theEvents = theBatch.events(); var payloadBlob = payload.payloadBlob; var payloadEvents = payload.numEvents; var eventsAdded = false; var sizeExceeded = []; var failedEvts = []; var isBeaconPayload = payload.isBeacon; var requestMaxSize = isBeaconPayload ? BeaconRequestSizeLimitBytes : RequestSizeLimitBytes; var recordMaxSize = isBeaconPayload ? MaxBeaconRecordSize : MaxRecordSize; var lp = 0; var joinCount = 0; while (lp < theEvents.length) { var theEvent = theEvents[lp]; if (theEvent) { if (payloadEvents >= maxEventsPerBatch) { payload.overflow = theBatch.split(lp); break; } var eventBlob = _self.getEventBlob(theEvent); if (eventBlob && eventBlob.length <= recordMaxSize) { var blobLength = eventBlob.length; var currentSize = payloadBlob.length; if (currentSize + blobLength > requestMaxSize) { payload.overflow = theBatch.split(lp); break; } if (payloadBlob) { payloadBlob += "\n"; } payloadBlob += eventBlob; joinCount++; if (joinCount > _MAX_STRING_JOINS) { payloadBlob.substr(0, 1); joinCount = 0; } eventsAdded = true; payloadEvents++; } else { if (eventBlob) { sizeExceeded.push(theEvent); } else { failedEvts.push(theEvent); } theEvents.splice(lp, 1); lp--; } } lp++; } if (sizeExceeded && sizeExceeded.length > 0) { payload.sizeExceed.push(EventBatch.create(theBatch.iKey(), sizeExceeded)); } if (failedEvts && failedEvts.length > 0) { payload.failedEvts.push(EventBatch.create(theBatch.iKey(), failedEvts)); } if (eventsAdded) { payload.batches.push(theBatch); payload.payloadBlob = payloadBlob; payload.numEvents = payloadEvents; var apiKey = theBatch.iKey(); if (arrIndexOf(payload.apiKeys, apiKey) === -1) { payload.apiKeys.push(apiKey); } } }, function () { return ({ payload: payload, theBatch: { iKey: theBatch.iKey(), evts: theBatch.events() }, max: maxEventsPerBatch }); }); } return canAddEvents; }; _self.getEventBlob = function (eventData) { try { return doPerf(perfManager, function () { return "Serializer.getEventBlob"; }, function () { var serializedEvent = {}; serializedEvent.name = eventData.name; serializedEvent.time = eventData.time; serializedEvent.ver = eventData.ver; serializedEvent.iKey = "o:" + getTenantId(eventData.iKey); var serializedExt = {}; var eventExt = eventData[strExt]; if (eventExt) { serializedEvent[strExt] = serializedExt; objForEachKey(eventExt, function (key, value) { var data = serializedExt[key] = {}; _processPathKeys(value, data, "ext." + key, true, null, null, true); }); } var serializedData = serializedEvent[strData] = {}; serializedData.baseType = eventData.baseType; var serializedBaseData = serializedData[strBaseData] = {}; _processPathKeys(eventData.baseData, serializedBaseData, strBaseData, false, [strBaseData], function (pathKeys, name, value) { _addJSONPropertyMetaData(serializedExt, pathKeys, name, value); }, _processSubMetaData); _processPathKeys(eventData.data, serializedData, strData, false, [], function (pathKeys, name, value) { _addJSONPropertyMetaData(serializedExt, pathKeys, name, value); }, _processSubMetaData); return JSON.stringify(serializedEvent); }, function () { return ({ item: eventData }); }); } catch (e) { return null; } }; function _isReservedField(path, name) { var result = _isReservedCache[path]; if (result === undefined) { if (path.length >= 7) { result = strStartsWith(path, "ext.metadata") || strStartsWith(path, "ext.web"); } _isReservedCache[path] = result; } return result; } function _processPathKeys(srcObj, target, thePath, checkReserved, metadataPathKeys, metadataCallback, processSubKeys) { objForEachKey(srcObj, function (key, srcValue) { var prop = null; if (srcValue || isValueAssigned(srcValue)) { var path = thePath; var name_1 = key; var theMetaPathKeys = metadataPathKeys; var destObj = target; if (_checkForCompoundkey && !checkReserved && rCheckDot.test(key)) { var subKeys = key.split("."); var keyLen = subKeys.length; if (keyLen > 1) { if (theMetaPathKeys) { theMetaPathKeys = theMetaPathKeys.slice(); } for (var lp = 0; lp < keyLen - 1; lp++) { var subKey = subKeys[lp]; destObj = destObj[subKey] = destObj[subKey] || {}; path += "." + subKey; if (theMetaPathKeys) { theMetaPathKeys.push(subKey); } } name_1 = subKeys[keyLen - 1]; } } var isReserved = checkReserved && _isReservedField(path); if (!isReserved && _theSanitizer && _theSanitizer.handleField(path, name_1)) { prop = _theSanitizer.value(path, name_1, srcValue, stringifyObjects); } else { prop = sanitizeProperty(name_1, srcValue, stringifyObjects); } if (prop) { var newValue = prop.value; destObj[name_1] = newValue; if (metadataCallback) { metadataCallback(theMetaPathKeys, name_1, prop); } if (processSubKeys && typeof newValue === "object" && !isArray(newValue)) { var newPath = theMetaPathKeys; if (newPath) { newPath = newPath.slice(); newPath.push(name_1); } _processPathKeys(srcValue, newValue, path + "." + name_1, checkReserved, newPath, metadataCallback, processSubKeys); } } } }); } }); } Serializer.__ieDyn=1; return Serializer; }()); function _addJSONPropertyMetaData(json, propKeys, name, propertyValue) { if (propertyValue && json) { var encodedTypeValue = getCommonSchemaMetaData(propertyValue.value, propertyValue.kind, propertyValue.propertyType); if (encodedTypeValue > -1) { var metaData = json[metadata]; if (!metaData) { metaData = json[metadata] = { f: {} }; } var metaTarget = metaData[f]; if (!metaTarget) { metaTarget = metaData[f] = {}; } if (propKeys) { for (var lp = 0; lp < propKeys.length; lp++) { var key = propKeys[lp]; if (!metaTarget[key]) { metaTarget[key] = { f: {} }; } var newTarget = metaTarget[key][f]; if (!newTarget) { newTarget = metaTarget[key][f] = {}; } metaTarget = newTarget; } } metaTarget = metaTarget[name] = {}; if (isArray(propertyValue.value)) { metaTarget["a"] = { t: encodedTypeValue }; } else { metaTarget["t"] = encodedTypeValue; } } } } var _a; var strSendAttempt = "sendAttempt"; var _noResponseQs = "&" + STR_NO_RESPONSE_BODY + "=true"; var _eventActionMap = (_a = {}, _a[1 ] = STR_REQUEUE, _a[100 ] = STR_REQUEUE, _a[200 ] = "sent", _a[8004 ] = STR_DROPPED, _a[8003 ] = STR_DROPPED, _a); var _collectorQsHeaders = {}; var _collectorHeaderToQs = {}; function _addCollectorHeaderQsMapping(qsName, headerName, allowQs) { _collectorQsHeaders[qsName] = headerName; if (allowQs !== false) { _collectorHeaderToQs[headerName] = qsName; } } _addCollectorHeaderQsMapping(STR_MSA_DEVICE_TICKET, STR_MSA_DEVICE_TICKET, false); _addCollectorHeaderQsMapping(STR_CLIENT_VERSION, STR_CLIENT_VERSION); _addCollectorHeaderQsMapping(STR_CLIENT_ID, "Client-Id"); _addCollectorHeaderQsMapping(STR_API_KEY, STR_API_KEY); _addCollectorHeaderQsMapping(STR_TIME_DELTA_TO_APPLY, STR_TIME_DELTA_TO_APPLY); _addCollectorHeaderQsMapping(STR_UPLOAD_TIME, STR_UPLOAD_TIME); _addCollectorHeaderQsMapping(STR_AUTH_XTOKEN, STR_AUTH_XTOKEN); function _getResponseText(xhr) { try { return xhr.responseText; } catch (e) { } return STR_EMPTY; } function _hasHeader(headers, header) { var hasHeader = false; if (headers && header) { var keys = objKeys(headers); if (keys && keys.length > 0) { var lowerHeader = header.toLowerCase(); for (var lp = 0; lp < keys.length; lp++) { var value = keys[lp]; if (value && hasOwnProperty(header, value) && value.toLowerCase() === lowerHeader) { hasHeader = true; break; } } } } return hasHeader; } function _addRequestDetails(details, name, value, useHeaders) { if (name && value && value.length > 0) { if (useHeaders && _collectorQsHeaders[name]) { details.hdrs[_collectorQsHeaders[name]] = value; details.useHdrs = true; } else { details.url += "&" + name + "=" + value; } } } function _prependTransports(theTransports, newTransports) { if (newTransports) { if (isNumber(newTransports)) { theTransports = [newTransports].concat(theTransports); } else if (isArray(newTransports)) { theTransports = newTransports.concat(theTransports); } } return theTransports; } var HttpManager = /** @class */ (function () { function HttpManager(maxEventsPerBatch, maxConnections, maxRequestRetriesBeforeBackoff, actions, timeoutOverride) { this._responseHandlers = []; var _urlString = "?cors=true&" + STR_CONTENT_TYPE_HEADER.toLowerCase() + "=" + DEFAULT_CONTENT_TYPE; var _killSwitch = new EVTKillSwitch(); var _paused = false; var _clockSkewManager = new EVTClockSkewManager(); var _useBeacons = false; var _outstandingRequests = 0; var _postManager; var _logger; var _sendInterfaces; var _core; var _customHttpInterface = true; var _queryStringParameters = []; var _headers = {}; var _batchQueue = []; var _serializer = null; var _enableEventTimings = false; var _cookieMgr; var _isUnloading = false; var _useHeaders = false; var _xhrTimeout; var _disableXhrSync; var _disableFetchKeepAlive; var _canHaveReducedPayload; var _addNoResponse; dynamicProto(HttpManager, this, function (_self) { var _sendCredentials = true; _self.initialize = function (endpointUrl, core, postChannel, httpInterface, channelConfig) { var _a; if (!channelConfig) { channelConfig = {}; } _urlString = endpointUrl + _urlString; _useHeaders = !isUndefined(channelConfig.avoidOptions) ? !channelConfig.avoidOptions : true; _core = core; _cookieMgr = core.getCookieMgr(); _enableEventTimings = !_core.config.disableEventTimings; var enableCompoundKey = !!_core.config.enableCompoundKey; _postManager = postChannel; _logger = _postManager.diagLog(); var valueSanitizer = channelConfig.valueSanitizer; var stringifyObjects = channelConfig.stringifyObjects; if (!isUndefined(channelConfig.enableCompoundKey)) { enableCompoundKey = !!channelConfig.enableCompoundKey; } _xhrTimeout = channelConfig.xhrTimeout; _disableXhrSync = !!channelConfig.disableXhrSync; _disableFetchKeepAlive = !!channelConfig.disableFetchKeepAlive; _addNoResponse = channelConfig.addNoResponse !== false; _useBeacons = !isReactNative(); _serializer = new Serializer(_core, valueSanitizer, stringifyObjects, enableCompoundKey); if (!isNullOrUndefined(channelConfig.useSendBeacon)) { _useBeacons = !!channelConfig.useSendBeacon; } var syncHttpInterface = httpInterface; var beaconHttpInterface = channelConfig.alwaysUseXhrOverride ? httpInterface : null; var fetchSyncHttpInterface = channelConfig.alwaysUseXhrOverride ? httpInterface : null; var beaconUnloadTransports = [3 , 2 ]; if (!httpInterface) { _customHttpInterface = false; var location_1 = getLocation(); if (location_1 && location_1.protocol && location_1.protocol.toLowerCase() === "file:") { _sendCredentials = false; } var theTransports = []; if (isReactNative()) { theTransports = [2 , 1 ]; beaconUnloadTransports = [2 , 1 , 3 ]; } else { theTransports = [1 , 2 , 3 ]; } theTransports = _prependTransports(theTransports, channelConfig.transports); httpInterface = _getSenderInterface(theTransports, false); if (!httpInterface) { _warnToConsole(_logger, "No available transport to send events"); } syncHttpInterface = _getSenderInterface(theTransports, true); } if (!beaconHttpInterface) { beaconUnloadTransports = _prependTransports(beaconUnloadTransports, channelConfig.unloadTransports); beaconHttpInterface = _getSenderInterface(beaconUnloadTransports, true); } _canHaveReducedPayload = !_customHttpInterface && ((_useBeacons && isBeaconsSupported()) || (!_disableFetchKeepAlive && isFetchSupported(true))); _sendInterfaces = (_a = {}, _a[0 ] = httpInterface, _a[1 ] = syncHttpInterface || _getSenderInterface([1 , 2 , 3 ], true), _a[2 ] = beaconHttpInterface || syncHttpInterface || _getSenderInterface([1 ], true), _a[3 ] = fetchSyncHttpInterface || _getSenderInterface([2 , 3 ], true) || syncHttpInterface || _getSenderInterface([1 ], true), _a); }; function _getSenderInterface(transports, syncSupport) { var transportType = 0 ; var sendPostFunc = null; var lp = 0; while (sendPostFunc == null && lp < transports.length) { transportType = transports[lp]; if (transportType === 1 ) { if (useXDomainRequest()) { sendPostFunc = _xdrSendPost; } else if (isXhrSupported()) { sendPostFunc = _xhrSendPost; } } else if (transportType === 2 && isFetchSupported(syncSupport) && (!syncSupport || (syncSupport && !_disableFetchKeepAlive))) { sendPostFunc = _fetchSendPost; } else if (_useBeacons && transportType === 3 && isBeaconsSupported()) { sendPostFunc = _beaconSendPost; } lp++; } if (sendPostFunc) { return { _transport: transportType, _isSync: syncSupport, sendPOST: sendPostFunc }; } return null; } _self["_getDbgPlgTargets"] = function () { return [_sendInterfaces[0 ], _killSwitch, _serializer, _sendInterfaces]; }; function _xdrSendPost(payload, oncomplete, sync) { var xdr = new XDomainRequest(); xdr.open(STR_POST_METHOD, payload.urlString); if (payload.timeout) { xdr.timeout = payload.timeout; } xdr.onload = function () { var response = _getResponseText(xdr); _doOnComplete(oncomplete, 200, {}, response); _handleCollectorResponse(response); }; xdr.onerror = function () { _doOnComplete(oncomplete, 400, {}); }; xdr.ontimeout = function () { _doOnComplete(oncomplete, 500, {}); }; xdr.onprogress = function () { }; if (sync) { xdr.send(payload.data); } else { timeoutOverride.set(function () { xdr.send(payload.data); }, 0); } } function _fetchSendPost(payload, oncomplete, sync) { var _a; var theUrl = payload.urlString; var ignoreResponse = false; var responseHandled = false; var requestInit = (_a = { body: payload.data, method: STR_POST_METHOD }, _a[STR_DISABLED_PROPERTY_NAME] = true, _a); if (sync) { requestInit.keepalive = true; if (payload._sendReason === 2 ) { ignoreResponse = true; if (_addNoResponse) { theUrl += _noResponseQs; } } } if (_sendCredentials) { requestInit.credentials = "include"; } if (payload.headers && objKeys(payload.headers).length > 0) { requestInit.headers = payload.headers; } fetch(theUrl, requestInit).then(function (response) { var headerMap = {}; var responseText = STR_EMPTY; var headers = response.headers; if (headers) { headers["forEach"](function (value, name) { headerMap[name] = value; }); } if (response.body) { response.text().then(function (text) { responseText = text; }); } if (!responseHandled) { responseHandled = true; _doOnComplete(oncomplete, response.status, headerMap, responseText); _handleCollectorResponse(responseText); } })["catch"](function (error) { if (!responseHandled) { responseHandled = true; _doOnComplete(oncomplete, 0, {}); } }); if (ignoreResponse && !responseHandled) { responseHandled = true; _doOnComplete(oncomplete, 200, {}); } if (!responseHandled && payload.timeout > 0) { timeoutOverride.set(function () { if (!responseHandled) { responseHandled = true; _doOnComplete(oncomplete, 500, {}); } }, payload.timeout); } } function _xhrSendPost(payload, oncomplete, sync) { var theUrl = payload.urlString; function _appendHeader(theHeaders, xhr, name) { if (!theHeaders[name] && xhr && xhr.getResponseHeader) { var value = xhr.getResponseHeader(name); if (value) { theHeaders[name] = strTrim(value); } } return theHeaders; } function _getAllResponseHeaders(xhr) { var theHeaders = {}; if (!xhr.getAllResponseHeaders) { theHeaders = _appendHeader(theHeaders, xhr, STR_TIME_DELTA_HEADER); theHeaders = _appendHeader(theHeaders, xhr, STR_KILL_DURATION_HEADER); theHeaders = _appendHeader(theHeaders, xhr, STR_KILL_DURATION_SECONDS_HEADER); } else { theHeaders = _convertAllHeadersToMap(xhr.getAllResponseHeaders()); } return theHeaders; } function xhrComplete(xhr, responseTxt) { _doOnComplete(oncomplete, xhr.status, _getAllResponseHeaders(xhr), responseTxt); } if (sync && payload.disableXhrSync) { sync = false; } var xhrRequest = openXhr(STR_POST_METHOD, theUrl, _sendCredentials, true, sync, payload.timeout); objForEachKey(payload.headers, function (name, value) { xhrRequest.setRequestHeader(name, value); }); xhrRequest.onload = function () { var response = _getResponseText(xhrRequest); xhrComplete(xhrRequest, response); _handleCollectorResponse(response); }; xhrRequest.onerror = function () { xhrComplete(xhrRequest); }; xhrRequest.ontimeout = function () { xhrComplete(xhrRequest); }; xhrRequest.send(payload.data); } function _doOnComplete(oncomplete, status, headers, response) { try { oncomplete(status, headers, response); } catch (e) { _throwInternal(_logger, 2 , 518 , dumpObj(e)); } } function _beaconSendPost(payload, oncomplete, sync) { var internalPayloadData = payload; var status = 200; var thePayload = internalPayloadData._thePayload; var theUrl = payload.urlString + (_addNoResponse ? _noResponseQs : STR_EMPTY); try { var nav_1 = getNavigator(); if (!nav_1.sendBeacon(theUrl, payload.data)) { if (thePayload) { var droppedBatches_1 = []; arrForEach(thePayload.batches, function (theBatch) { if (droppedBatches_1 && theBatch && theBatch.count() > 0) { var theEvents = theBatch.events(); for (var lp = 0; lp < theEvents.length; lp++) { if (!nav_1.sendBeacon(theUrl, _serializer.getEventBlob(theEvents[lp]))) { droppedBatches_1.push(theBatch.split(lp)); break; } } } else { droppedBatches_1.push(theBatch.split(0)); } }); _sendBatchesNotification(droppedBatches_1, 8003 , thePayload.sendType, true); } else { status = 0; } } } catch (ex) { _warnToConsole(_logger, "Failed to send telemetry using sendBeacon API. Ex:" + dumpObj(ex)); status = 0; } finally { _doOnComplete(oncomplete, status, {}, STR_EMPTY); } } function _isBeaconPayload(sendType) { return sendType === 2 || sendType === 3 ; } function _adjustSendType(sendType) { if (_isUnloading && _isBeaconPayload(sendType)) { sendType = 2 ; } return sendType; } _self.addQueryStringParameter = function (name, value) { for (var i = 0; i < _queryStringParameters.length; i++) { if (_queryStringParameters[i].name === name) { _queryStringParameters[i].value = value; return; } } _queryStringParameters.push({ name: name, value: value }); }; _self.addHeader = function (name, value) { _headers[name] = value; }; _self.canSendRequest = function () { return _hasIdleConnection() && _clockSkewManager.allowRequestSending(); }; _self.sendQueuedRequests = function (sendType, sendReason) { if (isUndefined(sendType)) { sendType = 0 ; } if (_isUnloading) { sendType = _adjustSendType(sendType); sendReason = 2 ; } if (_canSendPayload(_batchQueue, sendType, 0)) { _sendBatches(_clearQueue(), 0, false, sendType, sendReason || 0 ); } }; _self.isCompletelyIdle = function () { return !_paused && _outstandingRequests === 0 && _batchQueue.length === 0; }; _self.setUnloading = function (value) { _isUnloading = value; }; _self.addBatch = function (theBatch) { if (theBatch && theBatch.count() > 0) { if (_killSwitch.isTenantKilled(theBatch.iKey())) { return false; } _batchQueue.push(theBatch); } return true; }; _self.teardown = function () { if (_batchQueue.length > 0) { _sendBatches(_clearQueue(), 0, true, 2 , 2 ); } }; _self.pause = function () { _paused = true; }; _self.resume = function () { _paused = false; _self.sendQueuedRequests(0 , 4 ); }; _self.sendSynchronousBatch = function (batch, sendType, sendReason) { if (batch && batch.count() > 0) { if (isNullOrUndefined(sendType)) { sendType = 1 ; } if (_isUnloading) { sendType = _adjustSendType(sendType); sendReason = 2 ; } _sendBatches([batch], 0, false, sendType, sendReason || 0 ); } }; function _hasIdleConnection() { return !_paused && _outstandingRequests < maxConnections; } function _clearQueue() { var theQueue = _batchQueue; _batchQueue = []; return theQueue; } function _canSendPayload(theBatches, sendType, retryCnt) { var result = false; if (theBatches && theBatches.length > 0 && !_paused && _sendInterfaces[sendType] && _serializer) { result = (sendType !== 0 ) || (_hasIdleConnection() && (retryCnt > 0 || _clockSkewManager.allowRequestSending())); } return result; } function _createDebugBatches(theBatches) { var values = {}; if (theBatches) { arrForEach(theBatches, function (theBatch, idx) { values[idx] = { iKey: theBatch.iKey(), evts: theBatch.events() }; }); } return values; } function _sendBatches(theBatches, retryCount, isTeardown, sendType, sendReason) { if (!theBatches || theBatches.length === 0) { return; } if (_paused) { _sendBatchesNotification(theBatches, 1 , sendType); return; } sendType = _adjustSendType(sendType); try { var orgBatches_1 = theBatches; var isSynchronous_1 = sendType !== 0 ; doPerf(_core, function () { return "HttpManager:_sendBatches"; }, function (perfEvt) { if (perfEvt) { theBatches = theBatches.slice(0); } var droppedBatches = []; var thePayload = null; var serializationStart = getTime(); var sendInterface = _sendInterfaces[sendType] || (isSynchronous_1 ? _sendInterfaces[1 ] : _sendInterfaces[0 ]); var sendTransport = sendInterface && sendInterface._transport; var isReducedPayload = _canHaveReducedPayload && (_isUnloading || _isBeaconPayload(sendType) || (sendTransport === 3 || (sendInterface._isSync && sendTransport === 2 ))); while (_canSendPayload(theBatches, sendType, retryCount)) { var theBatch = theBatches.shift(); if (theBatch && theBatch.count() > 0) { if (!_killSwitch.isTenantKilled(theBatch.iKey())) { thePayload = thePayload || _serializer.createPayload(retryCount, isTeardown, isSynchronous_1, isReducedPayload, sendReason, sendType); if (!_serializer.appendPayload(thePayload, theBatch, maxEventsPerBatch)) { _doPayloadSend(thePayload, serializationStart, getTime(), sendReason); serializationStart = getTime(); theBatches = [theBatch].concat(theBatches); thePayload = null; } else if (thePayload.overflow !== null) { theBatches = [thePayload.overflow].concat(theBatches); thePayload.overflow = null; _doPayloadSend(thePayload, serializationStart, getTime(), sendReason); serializationStart = getTime(); thePayload = null; } } else { droppedBatches.push(theBatch); } } } if (thePayload) { _doPayloadSend(thePayload, serializationStart, getTime(), sendReason); } if (theBatches.length > 0) { _batchQueue = theBatches.concat(_batchQueue); } _sendBatchesNotification(droppedBatches, 8004 , sendType); }, function () { return ({ batches: _createDebugBatches(orgBatches_1), retryCount: retryCount, isTeardown: isTeardown, isSynchronous: isSynchronous_1, sendReason: sendReason, useSendBeacon: _isBeaconPayload(sendType), sendType: sendType }); }, !isSynchronous_1); } catch (ex) { _throwInternal(_logger, 2 , 48 , "Unexpected Exception sending batch: " + dumpObj(ex)); } } function _buildRequestDetails(thePayload, useHeaders) { var requestDetails = { url: _urlString, hdrs: {}, useHdrs: false }; if (!useHeaders) { objForEachKey(_headers, function (name, value) { if (_collectorHeaderToQs[name]) { _addRequestDetails(requestDetails, _collectorHeaderToQs[name], value, false); } else { requestDetails.hdrs[name] = value; requestDetails.useHdrs = true; } }); } else { requestDetails.hdrs = extend(requestDetails.hdrs, _headers); requestDetails.useHdrs = (objKeys(requestDetails.hdrs).length > 0); } _addRequestDetails(requestDetails, STR_CLIENT_ID, "NO_AUTH", useHeaders); _addRequestDetails(requestDetails, STR_CLIENT_VERSION, FullVersionString, useHeaders); var apiQsKeys = STR_EMPTY; arrForEach(thePayload.apiKeys, function (apiKey) { if (apiQsKeys.length > 0) { apiQsKeys += ","; } apiQsKeys += apiKey; }); _addRequestDetails(requestDetails, STR_API_KEY, apiQsKeys, useHeaders); _addRequestDetails(requestDetails, STR_UPLOAD_TIME, dateNow().toString(), useHeaders); var msfpc = _getMsfpc(thePayload); if (isValueAssigned(msfpc)) { requestDetails.url += "&ext.intweb.msfpc=" + msfpc; } if (_clockSkewManager.shouldAddClockSkewHeaders()) { _addRequestDetails(requestDetails, STR_TIME_DELTA_TO_APPLY, _clockSkewManager.getClockSkewHeaderValue(), useHeaders); } if (_core.getWParam) { var wParam = _core.getWParam(); if (wParam >= 0) { requestDetails.url += "&w=" + wParam; } } for (var i = 0; i < _queryStringParameters.length; i++) { requestDetails.url += "&" + _queryStringParameters[i].name + "=" + _queryStringParameters[i].value; } return requestDetails; } function _setTimingValue(timings, name, value) { timings[name] = timings[name] || {}; timings[name][_postManager.identifier] = value; } function _doPayloadSend(thePayload, serializationStart, serializationCompleted, sendReason) { if (thePayload && thePayload.payloadBlob && thePayload.payloadBlob.length > 0) { var useSendHook_1 = !!_self.sendHook; var sendInterface_1 = _sendInterfaces[thePayload.sendType]; if (!_isBeaconPayload(thePayload.sendType) && thePayload.isBeacon && thePayload.sendReason === 2 ) { sendInterface_1 = _sendInterfaces[2 ] || _sendInterfaces[3 ] || sendInterface_1; } var useHeaders_1 = _useHeaders; if (thePayload.isBeacon || sendInterface_1._transport === 3 ) { useHeaders_1 = false; } var requestDetails_1 = _buildRequestDetails(thePayload, useHeaders_1); useHeaders_1 = useHeaders_1 || requestDetails_1.useHdrs; var sendEventStart_1 = getTime(); doPerf(_core, function () { return "HttpManager:_doPayloadSend"; }, function () { for (var batchLp = 0; batchLp < thePayload.batches.length; batchLp++) { var theBatch = thePayload.batches[batchLp]; var theEvents = theBatch.events(); for (var evtLp = 0; evtLp < theEvents.length; evtLp++) { var telemetryItem = theEvents[evtLp]; if (_enableEventTimings) { var timings = telemetryItem.timings = telemetryItem.timings || {}; _setTimingValue(timings, "sendEventStart", sendEventStart_1); _setTimingValue(timings, "serializationStart", serializationStart); _setTimingValue(timings, "serializationCompleted", serializationCompleted); } telemetryItem[strSendAttempt] > 0 ? telemetryItem[strSendAttempt]++ : telemetryItem[strSendAttempt] = 1; } } _sendBatchesNotification(thePayload.batches, (1000 + (sendReason || 0 )), thePayload.sendType, true); var orgPayloadData = { data: thePayload.payloadBlob, urlString: requestDetails_1.url, headers: requestDetails_1.hdrs, _thePayload: thePayload, _sendReason: sendReason, timeout: _xhrTimeout, disableXhrSync: _disableXhrSync, disableFetchKeepAlive: _disableFetchKeepAlive }; if (useHeaders_1) { if (!_hasHeader(orgPayloadData.headers, STR_CACHE_CONTROL)) { orgPayloadData.headers[STR_CACHE_CONTROL] = DEFAULT_CACHE_CONTROL; } if (!_hasHeader(orgPayloadData.headers, STR_CONTENT_TYPE_HEADER)) { orgPayloadData.headers[STR_CONTENT_TYPE_HEADER] = DEFAULT_CONTENT_TYPE; } } var sender = null; if (sendInterface_1) { sender = function (payload) { _clockSkewManager.firstRequestSent(); var onComplete = function (status, headers) { _retryRequestIfNeeded(status, headers, thePayload, sendReason); }; var isSync = thePayload.isTeardown || thePayload.isSync; try { sendInterface_1.sendPOST(payload, onComplete, isSync); if (_self.sendListener) { _self.sendListener(orgPayloadData, payload, isSync, thePayload.isBeacon); } } catch (ex) { _warnToConsole(_logger, "Unexpected exception sending payload. Ex:" + dumpObj(ex)); _doOnComplete(onComplete, 0, {}); } }; } doPerf(_core, function () { return "HttpManager:_doPayloadSend.sender"; }, function () { if (sender) { if (thePayload.sendType === 0 ) { _outstandingRequests++; } if (useSendHook_1 && !thePayload.isBeacon && sendInterface_1._transport !== 3 ) { var hookData_1 = { data: orgPayloadData.data, urlString: orgPayloadData.urlString, headers: extend({}, orgPayloadData.headers), timeout: orgPayloadData.timeout, disableXhrSync: orgPayloadData.disableXhrSync, disableFetchKeepAlive: orgPayloadData.disableFetchKeepAlive }; var senderCalled_1 = false; doPerf(_core, function () { return "HttpManager:_doPayloadSend.sendHook"; }, function () { try { _self.sendHook(hookData_1, function (payload) { senderCalled_1 = true; if (!_customHttpInterface && !payload._thePayload) { payload._thePayload = payload._thePayload || orgPayloadData._thePayload; payload._sendReason = payload._sendReason || orgPayloadData._sendReason; } sender(payload); }, thePayload.isSync || thePayload.isTeardown); } catch (ex) { if (!senderCalled_1) { sender(orgPayloadData); } } }); } else { sender(orgPayloadData); } } }); }, function () { return ({ thePayload: thePayload, serializationStart: serializationStart, serializationCompleted: serializationCompleted, sendReason: sendReason }); }, thePayload.isSync); } if (thePayload.sizeExceed && thePayload.sizeExceed.length > 0) { _sendBatchesNotification(thePayload.sizeExceed, 8003 , thePayload.sendType); } if (thePayload.failedEvts && thePayload.failedEvts.length > 0) { _sendBatchesNotification(thePayload.failedEvts, 8002 , thePayload.sendType); } } function _addEventCompletedTimings(theEvents, sendEventCompleted) { if (_enableEventTimings) { arrForEach(theEvents, function (theEvent) { var timings = theEvent.timings = theEvent.timings || {}; _setTimingValue(timings, "sendEventCompleted", sendEventCompleted); }); } } function _retryRequestIfNeeded(status, headers, thePayload, sendReason) { var reason = 9000 ; var droppedBatches = null; var isRetrying = false; var backOffTrans = false; try { var shouldRetry = true; if (typeof status !== strShimUndefined) { if (headers) { _clockSkewManager.setClockSkew(headers[STR_TIME_DELTA_HEADER]); var killDuration = headers[STR_KILL_DURATION_HEADER] || headers["kill-duration-seconds"]; arrForEach(_killSwitch.setKillSwitchTenants(headers[STR_KILL_TOKENS_HEADER], killDuration), function (killToken) { arrForEach(thePayload.batches, function (theBatch) { if (theBatch.iKey() === killToken) { droppedBatches = droppedBatches || []; var removedEvents = theBatch.split(0); thePayload.numEvents -= removedEvents.count(); droppedBatches.push(removedEvents); } }); }); } if (status == 200 || status == 204) { reason = 200 ; return; } if (!retryPolicyShouldRetryForStatus(status) || thePayload.numEvents <= 0) { shouldRetry = false; } reason = 9000 + (status % 1000); } if (shouldRetry) { reason = 100 ; var retryCount_1 = thePayload.retryCnt; if (thePayload.sendType === 0 ) { if (retryCount_1 < maxRequestRetriesBeforeBackoff) { isRetrying = true; _doAction(function () { if (thePayload.sendType === 0 ) { _outstandingRequests--; } _sendBatches(thePayload.batches, retryCount_1 + 1, thePayload.isTeardown, _isUnloading ? 2 : thePayload.sendType, 5 ); }, _isUnloading, retryPolicyGetMillisToBackoffForRetry(retryCount_1)); } else { backOffTrans = true; if (_isUnloading) { reason = 8001 ; } } } } } finally { if (!isRetrying) { _clockSkewManager.setClockSkew(); _handleRequestFinished(thePayload, reason, sendReason, backOffTrans); } _sendBatchesNotification(droppedBatches, 8004 , thePayload.sendType); } } function _handleRequestFinished(thePayload, batchReason, sendReason, backOffTrans) { try { if (backOffTrans) { _postManager._backOffTransmission(); } if (batchReason === 200 ) { if (!backOffTrans && !thePayload.isSync) { _postManager._clearBackOff(); } _addCompleteTimings(thePayload.batches); } _sendBatchesNotification(thePayload.batches, batchReason, thePayload.sendType, true); } finally { if (thePayload.sendType === 0 ) { _outstandingRequests--; if (sendReason !== 5 ) { _self.sendQueuedRequests(thePayload.sendType, sendReason); } } } } function _addCompleteTimings(theBatches) { if (_enableEventTimings) { var sendEventCompleted_1 = getTime(); arrForEach(theBatches, function (theBatch) { if (theBatch && theBatch.count() > 0) { _addEventCompletedTimings(theBatch.events(), sendEventCompleted_1); } }); } } function _doAction(cb, isSync, interval) { if (isSync) { cb(); } else { timeoutOverride.set(cb, interval); } } function _convertAllHeadersToMap(headersString) { var headers = {}; if (isString(headersString)) { var headersArray = strTrim(headersString).split(/[\r\n]+/); arrForEach(headersArray, function (headerEntry) { if (headerEntry) { var idx = headerEntry.indexOf(": "); if (idx !== -1) { var header = strTrim(headerEntry.substring(0, idx)).toLowerCase(); var value = strTrim(headerEntry.substring(idx + 1)); headers[header] = value; } else { headers[strTrim(headerEntry)] = 1; } } }); } return headers; } function _getMsfpc(thePayload) { for (var lp = 0; lp < thePayload.batches.length; lp++) { var msfpc = thePayload.batches[lp].Msfpc(); if (msfpc) { return encodeURIComponent(msfpc); } } return STR_EMPTY; } function _handleCollectorResponse(responseText) { var responseHandlers = _self._responseHandlers; try { for (var i = 0; i < responseHandlers.length; i++) { try { responseHandlers[i](responseText); } catch (e) { _throwInternal(_logger, 1 , 519 , "Response handler failed: " + e); } } if (responseText) { var response = JSON.parse(responseText); if (isValueAssigned(response.webResult) && isValueAssigned(response.webResult[STR_MSFPC])) { _cookieMgr.set("MSFPC", response.webResult[STR_MSFPC], 365 * 86400); } } } catch (ex) { } } function _sendBatchesNotification(theBatches, batchReason, sendType, sendSync) { if (theBatches && theBatches.length > 0 && actions) { var theAction_1 = actions[_getNotificationAction(batchReason)]; if (theAction_1) { var isSyncRequest_1 = sendType !== 0 ; doPerf(_core, function () { return "HttpManager:_sendBatchesNotification"; }, function () { _doAction(function () { try { theAction_1.call(actions, theBatches, batchReason, isSyncRequest_1, sendType); } catch (e) { _throwInternal(_logger, 1 , 74 , "send request notification failed: " + e); } }, sendSync || isSyncRequest_1, 0); }, function () { return ({ batches: _createDebugBatches(theBatches), reason: batchReason, isSync: isSyncRequest_1, sendSync: sendSync, sendType: sendType }); }, !isSyncRequest_1); } } } function _getNotificationAction(reason) { var action = _eventActionMap[reason]; if (!isValueAssigned(action)) { action = STR_OTHER; if (reason >= 9000 && reason <= 9999 ) { action = STR_RESPONSE_FAIL; } else if (reason >= 8000 && reason <= 8999 ) { action = STR_DROPPED; } else if (reason >= 1000 && reason <= 1999 ) { action = STR_SENDING; } } return action; } }); } HttpManager.__ieDyn=1; return HttpManager; }()); function defaultSetTimeout(callback, ms) { var args = []; for (var _i = 2; _i < arguments.length; _i++) { args[_i - 2] = arguments[_i]; } return setTimeout(callback, ms, args); } function defaultClearTimeout(timeoutId) { clearTimeout(timeoutId); } function createTimeoutWrapper(argSetTimeout, argClearTimeout) { return { set: argSetTimeout || defaultSetTimeout, clear: argClearTimeout || defaultClearTimeout }; } var FlushCheckTimer = 0.250; var MaxNumberEventPerBatch = 500; var EventsDroppedAtOneTime = 20; var MaxSendAttempts = 6; var MaxSyncUnloadSendAttempts = 2; var MaxBackoffCount = 4; var MaxConnections = 2; var MaxRequestRetriesBeforeBackoff = 1; var strEventsDiscarded = "eventsDiscarded"; var strOverrideInstrumentationKey = "overrideInstrumentationKey"; var strMaxEventRetryAttempts = "maxEventRetryAttempts"; var strMaxUnloadEventRetryAttempts = "maxUnloadEventRetryAttempts"; var strAddUnloadCb = "addUnloadCb"; var PostChannel = /** @class */ (function (_super) { __extendsFn(PostChannel, _super); function PostChannel() { var _this = _super.call(this) || this; _this.identifier = "PostChannel"; _this.priority = 1011; _this.version = '3.2.13'; var _config; var _isTeardownCalled = false; var _flushCallbackQueue = []; var _flushCallbackTimerId = null; var _paused = false; var _immediateQueueSize = 0; var _immediateQueueSizeLimit = 500; var _queueSize = 0; var _queueSizeLimit = 10000; var _profiles = {}; var _currentProfile = RT_PROFILE; var _scheduledTimerId = null; var _immediateTimerId = null; var _currentBackoffCount = 0; var _timerCount = 0; var _xhrOverride; var _httpManager; var _batchQueues = {}; var _autoFlushEventsLimit; var _autoFlushBatchLimit; var _delayedBatchSendLatency = -1; var _delayedBatchReason; var _optimizeObject = true; var _isPageUnloadTriggered = false; var _maxEventSendAttempts = MaxSendAttempts; var _maxUnloadEventSendAttempts = MaxSyncUnloadSendAttempts; var _evtNamespace; var _timeoutWrapper; dynamicProto(PostChannel, _this, function (_self, _base) { _initDefaults(); _self["_getDbgPlgTargets"] = function () { return [_httpManager]; }; _self.initialize = function (coreConfig, core, extensions) { doPerf(core, function () { return "PostChannel:initialize"; }, function () { var extendedCore = core; _base.initialize(coreConfig, core, extensions); try { var hasAddUnloadCb = !!core[strAddUnloadCb]; _evtNamespace = mergeEvtNamespace(createUniqueNamespace(_self.identifier), core.evtNamespace && core.evtNamespace()); var ctx = _self._getTelCtx(); coreConfig.extensionConfig[_self.identifier] = coreConfig.extensionConfig[_self.identifier] || {}; _config = ctx.getExtCfg(_self.identifier); _timeoutWrapper = createTimeoutWrapper(_config.setTimeoutOverride, _config.clearTimeoutOverride); _optimizeObject = !_config.disableOptimizeObj && isChromium(); _hookWParam(extendedCore); if (_config.eventsLimitInMem > 0) { _queueSizeLimit = _config.eventsLimitInMem; } if (_config.immediateEventLimit > 0) { _immediateQueueSizeLimit = _config.immediateEventLimit; } if (_config.autoFlushEventsLimit > 0) { _autoFlushEventsLimit = _config.autoFlushEventsLimit; } if (isNumber(_config[strMaxEventRetryAttempts])) { _maxEventSendAttempts = _config[strMaxEventRetryAttempts]; } if (isNumber(_config[strMaxUnloadEventRetryAttempts])) { _maxUnloadEventSendAttempts = _config[strMaxUnloadEventRetryAttempts]; } _setAutoLimits(); if (_config.httpXHROverride && _config.httpXHROverride.sendPOST) { _xhrOverride = _config.httpXHROverride; } if (isValueAssigned(coreConfig.anonCookieName)) { _httpManager.addQueryStringParameter("anoncknm", coreConfig.anonCookieName); } _httpManager.sendHook = _config.payloadPreprocessor; _httpManager.sendListener = _config.payloadListener; var endpointUrl = _config.overrideEndpointUrl ? _config.overrideEndpointUrl : coreConfig.endpointUrl; _self._notificationManager = core.getNotifyMgr(); _httpManager.initialize(endpointUrl, _self.core, _self, _xhrOverride, _config); var excludePageUnloadEvents = coreConfig.disablePageUnloadEvents || []; addPageUnloadEventListener(_handleUnloadEvents, excludePageUnloadEvents, _evtNamespace); addPageHideEventListener(_handleUnloadEvents, excludePageUnloadEvents, _evtNamespace); addPageShowEventListener(_handleShowEvents, coreConfig.disablePageShowEvents, _evtNamespace); } catch (e) { _self.setInitialized(false); throw e; } }, function () { return ({ coreConfig: coreConfig, core: core, extensions: extensions }); }); }; _self.processTelemetry = function (ev, itemCtx) { setProcessTelemetryTimings(ev, _self.identifier); itemCtx = _self._getTelCtx(itemCtx); var channelConfig = itemCtx.getExtCfg(_self.identifier); var disableTelemetry = !!_config.disableTelemetry; if (channelConfig) { disableTelemetry = disableTelemetry || !!channelConfig.disableTelemetry; } var event = ev; if (!disableTelemetry && !_isTeardownCalled) { if (_config[strOverrideInstrumentationKey]) { event.iKey = _config[strOverrideInstrumentationKey]; } if (channelConfig && channelConfig[strOverrideInstrumentationKey]) { event.iKey = channelConfig[strOverrideInstrumentationKey]; } _addEventToQueues(event, true); if (_isPageUnloadTriggered) { _releaseAllQueues(2 , 2 ); } else { _scheduleTimer(); } } _self.processNext(event, itemCtx); }; _self._doTeardown = function (unloadCtx, unloadState) { _releaseAllQueues(2 , 2 ); _isTeardownCalled = true; _httpManager.teardown(); removePageUnloadEventListener(null, _evtNamespace); removePageHideEventListener(null, _evtNamespace); removePageShowEventListener(null, _evtNamespace); _initDefaults(); }; function _hookWParam(extendedCore) { var existingGetWParamMethod = extendedCore.getWParam; extendedCore.getWParam = function () { var wparam = 0; if (_config.ignoreMc1Ms0CookieProcessing) { wparam = wparam | 2; } return wparam | existingGetWParamMethod(); }; } function _handleUnloadEvents(evt) { var theEvt = evt || getWindow().event; if (theEvt.type !== "beforeunload") { _isPageUnloadTriggered = true; _httpManager.setUnloading(_isPageUnloadTriggered); } _releaseAllQueues(2 , 2 ); } function _handleShowEvents(evt) { _isPageUnloadTriggered = false; _httpManager.setUnloading(_isPageUnloadTriggered); } function _addEventToQueues(event, append) { if (!event.sendAttempt) { event.sendAttempt = 0; } if (!event.latency) { event.latency = 1 ; } if (event.ext && event.ext[STR_TRACE]) { delete (event.ext[STR_TRACE]); } if (event.ext && event.ext[STR_USER] && event.ext[STR_USER]["id"]) { delete (event.ext[STR_USER]["id"]); } if (_optimizeObject) { event.ext = optimizeObject(event.ext); if (event.baseData) { event.baseData = optimizeObject(event.baseData); } if (event.data) { event.data = optimizeObject(event.data); } } if (event.sync) { if (_currentBackoffCount || _paused) { event.latency = 3 ; event.sync = false; } else { if (_httpManager) { if (_optimizeObject) { event = optimizeObject(event); } _httpManager.sendSynchronousBatch(EventBatch.create(event.iKey, [event]), event.sync === true ? 1 : event.sync, 3 ); return; } } } var evtLatency = event.latency; var queueSize = _queueSize; var queueLimit = _queueSizeLimit; if (evtLatency === 4 ) { queueSize = _immediateQueueSize; queueLimit = _immediateQueueSizeLimit; } var eventDropped = false; if (queueSize < queueLimit) { eventDropped = !_addEventToProperQueue(event, append); } else { var dropLatency = 1 ; var dropNumber = EventsDroppedAtOneTime; if (evtLatency === 4 ) { dropLatency = 4 ; dropNumber = 1; } eventDropped = true; if (_dropEventWithLatencyOrLess(event.iKey, event.latency, dropLatency, dropNumber)) { eventDropped = !_addEventToProperQueue(event, append); } } if (eventDropped) { _notifyEvents(strEventsDiscarded, [event], EventsDiscardedReason.QueueFull); } } _self.setEventQueueLimits = function (eventLimit, autoFlushLimit) { _queueSizeLimit = eventLimit > 0 ? eventLimit : 10000; _autoFlushEventsLimit = autoFlushLimit > 0 ? autoFlushLimit : 0; _setAutoLimits(); var doFlush = _queueSize > eventLimit; if (!doFlush && _autoFlushBatchLimit > 0) { for (var latency = 1 ; !doFlush && latency <= 3 ; latency++) { var batchQueue = _batchQueues[latency]; if (batchQueue && batchQueue.batches) { arrForEach(batchQueue.batches, function (theBatch) { if (theBatch && theBatch.count() >= _autoFlushBatchLimit) { doFlush = true; } }); } } } _performAutoFlush(true, doFlush); }; _self.pause = function () { _clearScheduledTimer(); _paused = true; _httpManager.pause(); }; _self.resume = function () { _paused = false; _httpManager.resume(); _scheduleTimer(); }; _self.addResponseHandler = function (responseHandler) { _httpManager._responseHandlers.push(responseHandler); }; _self._loadTransmitProfiles = function (profiles) { _resetTransmitProfiles(); objForEachKey(profiles, function (profileName, profileValue) { var profLen = profileValue.length; if (profLen >= 2) { var directValue = (profLen > 2 ? profileValue[2] : 0); profileValue.splice(0, profLen - 2); if (profileValue[1] < 0) { profileValue[0] = -1; } if (profileValue[1] > 0 && profileValue[0] > 0) { var timerMultiplier = profileValue[0] / profileValue[1]; profileValue[0] = Math.ceil(timerMultiplier) * profileValue[1]; } if (directValue >= 0 && profileValue[1] >= 0 && directValue > profileValue[1]) { directValue = profileValue[1]; } profileValue.push(directValue); _profiles[profileName] = profileValue; } }); }; _self.flush = function (async, callback, sendReason) { if (async === void 0) { async = true; } if (!_paused) { sendReason = sendReason || 1 ; if (async) { if (_flushCallbackTimerId == null) { _clearScheduledTimer(); _queueBatches(1 , 0 , sendReason); _flushCallbackTimerId = _createTimer(function () { _flushCallbackTimerId = null; _flushImpl(callback, sendReason); }, 0); } else { _flushCallbackQueue.push(callback); } } else { var cleared = _clearScheduledTimer(); _sendEventsForLatencyAndAbove(1 , 1 , sendReason); if (callback !== null && callback !== undefined) { callback(); } if (cleared) { _scheduleTimer(); } } } }; _self.setMsaAuthTicket = function (ticket) { _httpManager.addHeader(STR_MSA_DEVICE_TICKET, ticket); }; _self.hasEvents = _hasEvents; _self._setTransmitProfile = function (profileName) { if (_currentProfile !== profileName && _profiles[profileName] !== undefined) { _clearScheduledTimer(); _currentProfile = profileName; _scheduleTimer(); } }; function _sendEventsForLatencyAndAbove(latency, sendType, sendReason) { var queued = _queueBatches(latency, sendType, sendReason); _httpManager.sendQueuedRequests(sendType, sendReason); return queued; } function _hasEvents() { return _queueSize > 0; } function _scheduleTimer() { if (_delayedBatchSendLatency >= 0 && _queueBatches(_delayedBatchSendLatency, 0 , _delayedBatchReason)) { _httpManager.sendQueuedRequests(0 , _delayedBatchReason); } if (_immediateQueueSize > 0 && !_immediateTimerId && !_paused) { var immediateTimeOut = _profiles[_currentProfile][2]; if (immediateTimeOut >= 0) { _immediateTimerId = _createTimer(function () { _immediateTimerId = null; _sendEventsForLatencyAndAbove(4 , 0 , 1 ); _scheduleTimer(); }, immediateTimeOut); } } var timeOut = _profiles[_currentProfile][1]; if (!_scheduledTimerId && !_flushCallbackTimerId && timeOut >= 0 && !_paused) { if (_hasEvents()) { _scheduledTimerId = _createTimer(function () { _scheduledTimerId = null; _sendEventsForLatencyAndAbove(_timerCount === 0 ? 3 : 1 , 0 , 1 ); _timerCount++; _timerCount %= 2; _scheduleTimer(); }, timeOut); } else { _timerCount = 0; } } } _self._backOffTransmission = function () { if (_currentBackoffCount < MaxBackoffCount) { _currentBackoffCount++; _clearScheduledTimer(); _scheduleTimer(); } }; _self._clearBackOff = function () { if (_currentBackoffCount) { _currentBackoffCount = 0; _clearScheduledTimer(); _scheduleTimer(); } }; function _initDefaults() { _config = null; _isTeardownCalled = false; _flushCallbackQueue = []; _flushCallbackTimerId = null; _paused = false; _immediateQueueSize = 0; _immediateQueueSizeLimit = 500; _queueSize = 0; _queueSizeLimit = 10000; _profiles = {}; _currentProfile = RT_PROFILE; _scheduledTimerId = null; _immediateTimerId = null; _currentBackoffCount = 0; _timerCount = 0; _xhrOverride = null; _batchQueues = {}; _autoFlushEventsLimit = undefined; _autoFlushBatchLimit = 0; _delayedBatchSendLatency = -1; _delayedBatchReason = null; _optimizeObject = true; _isPageUnloadTriggered = false; _maxEventSendAttempts = MaxSendAttempts; _maxUnloadEventSendAttempts = MaxSyncUnloadSendAttempts; _evtNamespace = null; _timeoutWrapper = createTimeoutWrapper(); _httpManager = new HttpManager(MaxNumberEventPerBatch, MaxConnections, MaxRequestRetriesBeforeBackoff, { requeue: _requeueEvents, send: _sendingEvent, sent: _eventsSentEvent, drop: _eventsDropped, rspFail: _eventsResponseFail, oth: _otherEvent }, _timeoutWrapper); _initializeProfiles(); _clearQueues(); _setAutoLimits(); } function _createTimer(theTimerFunc, timeOut) { if (timeOut === 0 && _currentBackoffCount) { timeOut = 1; } var timerMultiplier = 1000; if (_currentBackoffCount) { timerMultiplier = retryPolicyGetMillisToBackoffForRetry(_currentBackoffCount - 1); } return _timeoutWrapper.set(theTimerFunc, timeOut * timerMultiplier); } function _clearScheduledTimer() { if (_scheduledTimerId !== null) { _timeoutWrapper.clear(_scheduledTimerId); _scheduledTimerId = null; _timerCount = 0; return true; } return false; } function _releaseAllQueues(sendType, sendReason) { _clearScheduledTimer(); if (_flushCallbackTimerId) { _timeoutWrapper.clear(_flushCallbackTimerId); _flushCallbackTimerId = null; } if (!_paused) { _sendEventsForLatencyAndAbove(1 , sendType, sendReason); } } function _clearQueues() { _batchQueues[4 ] = { batches: [], iKeyMap: {} }; _batchQueues[3 ] = { batches: [], iKeyMap: {} }; _batchQueues[2 ] = { batches: [], iKeyMap: {} }; _batchQueues[1 ] = { batches: [], iKeyMap: {} }; } function _getEventBatch(iKey, latency, create) { var batchQueue = _batchQueues[latency]; if (!batchQueue) { latency = 1 ; batchQueue = _batchQueues[latency]; } var eventBatch = batchQueue.iKeyMap[iKey]; if (!eventBatch && create) { eventBatch = EventBatch.create(iKey); batchQueue.batches.push(eventBatch); batchQueue.iKeyMap[iKey] = eventBatch; } return eventBatch; } function _performAutoFlush(isAsync, doFlush) { if (_httpManager.canSendRequest() && !_currentBackoffCount) { if (_autoFlushEventsLimit > 0 && _queueSize > _autoFlushEventsLimit) { doFlush = true; } if (doFlush && _flushCallbackTimerId == null) { _self.flush(isAsync, null, 20 ); } } } function _addEventToProperQueue(event, append) { if (_optimizeObject) { event = optimizeObject(event); } var latency = event.latency; var eventBatch = _getEventBatch(event.iKey, latency, true); if (eventBatch.addEvent(event)) { if (latency !== 4 ) { _queueSize++; if (append && event.sendAttempt === 0) { _performAutoFlush(!event.sync, _autoFlushBatchLimit > 0 && eventBatch.count() >= _autoFlushBatchLimit); } } else { _immediateQueueSize++; } return true; } return false; } function _dropEventWithLatencyOrLess(iKey, latency, currentLatency, dropNumber) { while (currentLatency <= latency) { var eventBatch = _getEventBatch(iKey, latency, true); if (eventBatch && eventBatch.count() > 0) { var droppedEvents = eventBatch.split(0, dropNumber); var droppedCount = droppedEvents.count(); if (droppedCount > 0) { if (currentLatency === 4 ) { _immediateQueueSize -= droppedCount; } else { _queueSize -= droppedCount; } _notifyBatchEvents(strEventsDiscarded, [droppedEvents], EventsDiscardedReason.QueueFull); return true; } } currentLatency++; } _resetQueueCounts(); return false; } function _resetQueueCounts() { var immediateQueue = 0; var normalQueue = 0; var _loop_1 = function (latency) { var batchQueue = _batchQueues[latency]; if (batchQueue && batchQueue.batches) { arrForEach(batchQueue.batches, function (theBatch) { if (latency === 4 ) { immediateQueue += theBatch.count(); } else { normalQueue += theBatch.count(); } }); } }; for (var latency = 1 ; latency <= 4 ; latency++) { _loop_1(latency); } _queueSize = normalQueue; _immediateQueueSize = immediateQueue; } function _queueBatches(latency, sendType, sendReason) { var eventsQueued = false; var isAsync = sendType === 0 ; if (!isAsync || _httpManager.canSendRequest()) { doPerf(_self.core, function () { return "PostChannel._queueBatches"; }, function () { var droppedEvents = []; var latencyToProcess = 4 ; while (latencyToProcess >= latency) { var batchQueue = _batchQueues[latencyToProcess]; if (batchQueue && batchQueue.batches && batchQueue.batches.length > 0) { arrForEach(batchQueue.batches, function (theBatch) { if (!_httpManager.addBatch(theBatch)) { droppedEvents = droppedEvents.concat(theBatch.events()); } else { eventsQueued = eventsQueued || (theBatch && theBatch.count() > 0); } if (latencyToProcess === 4 ) { _immediateQueueSize -= theBatch.count(); } else { _queueSize -= theBatch.count(); } }); batchQueue.batches = []; batchQueue.iKeyMap = {}; } latencyToProcess--; } if (droppedEvents.length > 0) { _notifyEvents(strEventsDiscarded, droppedEvents, EventsDiscardedReason.KillSwitch); } if (eventsQueued && _delayedBatchSendLatency >= latency) { _delayedBatchSendLatency = -1; _delayedBatchReason = 0 ; } }, function () { return ({ latency: latency, sendType: sendType, sendReason: sendReason }); }, !isAsync); } else { _delayedBatchSendLatency = _delayedBatchSendLatency >= 0 ? Math.min(_delayedBatchSendLatency, latency) : latency; _delayedBatchReason = Math.max(_delayedBatchReason, sendReason); } return eventsQueued; } function _flushImpl(callback, sendReason) { _sendEventsForLatencyAndAbove(1 , 0 , sendReason); _resetQueueCounts(); _waitForIdleManager(function () { if (callback) { callback(); } if (_flushCallbackQueue.length > 0) { _flushCallbackTimerId = _createTimer(function () { _flushCallbackTimerId = null; _flushImpl(_flushCallbackQueue.shift(), sendReason); }, 0); } else { _flushCallbackTimerId = null; _scheduleTimer(); } }); } function _waitForIdleManager(callback) { if (_httpManager.isCompletelyIdle()) { callback(); } else { _flushCallbackTimerId = _createTimer(function () { _flushCallbackTimerId = null; _waitForIdleManager(callback); }, FlushCheckTimer); } } function _resetTransmitProfiles() { _clearScheduledTimer(); _initializeProfiles(); _currentProfile = RT_PROFILE; _scheduleTimer(); } function _initializeProfiles() { _profiles = {}; _profiles[RT_PROFILE] = [2, 1, 0]; _profiles[NRT_PROFILE] = [6, 3, 0]; _profiles[BE_PROFILE] = [18, 9, 0]; } function _requeueEvents(batches, reason) { var droppedEvents = []; var maxSendAttempts = _maxEventSendAttempts; if (_isPageUnloadTriggered) { maxSendAttempts = _maxUnloadEventSendAttempts; } arrForEach(batches, function (theBatch) { if (theBatch && theBatch.count() > 0) { arrForEach(theBatch.events(), function (theEvent) { if (theEvent) { if (theEvent.sync) { theEvent.latency = 4 ; theEvent.sync = false; } if (theEvent.sendAttempt < maxSendAttempts) { setProcessTelemetryTimings(theEvent, _self.identifier); _addEventToQueues(theEvent, false); } else { droppedEvents.push(theEvent); } } }); } }); if (droppedEvents.length > 0) { _notifyEvents(strEventsDiscarded, droppedEvents, EventsDiscardedReason.NonRetryableStatus); } if (_isPageUnloadTriggered) { _releaseAllQueues(2 , 2 ); } } function _callNotification(evtName, theArgs) { var manager = (_self._notificationManager || {}); var notifyFunc = manager[evtName]; if (notifyFunc) { try { notifyFunc.apply(manager, theArgs); } catch (e) { _throwInternal(_self.diagLog(), 1 , 74 , evtName + " notification failed: " + e); } } } function _notifyEvents(evtName, theEvents) { var extraArgs = []; for (var _i = 2; _i < arguments.length; _i++) { extraArgs[_i - 2] = arguments[_i]; } if (theEvents && theEvents.length > 0) { _callNotification(evtName, [theEvents].concat(extraArgs)); } } function _notifyBatchEvents(evtName, batches) { var extraArgs = []; for (var _i = 2; _i < arguments.length; _i++) { extraArgs[_i - 2] = arguments[_i]; } if (batches && batches.length > 0) { arrForEach(batches, function (theBatch) { if (theBatch && theBatch.count() > 0) { _callNotification(evtName, [theBatch.events()].concat(extraArgs)); } }); } } function _sendingEvent(batches, reason, isSyncRequest) { if (batches && batches.length > 0) { _callNotification("eventsSendRequest", [(reason >= 1000 && reason <= 1999 ? reason - 1000 : 0 ), isSyncRequest !== true]); } } function _eventsSentEvent(batches, reason) { _notifyBatchEvents("eventsSent", batches, reason); _scheduleTimer(); } function _eventsDropped(batches, reason) { _notifyBatchEvents(strEventsDiscarded, batches, (reason >= 8000 && reason <= 8999 ? reason - 8000 : EventsDiscardedReason.Unknown)); } function _eventsResponseFail(batches) { _notifyBatchEvents(strEventsDiscarded, batches, EventsDiscardedReason.NonRetryableStatus); _scheduleTimer(); } function _otherEvent(batches, reason) { _notifyBatchEvents(strEventsDiscarded, batches, EventsDiscardedReason.Unknown); _scheduleTimer(); } function _setAutoLimits() { if (!_config || !_config.disableAutoBatchFlushLimit) { _autoFlushBatchLimit = Math.max(MaxNumberEventPerBatch * (MaxConnections + 1), _queueSizeLimit / 6); } else { _autoFlushBatchLimit = 0; } } objDefineAccessors(_self, "_setTimeoutOverride", function () { return _timeoutWrapper.set; }, function (value) { _timeoutWrapper = createTimeoutWrapper(value, _timeoutWrapper.clear); }); objDefineAccessors(_self, "_clearTimeoutOverride", function () { return _timeoutWrapper.clear; }, function (value) { _timeoutWrapper = createTimeoutWrapper(_timeoutWrapper.set, value); }); }); return _this; } PostChannel.__ieDyn=1; return PostChannel; }(BaseTelemetryPlugin)); var PostChannel$1 = PostChannel; exports.BE_PROFILE = BE_PROFILE; exports.NRT_PROFILE = NRT_PROFILE; exports.PostChannel = PostChannel$1; exports.RT_PROFILE = RT_PROFILE; }));