{"version":3,"file":"chunks/af37c4ddc00ec5.js","mappings":"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","sources":["webpack:///./node_modules/@atlassian/ufo-dropbox-ttvc/node_modules/bind-event-listener/dist/bind-all.js","webpack:///./node_modules/@atlassian/ufo-dropbox-ttvc/node_modules/bind-event-listener/dist/bind.js","webpack:///./node_modules/@atlassian/ufo-dropbox-ttvc/node_modules/bind-event-listener/dist/index.js","webpack:///./node_modules/@atlassian/ufo-hidden-timing/node_modules/bind-event-listener/dist/bind-all.js","webpack:///./node_modules/@atlassian/ufo-hidden-timing/node_modules/bind-event-listener/dist/bind.js","webpack:///./node_modules/@atlassian/ufo-hidden-timing/node_modules/bind-event-listener/dist/index.js","webpack:///./node_modules/@atlassian/ufo-interaction-metrics-init/node_modules/scheduler/cjs/scheduler.production.min.js","webpack:///./node_modules/@atlassian/ufo-interaction-metrics-init/node_modules/scheduler/index.js","webpack:///./node_modules/@atlassian/ufo-vc/node_modules/bind-event-listener/dist/bind-all.js","webpack:///./node_modules/@atlassian/ufo-vc/node_modules/bind-event-listener/dist/bind.js","webpack:///./node_modules/@atlassian/ufo-vc/node_modules/bind-event-listener/dist/index.js","webpack:///./node_modules/@segment/isodate-traverse/lib/index.js","webpack:///./node_modules/@segment/isodate/lib/index.js","webpack:///./node_modules/bowser-ultralight/es5.js","webpack:///./node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/_lib/requiredArgs/index.js","webpack:///./node_modules/date-fns/esm/startOfDay/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarDays/index.js","webpack:///./node_modules/date-fns/esm/differenceInDays/index.js","webpack:///./node_modules/date-fns/esm/toDate/index.js","webpack:///./node_modules/decode-uri-component/index.js","webpack:///./node_modules/filter-obj/index.js","webpack:///./node_modules/js-cookie/src/js.cookie.js","webpack:///./node_modules/memoize-one/dist/memoize-one.esm.js","webpack:///./node_modules/query-string/index.js","webpack:///./node_modules/@atlassian/ufo-additional-payload/dist/es2019/utils/lighthouse-metrics/cls/index.js","webpack:///./node_modules/@atlassian/ufo-additional-payload/dist/es2019/utils/lighthouse-metrics/const.js","webpack:///./node_modules/@atlassian/ufo-additional-payload/dist/es2019/utils/lighthouse-metrics/utils/buffer/index.js","webpack:///./node_modules/@atlassian/ufo-additional-payload/dist/es2019/utils/lighthouse-metrics/utils/observer/index.js","webpack:///./node_modules/@atlassian/ufo-additional-payload/dist/es2019/utils/lighthouse-metrics/index.js","webpack:///./node_modules/@atlassian/ufo-additional-payload/dist/es2019/utils/lighthouse-metrics/tbt/index.js","webpack:///./node_modules/@atlassian/ufo-coinflip/dist/es2019/index.js","webpack:///./node_modules/@atlassian/ufo-config/dist/es2019/index.js","webpack:///./node_modules/@atlassian/ufo-dropbox-ttvc/dist/es2019/utils/constants.js","webpack:///./node_modules/@atlassian/ufo-dropbox-ttvc/dist/es2019/utils/logger.js","webpack:///./node_modules/@atlassian/ufo-dropbox-ttvc/dist/es2019/utils/in-viewport-image-observer.js","webpack:///./node_modules/@atlassian/ufo-dropbox-ttvc/dist/es2019/utils/in-viewport-mutation-observer.js","webpack:///./node_modules/@atlassian/ufo-dropbox-ttvc/dist/es2019/utils/navigation-entry.js","webpack:///./node_modules/@atlassian/ufo-dropbox-ttvc/dist/es2019/utils/network-idle-observable.js","webpack:///./node_modules/@atlassian/ufo-dropbox-ttvc/dist/es2019/utils/request-all-idle-callback.js","webpack:///./node_modules/@atlassian/ufo-dropbox-ttvc/dist/es2019/utils/request-idle-callback.js","webpack:///./node_modules/@atlassian/ufo-dropbox-ttvc/dist/es2019/utils/wait-for-page-load.js","webpack:///./node_modules/@atlassian/ufo-dropbox-ttvc/dist/es2019/utils/visually-complete-calculator.js","webpack:///./node_modules/@atlassian/ufo-dropbox-ttvc/dist/es2019/index.js","webpack:///./node_modules/@atlassian/ufo-experience-trace-id-context/dist/es2019/index.js","webpack:///./node_modules/@atlassian/ufo-hidden-timing/dist/es2019/index.js","webpack:///./node_modules/@atlassian/ufo-interaction-id-context/dist/es2019/index.js","webpack:///./node_modules/@atlassian/ufo-feature-flags-accessed/dist/es2019/index.js","webpack:///./node_modules/@atlassian/ufo-interaction-metrics/dist/es2019/common/constants.js","webpack:///./node_modules/@atlassian/ufo-interaction-metrics/dist/es2019/index.js","webpack:///./node_modules/@atlassian/ufo-route-name-context/dist/es2019/index.js","webpack:///./node_modules/@atlassian/ufo-vc/dist/es2019/vc-observer/observers/index.js","webpack:///./node_modules/@atlassian/ufo-vc/dist/es2019/vc-observer/index.js","webpack:///./node_modules/@atlassian/ufo-vc/dist/es2019/vc-dev-tools/replay/index.js","webpack:///./node_modules/@atlassian/ufo-vc/dist/es2019/index.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/pageVisibility.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/performance.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/apdexEvent.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/createGetter.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/eventBuilder.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/eventDelay/defaults.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/objectUtils.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/eventDelay/compressionRule.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/eventDelay/eventCompressor.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/eventDelay/eventDelayQueue.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/eventDelay/types.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/eventDelay/eventDelayCoordinator.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/localstorage-retry/types.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/localstorage-retry/utils.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/localstorage-retry/purgeOrphanedQueues.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/localstorage-retry/reclaimEvents.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resiliencedb/constants.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resiliencedb/errors/NoIndexedDbError.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resiliencedb/errors/AbandonWriteError.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resiliencedb/errors/CallbackProcessingError.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resiliencedb/errors/InvalidPolicyError.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resiliencedb/errors/util.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resiliencedb/defaults.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resiliencedb/util.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resiliencedb/IndexedDbEventCountGuard.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resiliencedb/IndexedDbConnector.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resiliencedb/MemoryDbEventCountGuard.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resiliencedb/MemoryDb.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resilienceQueue/types.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resilienceQueue/Metrics.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resilienceQueue/NetworkStatus.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resilienceQueue/scheduler/CallbackWithTimeout.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resilienceQueue/scheduler/types.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resilienceQueue/scheduler/Scheduler.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resilienceQueue/PullBatchableQueue.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resiliencedb/DbDelegator.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/integration/types.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/xid/AttachXID.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/integration/sendEvents.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/cookie/AllAnalyticsCookies.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/storage/InMemoryStorage.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/storage/SafeStorage.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/storage/SafeLocalStorage.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/cookie/localStorageAlt.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/cookie/util.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/cookie/cookieWrapper.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/integration/user.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/integration/util.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/integration/eventProcessor.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/integration/defaults.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/resilienceQueue/index.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/urlUtils.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/originTracing.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/selectHost.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/sessionTracking.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/storage/SafeSessionStorage.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/tabTracking.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/taskSessionStore.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/testingCache.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/uiViewedEvent.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/wrapCallback.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/xid/enums.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/analyticsWebClient.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/xid/XIDPromise.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/xid/constants.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/analyticsWebTypes.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/eventValidation.js","webpack:///./node_modules/@atlassiansox/analytics-web-client/dist/es2019/util/object-utils.js","webpack:///./node_modules/split-on-first/index.js","webpack:///./node_modules/strict-uri-encode/index.js","webpack:///./node_modules/@atlassian/ufo-experimental/dist/es2019/platform-client/core/experience/experience-types.js","webpack:///./node_modules/@atlassian/ufo-experimental/dist/es2019/observer/visibility-change-observer.js","webpack:///./node_modules/@atlassian/ufo-experimental/dist/es2019/common/utils/windowHelper.js","webpack:///./node_modules/@atlassian/ufo-experimental/dist/es2019/logger/index.js","webpack:///./node_modules/@atlassian/ufo-experimental/dist/es2019/types.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/types.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/event-stream/event-stream.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/utils/is-initial-page-load.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/performance/plugins/navigation-metrics.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/performance/plugins/timings/app/index.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/performance/plugins/timings/app/custom.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/performance/plugins/timings/app/ssr.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/utils/window-helper.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/performance/plugins/timings/bundle-eval.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/performance/resource-timings-buffer/index.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/performance/plugins/timings/resource.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/performance/index.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/performance/plugins/page-visible-state.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/plugins/app/version.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/plugins/browser.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/plugins/cpus.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/plugins/feature-flags/index.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/plugins/memory.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/plugins/ssr/feature-flags.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/route/index.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/publisher.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/buildVersion.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/plugins/network.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/plugins/app/framework.js","webpack:///./node_modules/@atlassian/ufo/dist/es2019/core/publisher/plugins/ssr/success.js","webpack:///./node_modules/@atlassian/ufo-experimental/dist/es2019/global-stream-buffer/index.js","webpack:///./node_modules/@atlassian/ufo-interaction-metrics-init/dist/es2019/index.js","webpack:///./node_modules/@atlassian/ufo-trace-pageload/dist/es2019/index.js","webpack:///./resources/js/analytics/client.ts","webpack:///./resources/js/analytics/utils.ts","webpack:///./resources/js/react-ufo/init-ufo.ts","webpack:///./node_modules/@atlassian/ufo-route-name/dist/es2019/index.js","webpack:///./node_modules/uuid/index.js","webpack:///./node_modules/uuid/lib/bytesToUuid.js","webpack:///./node_modules/uuid/lib/rng-browser.js","webpack:///./node_modules/uuid/v1.js","webpack:///./node_modules/uuid/v4.js","webpack:///./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack:///./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack:///./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack:///./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack:///./node_modules/date-fns/node_modules/@babel/runtime/helpers/esm/typeof.js"],"sourcesContent":["\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bindAll = void 0;\nvar bind_1 = require(\"./bind\");\nfunction toOptions(value) {\n if (typeof value === 'undefined') {\n return undefined;\n }\n if (typeof value === 'boolean') {\n return {\n capture: value,\n };\n }\n return value;\n}\nfunction getBinding(original, sharedOptions) {\n if (sharedOptions == null) {\n return original;\n }\n var binding = __assign(__assign({}, original), { options: __assign(__assign({}, toOptions(sharedOptions)), toOptions(original.options)) });\n return binding;\n}\nfunction bindAll(target, bindings, sharedOptions) {\n var unbinds = bindings.map(function (original) {\n var binding = getBinding(original, sharedOptions);\n return (0, bind_1.bind)(target, binding);\n });\n return function unbindAll() {\n unbinds.forEach(function (unbind) { return unbind(); });\n };\n}\nexports.bindAll = bindAll;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bind = void 0;\nfunction bind(target, _a) {\n var type = _a.type, listener = _a.listener, options = _a.options;\n target.addEventListener(type, listener, options);\n return function unbind() {\n target.removeEventListener(type, listener, options);\n };\n}\nexports.bind = bind;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bindAll = exports.bind = void 0;\nvar bind_1 = require(\"./bind\");\nObject.defineProperty(exports, \"bind\", { enumerable: true, get: function () { return bind_1.bind; } });\nvar bind_all_1 = require(\"./bind-all\");\nObject.defineProperty(exports, \"bindAll\", { enumerable: true, get: function () { return bind_all_1.bindAll; } });\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bindAll = void 0;\nvar bind_1 = require(\"./bind\");\nfunction toOptions(value) {\n if (typeof value === 'undefined') {\n return undefined;\n }\n if (typeof value === 'boolean') {\n return {\n capture: value,\n };\n }\n return value;\n}\nfunction getBinding(original, sharedOptions) {\n if (sharedOptions == null) {\n return original;\n }\n var binding = __assign(__assign({}, original), { options: __assign(__assign({}, toOptions(sharedOptions)), toOptions(original.options)) });\n return binding;\n}\nfunction bindAll(target, bindings, sharedOptions) {\n var unbinds = bindings.map(function (original) {\n var binding = getBinding(original, sharedOptions);\n return (0, bind_1.bind)(target, binding);\n });\n return function unbindAll() {\n unbinds.forEach(function (unbind) { return unbind(); });\n };\n}\nexports.bindAll = bindAll;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bind = void 0;\nfunction bind(target, _a) {\n var type = _a.type, listener = _a.listener, options = _a.options;\n target.addEventListener(type, listener, options);\n return function unbind() {\n target.removeEventListener(type, listener, options);\n };\n}\nexports.bind = bind;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.bindAll = exports.bind = void 0;\nvar bind_1 = require(\"./bind\");\nObject.defineProperty(exports, \"bind\", { enumerable: true, get: function () { return bind_1.bind; } });\nvar bind_all_1 = require(\"./bind-all\");\nObject.defineProperty(exports, \"bindAll\", { enumerable: true, get: function () { return bind_all_1.bindAll; } });\n","/** @license React v0.19.1\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var f,g,h,k,l;\nif(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var p=null,q=null,t=function(){if(null!==p)try{var a=exports.unstable_now();p(!0,a);p=null}catch(b){throw setTimeout(t,0),b;}},u=Date.now();exports.unstable_now=function(){return Date.now()-u};f=function(a){null!==p?setTimeout(f,0,a):(p=a,setTimeout(t,0))};g=function(a,b){q=setTimeout(a,b)};h=function(){clearTimeout(q)};k=function(){return!1};l=exports.unstable_forceFrameRate=function(){}}else{var w=window.performance,x=window.Date,\ny=window.setTimeout,z=window.clearTimeout;if(\"undefined\"!==typeof console){var A=window.cancelAnimationFrame;\"function\"!==typeof window.requestAnimationFrame&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\");\"function\"!==typeof A&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\")}if(\"object\"===\ntypeof w&&\"function\"===typeof w.now)exports.unstable_now=function(){return w.now()};else{var B=x.now();exports.unstable_now=function(){return x.now()-B}}var C=!1,D=null,E=-1,F=5,G=0;k=function(){return exports.unstable_now()>=G};l=function(){};exports.unstable_forceFrameRate=function(a){0>a||125>>1,e=a[d];if(void 0!==e&&0K(n,c))void 0!==r&&0>K(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>K(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function K(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var N=[],O=[],P=1,Q=null,R=3,S=!1,T=!1,U=!1;\nfunction V(a){for(var b=L(O);null!==b;){if(null===b.callback)M(O);else if(b.startTime<=a)M(O),b.sortIndex=b.expirationTime,J(N,b);else break;b=L(O)}}function W(a){U=!1;V(a);if(!T)if(null!==L(N))T=!0,f(X);else{var b=L(O);null!==b&&g(W,b.startTime-a)}}\nfunction X(a,b){T=!1;U&&(U=!1,h());S=!0;var c=R;try{V(b);for(Q=L(N);null!==Q&&(!(Q.expirationTime>b)||a&&!k());){var d=Q.callback;if(null!==d){Q.callback=null;R=Q.priorityLevel;var e=d(Q.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?Q.callback=e:Q===L(N)&&M(N);V(b)}else M(N);Q=L(N)}if(null!==Q)var m=!0;else{var n=L(O);null!==n&&g(W,n.startTime-b);m=!1}return m}finally{Q=null,R=c,S=!1}}\nfunction Y(a){switch(a){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1E4;default:return 5E3}}var Z=l;exports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){T||S||(T=!0,f(X))};\nexports.unstable_getCurrentPriorityLevel=function(){return R};exports.unstable_getFirstCallbackNode=function(){return L(N)};exports.unstable_next=function(a){switch(R){case 1:case 2:case 3:var b=3;break;default:b=R}var c=R;R=b;try{return a()}finally{R=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=Z;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=R;R=a;try{return b()}finally{R=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();if(\"object\"===typeof c&&null!==c){var e=c.delay;e=\"number\"===typeof e&&0d?(a.sortIndex=e,J(O,a),null===L(N)&&a===L(O)&&(U?h():U=!0,g(W,e-d))):(a.sortIndex=c,J(N,a),T||S||(T=!0,f(X)));return a};\nexports.unstable_shouldYield=function(){var a=exports.unstable_now();V(a);var b=L(N);return b!==Q&&null!==Q&&null!==b&&null!==b.callback&&b.startTime<=a&&b.expirationTime=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function i(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=new Array(r);t0&&t[1]||\"\"},s=function(e,r){var t=r.match(e);return t&&t.length>1&&t[2]||\"\"},u=/version\\/(\\d+(\\.?_?\\d+)+)/i,a=function(e,r){void 0===e&&(e=[]);for(var t,i=n(e);!(t=i()).done;){var s=t.value,u=o(s,r);if(u)return u}return null},d=[{test:[/googlebot/i],describe:function(e){return{name:\"Googlebot\",version:a([/googlebot\\/(\\d+(\\.\\d+))/i,u],e)}}},{test:[/opera/i],describe:function(e){return{name:\"Opera\",version:a([u,/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i],e)}}},{test:[/opr\\/|opios/i],describe:function(e){return{name:\"Opera\",version:a([/(?:opr|opios)[\\s/](\\S+)/i,u],e)}}},{test:[/SamsungBrowser/i],describe:function(e){return{name:\"Samsung Internet for Android\",version:a([u,/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i],e)}}},{test:[/Whale/i],describe:function(e){return{name:\"NAVER Whale Browser\",version:a([u,/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i],e)}}},{test:[/coast/i],describe:function(e){return{name:\"Opera Coast\",version:a([u,/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i],e)}}},{test:[/opt\\/\\d+(?:.?_?\\d+)+/i],describe:function(e){return{name:\"Opera Touch\",version:a([/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i,u],e)}}},{test:[/msie|trident/i],describe:function(e){return{name:\"Internet Explorer\",version:a([/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i],e)}}},{test:[/\\sedg\\//i],describe:function(e){return{name:\"Microsoft Edge\",version:a([/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i],e)}}},{test:[/edg([ea]|ios)/i],describe:function(e){return{name:\"Microsoft Edge\",version:s(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i,e)}}},{test:[/vivaldi/i],describe:function(e){return{name:\"Vivaldi\",version:a([/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i],e)}}},{test:[/tizen/i],describe:function(e){return{name:\"Tizen\",version:a([/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i,u],e)}}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){return{name:\"Firefox\",version:a([/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i],e)}}},{test:[/electron/i],describe:function(e){return{name:\"Electron\",version:a([/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i],e)}}},{test:[/chromium/i],describe:function(e){return{name:\"Chromium\",version:a([/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i,u],e)}}},{test:[/chrome|crios|crmo/i],describe:function(e){return{name:\"Chrome\",version:a([/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i],e)}}},{test:[/GSA/i],describe:function(e){return{name:\"Google Search\",version:a([/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i],e)}}},{test:function(e){var r=!e.test(/like android/i),t=e.test(/android/i);return r&&t},describe:function(e){return{name:\"Android Browser\",version:a([u],e)}}},{test:[/safari|applewebkit/i],describe:function(e){return{name:\"Safari\",version:a([u],e)}}},{test:[/.*/i],describe:function(e){var r=-1!==e.search(\"\\\\(\")?/^(.*)\\/(.*)[ \\t]\\((.*)/:/^(.*)\\/(.*) /;return{name:o(r,e),version:s(r,e)}}}];r.default=d,e.exports=r.default}])}));","/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds(date) {\n var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));\n utcDate.setUTCFullYear(date.getFullYear());\n return date.getTime() - utcDate.getTime();\n}","export default function requiredArgs(required, args) {\n if (args.length < required) {\n throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');\n }\n}","import toDate from \"../toDate/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport default function startOfDay(dirtyDate) {\n requiredArgs(1, arguments);\n var date = toDate(dirtyDate);\n date.setHours(0, 0, 0, 0);\n return date;\n}","import getTimezoneOffsetInMilliseconds from \"../_lib/getTimezoneOffsetInMilliseconds/index.js\";\nimport startOfDay from \"../startOfDay/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\nvar MILLISECONDS_IN_DAY = 86400000;\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport default function differenceInCalendarDays(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var startOfDayLeft = startOfDay(dirtyDateLeft);\n var startOfDayRight = startOfDay(dirtyDateRight);\n var timestampLeft = startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft);\n var timestampRight = startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight);\n\n // Round the number of days to the nearest integer\n // because the number of milliseconds in a day is not constant\n // (e.g. it's different in the day of the daylight saving time clock shift)\n return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY);\n}","import toDate from \"../toDate/index.js\";\nimport differenceInCalendarDays from \"../differenceInCalendarDays/index.js\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\"; // Like `compareAsc` but uses local time not UTC, which is needed\n// for accurate equality comparisons of UTC timestamps that end up\n// having the same representation in local time, e.g. one hour before\n// DST ends vs. the instant that DST ends.\nfunction compareLocalAsc(dateLeft, dateRight) {\n var diff = dateLeft.getFullYear() - dateRight.getFullYear() || dateLeft.getMonth() - dateRight.getMonth() || dateLeft.getDate() - dateRight.getDate() || dateLeft.getHours() - dateRight.getHours() || dateLeft.getMinutes() - dateRight.getMinutes() || dateLeft.getSeconds() - dateRight.getSeconds() || dateLeft.getMilliseconds() - dateRight.getMilliseconds();\n if (diff < 0) {\n return -1;\n } else if (diff > 0) {\n return 1;\n // Return 0 if diff is 0; return NaN if diff is NaN\n } else {\n return diff;\n }\n}\n\n/**\n * @name differenceInDays\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full day periods between two dates. Fractional days are\n * truncated towards zero.\n *\n * One \"full day\" is the distance between a local time in one day to the same\n * local time on the next or previous day. A full day can sometimes be less than\n * or more than 24 hours if a daylight savings change happens between two dates.\n *\n * To ignore DST and only measure exact 24-hour periods, use this instead:\n * `Math.floor(differenceInHours(dateLeft, dateRight)/24)|0`.\n *\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full days according to the local timezone\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n * // How many full days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 0\n * // How many full days are between\n * // 1 March 2020 0:00 and 1 June 2020 0:00 ?\n * // Note: because local time is used, the\n * // result will always be 92 days, even in\n * // time zones where DST starts and the\n * // period has only 92*24-1 hours.\n * const result = differenceInDays(\n * new Date(2020, 5, 1),\n * new Date(2020, 2, 1)\n * )\n//=> 92\n */\nexport default function differenceInDays(dirtyDateLeft, dirtyDateRight) {\n requiredArgs(2, arguments);\n var dateLeft = toDate(dirtyDateLeft);\n var dateRight = toDate(dirtyDateRight);\n var sign = compareLocalAsc(dateLeft, dateRight);\n var difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight));\n dateLeft.setDate(dateLeft.getDate() - sign * difference);\n\n // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n // If so, result must be decreased by 1 in absolute value\n var isLastDayNotFull = Number(compareLocalAsc(dateLeft, dateRight) === -sign);\n var result = sign * (difference - isLastDayNotFull);\n // Prevent negative zero\n return result === 0 ? 0 : result;\n}","import _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport requiredArgs from \"../_lib/requiredArgs/index.js\";\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport default function toDate(argument) {\n requiredArgs(1, arguments);\n var argStr = Object.prototype.toString.call(argument);\n\n // Clone the date\n if (argument instanceof Date || _typeof(argument) === 'object' && argStr === '[object Date]') {\n // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n return new Date(argument.getTime());\n } else if (typeof argument === 'number' || argStr === '[object Number]') {\n return new Date(argument);\n } else {\n if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn(\"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments\");\n // eslint-disable-next-line no-console\n console.warn(new Error().stack);\n }\n return new Date(NaN);\n }\n}","'use strict';\nvar token = '%[a-f0-9]{2}';\nvar singleMatcher = new RegExp('(' + token + ')|([^%]+?)', 'gi');\nvar multiMatcher = new RegExp('(' + token + ')+', 'gi');\n\nfunction decodeComponents(components, split) {\n\ttry {\n\t\t// Try to decode the entire string first\n\t\treturn [decodeURIComponent(components.join(''))];\n\t} catch (err) {\n\t\t// Do nothing\n\t}\n\n\tif (components.length === 1) {\n\t\treturn components;\n\t}\n\n\tsplit = split || 1;\n\n\t// Split the array in 2 parts\n\tvar left = components.slice(0, split);\n\tvar right = components.slice(split);\n\n\treturn Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));\n}\n\nfunction decode(input) {\n\ttry {\n\t\treturn decodeURIComponent(input);\n\t} catch (err) {\n\t\tvar tokens = input.match(singleMatcher) || [];\n\n\t\tfor (var i = 1; i < tokens.length; i++) {\n\t\t\tinput = decodeComponents(tokens, i).join('');\n\n\t\t\ttokens = input.match(singleMatcher) || [];\n\t\t}\n\n\t\treturn input;\n\t}\n}\n\nfunction customDecodeURIComponent(input) {\n\t// Keep track of all the replacements and prefill the map with the `BOM`\n\tvar replaceMap = {\n\t\t'%FE%FF': '\\uFFFD\\uFFFD',\n\t\t'%FF%FE': '\\uFFFD\\uFFFD'\n\t};\n\n\tvar match = multiMatcher.exec(input);\n\twhile (match) {\n\t\ttry {\n\t\t\t// Decode as big chunks as possible\n\t\t\treplaceMap[match[0]] = decodeURIComponent(match[0]);\n\t\t} catch (err) {\n\t\t\tvar result = decode(match[0]);\n\n\t\t\tif (result !== match[0]) {\n\t\t\t\treplaceMap[match[0]] = result;\n\t\t\t}\n\t\t}\n\n\t\tmatch = multiMatcher.exec(input);\n\t}\n\n\t// Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else\n\treplaceMap['%C2'] = '\\uFFFD';\n\n\tvar entries = Object.keys(replaceMap);\n\n\tfor (var i = 0; i < entries.length; i++) {\n\t\t// Replace all decoded components\n\t\tvar key = entries[i];\n\t\tinput = input.replace(new RegExp(key, 'g'), replaceMap[key]);\n\t}\n\n\treturn input;\n}\n\nmodule.exports = function (encodedURI) {\n\tif (typeof encodedURI !== 'string') {\n\t\tthrow new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');\n\t}\n\n\ttry {\n\t\tencodedURI = encodedURI.replace(/\\+/g, ' ');\n\n\t\t// Try the built in decoder first\n\t\treturn decodeURIComponent(encodedURI);\n\t} catch (err) {\n\t\t// Fallback to a more advanced decoder\n\t\treturn customDecodeURIComponent(encodedURI);\n\t}\n};\n","'use strict';\nmodule.exports = function (obj, predicate) {\n\tvar ret = {};\n\tvar keys = Object.keys(obj);\n\tvar isArr = Array.isArray(predicate);\n\n\tfor (var i = 0; i < keys.length; i++) {\n\t\tvar key = keys[i];\n\t\tvar val = obj[key];\n\n\t\tif (isArr ? predicate.indexOf(key) !== -1 : predicate(key, val, obj)) {\n\t\t\tret[key] = val;\n\t\t}\n\t}\n\n\treturn ret;\n};\n","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction decode (s) {\n\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api() {}\n\n\t\tfunction set (key, value, attributes) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tattributes = extend({\n\t\t\t\tpath: '/'\n\t\t\t}, api.defaults, attributes);\n\n\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t}\n\n\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\ttry {\n\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\tvalue = result;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tvalue = converter.write ?\n\t\t\t\tconverter.write(value, key) :\n\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\n\t\t\tvar stringifiedAttributes = '';\n\t\t\tfor (var attributeName in attributes) {\n\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t// ...\n\t\t\t\t// 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t// character:\n\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t// ...\n\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t}\n\n\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t}\n\n\t\tfunction get (key, json) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar jar = {};\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all.\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\tdecode(cookie);\n\n\t\t\t\t\tif (json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tjar[name] = cookie;\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn key ? jar[key] : jar;\n\t\t}\n\n\t\tapi.set = set;\n\t\tapi.get = function (key) {\n\t\t\treturn get(key, false /* read as raw */);\n\t\t};\n\t\tapi.getJSON = function (key) {\n\t\t\treturn get(key, true /* read as json */);\n\t\t};\n\t\tapi.remove = function (key, attributes) {\n\t\t\tset(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.defaults = {};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","var safeIsNaN = Number.isNaN ||\n function ponyfill(value) {\n return typeof value === 'number' && value !== value;\n };\nfunction isEqual(first, second) {\n if (first === second) {\n return true;\n }\n if (safeIsNaN(first) && safeIsNaN(second)) {\n return true;\n }\n return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n if (newInputs.length !== lastInputs.length) {\n return false;\n }\n for (var i = 0; i < newInputs.length; i++) {\n if (!isEqual(newInputs[i], lastInputs[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n if (isEqual === void 0) { isEqual = areInputsEqual; }\n var cache = null;\n function memoized() {\n var newArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n newArgs[_i] = arguments[_i];\n }\n if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) {\n return cache.lastResult;\n }\n var lastResult = resultFn.apply(this, newArgs);\n cache = {\n lastResult: lastResult,\n lastArgs: newArgs,\n lastThis: this,\n };\n return lastResult;\n }\n memoized.clear = function clear() {\n cache = null;\n };\n return memoized;\n}\n\nexport { memoizeOne as default };\n","'use strict';\nconst strictUriEncode = require('strict-uri-encode');\nconst decodeComponent = require('decode-uri-component');\nconst splitOnFirst = require('split-on-first');\nconst filterObject = require('filter-obj');\n\nconst isNullOrUndefined = value => value === null || value === undefined;\n\nconst encodeFragmentIdentifier = Symbol('encodeFragmentIdentifier');\n\nfunction encoderForArrayFormat(options) {\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tconst index = result.length;\n\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[', index, ']'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\t...result,\n\t\t\t\t\t[encode(key, options), '[', encode(index, options), ']=', encode(value, options)].join('')\n\t\t\t\t];\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), '[]'].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '[]=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'colon-list-separator':\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, [encode(key, options), ':list='].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), ':list=', encode(value, options)].join('')];\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\tcase 'bracket-separator': {\n\t\t\tconst keyValueSep = options.arrayFormat === 'bracket-separator' ?\n\t\t\t\t'[]=' :\n\t\t\t\t'=';\n\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\t// Translate null to an empty string so that it doesn't serialize as 'null'\n\t\t\t\tvalue = value === null ? '' : value;\n\n\t\t\t\tif (result.length === 0) {\n\t\t\t\t\treturn [[encode(key, options), keyValueSep, encode(value, options)].join('')];\n\t\t\t\t}\n\n\t\t\t\treturn [[result, encode(value, options)].join(options.arrayFormatSeparator)];\n\t\t\t};\n\t\t}\n\n\t\tdefault:\n\t\t\treturn key => (result, value) => {\n\t\t\t\tif (\n\t\t\t\t\tvalue === undefined ||\n\t\t\t\t\t(options.skipNull && value === null) ||\n\t\t\t\t\t(options.skipEmptyString && value === '')\n\t\t\t\t) {\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\tif (value === null) {\n\t\t\t\t\treturn [...result, encode(key, options)];\n\t\t\t\t}\n\n\t\t\t\treturn [...result, [encode(key, options), '=', encode(value, options)].join('')];\n\t\t\t};\n\t}\n}\n\nfunction parserForArrayFormat(options) {\n\tlet result;\n\n\tswitch (options.arrayFormat) {\n\t\tcase 'index':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /\\[(\\d*)\\]$/.exec(key);\n\n\t\t\t\tkey = key.replace(/\\[\\d*\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = {};\n\t\t\t\t}\n\n\t\t\t\taccumulator[key][result[1]] = value;\n\t\t\t};\n\n\t\tcase 'bracket':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(\\[\\])$/.exec(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'colon-list-separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tresult = /(:list)$/.exec(key);\n\t\t\t\tkey = key.replace(/:list$/, '');\n\n\t\t\t\tif (!result) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = [value];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\n\t\tcase 'comma':\n\t\tcase 'separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = typeof value === 'string' && value.includes(options.arrayFormatSeparator);\n\t\t\t\tconst isEncodedArray = (typeof value === 'string' && !isArray && decode(value, options).includes(options.arrayFormatSeparator));\n\t\t\t\tvalue = isEncodedArray ? decode(value, options) : value;\n\t\t\t\tconst newValue = isArray || isEncodedArray ? value.split(options.arrayFormatSeparator).map(item => decode(item, options)) : value === null ? value : decode(value, options);\n\t\t\t\taccumulator[key] = newValue;\n\t\t\t};\n\n\t\tcase 'bracket-separator':\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tconst isArray = /(\\[\\])$/.test(key);\n\t\t\t\tkey = key.replace(/\\[\\]$/, '');\n\n\t\t\t\tif (!isArray) {\n\t\t\t\t\taccumulator[key] = value ? decode(value, options) : value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst arrayValue = value === null ?\n\t\t\t\t\t[] :\n\t\t\t\t\tvalue.split(options.arrayFormatSeparator).map(item => decode(item, options));\n\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = arrayValue;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], arrayValue);\n\t\t\t};\n\n\t\tdefault:\n\t\t\treturn (key, value, accumulator) => {\n\t\t\t\tif (accumulator[key] === undefined) {\n\t\t\t\t\taccumulator[key] = value;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\taccumulator[key] = [].concat(accumulator[key], value);\n\t\t\t};\n\t}\n}\n\nfunction validateArrayFormatSeparator(value) {\n\tif (typeof value !== 'string' || value.length !== 1) {\n\t\tthrow new TypeError('arrayFormatSeparator must be single character string');\n\t}\n}\n\nfunction encode(value, options) {\n\tif (options.encode) {\n\t\treturn options.strict ? strictUriEncode(value) : encodeURIComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction decode(value, options) {\n\tif (options.decode) {\n\t\treturn decodeComponent(value);\n\t}\n\n\treturn value;\n}\n\nfunction keysSorter(input) {\n\tif (Array.isArray(input)) {\n\t\treturn input.sort();\n\t}\n\n\tif (typeof input === 'object') {\n\t\treturn keysSorter(Object.keys(input))\n\t\t\t.sort((a, b) => Number(a) - Number(b))\n\t\t\t.map(key => input[key]);\n\t}\n\n\treturn input;\n}\n\nfunction removeHash(input) {\n\tconst hashStart = input.indexOf('#');\n\tif (hashStart !== -1) {\n\t\tinput = input.slice(0, hashStart);\n\t}\n\n\treturn input;\n}\n\nfunction getHash(url) {\n\tlet hash = '';\n\tconst hashStart = url.indexOf('#');\n\tif (hashStart !== -1) {\n\t\thash = url.slice(hashStart);\n\t}\n\n\treturn hash;\n}\n\nfunction extract(input) {\n\tinput = removeHash(input);\n\tconst queryStart = input.indexOf('?');\n\tif (queryStart === -1) {\n\t\treturn '';\n\t}\n\n\treturn input.slice(queryStart + 1);\n}\n\nfunction parseValue(value, options) {\n\tif (options.parseNumbers && !Number.isNaN(Number(value)) && (typeof value === 'string' && value.trim() !== '')) {\n\t\tvalue = Number(value);\n\t} else if (options.parseBooleans && value !== null && (value.toLowerCase() === 'true' || value.toLowerCase() === 'false')) {\n\t\tvalue = value.toLowerCase() === 'true';\n\t}\n\n\treturn value;\n}\n\nfunction parse(query, options) {\n\toptions = Object.assign({\n\t\tdecode: true,\n\t\tsort: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ',',\n\t\tparseNumbers: false,\n\t\tparseBooleans: false\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst formatter = parserForArrayFormat(options);\n\n\t// Create an object with no prototype\n\tconst ret = Object.create(null);\n\n\tif (typeof query !== 'string') {\n\t\treturn ret;\n\t}\n\n\tquery = query.trim().replace(/^[?#&]/, '');\n\n\tif (!query) {\n\t\treturn ret;\n\t}\n\n\tfor (const param of query.split('&')) {\n\t\tif (param === '') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet [key, value] = splitOnFirst(options.decode ? param.replace(/\\+/g, ' ') : param, '=');\n\n\t\t// Missing `=` should be `null`:\n\t\t// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters\n\t\tvalue = value === undefined ? null : ['comma', 'separator', 'bracket-separator'].includes(options.arrayFormat) ? value : decode(value, options);\n\t\tformatter(decode(key, options), value, ret);\n\t}\n\n\tfor (const key of Object.keys(ret)) {\n\t\tconst value = ret[key];\n\t\tif (typeof value === 'object' && value !== null) {\n\t\t\tfor (const k of Object.keys(value)) {\n\t\t\t\tvalue[k] = parseValue(value[k], options);\n\t\t\t}\n\t\t} else {\n\t\t\tret[key] = parseValue(value, options);\n\t\t}\n\t}\n\n\tif (options.sort === false) {\n\t\treturn ret;\n\t}\n\n\treturn (options.sort === true ? Object.keys(ret).sort() : Object.keys(ret).sort(options.sort)).reduce((result, key) => {\n\t\tconst value = ret[key];\n\t\tif (Boolean(value) && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t// Sort object keys, not values\n\t\t\tresult[key] = keysSorter(value);\n\t\t} else {\n\t\t\tresult[key] = value;\n\t\t}\n\n\t\treturn result;\n\t}, Object.create(null));\n}\n\nexports.extract = extract;\nexports.parse = parse;\n\nexports.stringify = (object, options) => {\n\tif (!object) {\n\t\treturn '';\n\t}\n\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\tarrayFormat: 'none',\n\t\tarrayFormatSeparator: ','\n\t}, options);\n\n\tvalidateArrayFormatSeparator(options.arrayFormatSeparator);\n\n\tconst shouldFilter = key => (\n\t\t(options.skipNull && isNullOrUndefined(object[key])) ||\n\t\t(options.skipEmptyString && object[key] === '')\n\t);\n\n\tconst formatter = encoderForArrayFormat(options);\n\n\tconst objectCopy = {};\n\n\tfor (const key of Object.keys(object)) {\n\t\tif (!shouldFilter(key)) {\n\t\t\tobjectCopy[key] = object[key];\n\t\t}\n\t}\n\n\tconst keys = Object.keys(objectCopy);\n\n\tif (options.sort !== false) {\n\t\tkeys.sort(options.sort);\n\t}\n\n\treturn keys.map(key => {\n\t\tconst value = object[key];\n\n\t\tif (value === undefined) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (value === null) {\n\t\t\treturn encode(key, options);\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\tif (value.length === 0 && options.arrayFormat === 'bracket-separator') {\n\t\t\t\treturn encode(key, options) + '[]';\n\t\t\t}\n\n\t\t\treturn value\n\t\t\t\t.reduce(formatter(key), [])\n\t\t\t\t.join('&');\n\t\t}\n\n\t\treturn encode(key, options) + '=' + encode(value, options);\n\t}).filter(x => x.length > 0).join('&');\n};\n\nexports.parseUrl = (url, options) => {\n\toptions = Object.assign({\n\t\tdecode: true\n\t}, options);\n\n\tconst [url_, hash] = splitOnFirst(url, '#');\n\n\treturn Object.assign(\n\t\t{\n\t\t\turl: url_.split('?')[0] || '',\n\t\t\tquery: parse(extract(url), options)\n\t\t},\n\t\toptions && options.parseFragmentIdentifier && hash ? {fragmentIdentifier: decode(hash, options)} : {}\n\t);\n};\n\nexports.stringifyUrl = (object, options) => {\n\toptions = Object.assign({\n\t\tencode: true,\n\t\tstrict: true,\n\t\t[encodeFragmentIdentifier]: true\n\t}, options);\n\n\tconst url = removeHash(object.url).split('?')[0] || '';\n\tconst queryFromUrl = exports.extract(object.url);\n\tconst parsedQueryFromUrl = exports.parse(queryFromUrl, {sort: false});\n\n\tconst query = Object.assign(parsedQueryFromUrl, object.query);\n\tlet queryString = exports.stringify(query, options);\n\tif (queryString) {\n\t\tqueryString = `?${queryString}`;\n\t}\n\n\tlet hash = getHash(object.url);\n\tif (object.fragmentIdentifier) {\n\t\thash = `#${options[encodeFragmentIdentifier] ? encode(object.fragmentIdentifier, options) : object.fragmentIdentifier}`;\n\t}\n\n\treturn `${url}${queryString}${hash}`;\n};\n\nexports.pick = (input, filter, options) => {\n\toptions = Object.assign({\n\t\tparseFragmentIdentifier: true,\n\t\t[encodeFragmentIdentifier]: false\n\t}, options);\n\n\tconst {url, query, fragmentIdentifier} = exports.parseUrl(input, options);\n\treturn exports.stringifyUrl({\n\t\turl,\n\t\tquery: filterObject(query, filter),\n\t\tfragmentIdentifier\n\t}, options);\n};\n\nexports.exclude = (input, filter, options) => {\n\tconst exclusionFilter = Array.isArray(filter) ? key => !filter.includes(key) : (key, value) => !filter(key, value);\n\n\treturn exports.pick(input, exclusionFilter, options);\n};\n","export const getCLS = (start, stop, buffer) => {\n const layoutShifts = buffer.getAll().filter(entry => entry.startTime >= start && entry.startTime <= stop);\n const sessionWindows = [];\n let currentWindow = null;\n\n // Group layout shifts into session windows\n for (const shift of layoutShifts) {\n const {\n startTime\n } = shift;\n const endTime = shift.startTime + shift.duration;\n const score = shift.value;\n if (currentWindow === null || startTime - currentWindow.endTime > 1000 || endTime - currentWindow.startTime > 5000) {\n // Start a new session window\n currentWindow = {\n startTime,\n endTime,\n score\n };\n sessionWindows.push(currentWindow);\n } else {\n // Add layout shift to current session window\n currentWindow.endTime = endTime;\n currentWindow.score += score;\n }\n }\n\n // Find session window with highest cumulative score\n const maxScore = sessionWindows.reduce((max, sessionWindow) => sessionWindow.score > max ? sessionWindow.score : max, 0);\n\n // Return score of largest burst as CLS metric\n return Math.round(maxScore * 10000) / 10000;\n};","export const PerformanceObserverEntryTypes = {\n LayoutShift: 'layout-shift',\n LongTask: 'longtask'\n};","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { PerformanceObserverEntryTypes } from '../../const';\nexport class BufferWithMaxLength {\n constructor(maxLength = 1000) {\n _defineProperty(this, \"buffer\", []);\n _defineProperty(this, \"full\", false);\n this.maxLength = maxLength;\n }\n push(item) {\n if (this.full || this.maxLength === this.buffer.length) {\n this.full = true;\n this.buffer.shift();\n }\n this.buffer.push(item);\n }\n getAll() {\n return this.buffer;\n }\n}\nexport const EntriesBuffer = {\n [PerformanceObserverEntryTypes.LongTask]: new BufferWithMaxLength(),\n [PerformanceObserverEntryTypes.LayoutShift]: new BufferWithMaxLength()\n};","import { PerformanceObserverEntryTypes } from '../../const';\nimport { EntriesBuffer } from '../buffer';\nlet pe = null;\nconst getObserver = () => {\n if (pe !== null) {\n return pe;\n }\n pe = new PerformanceObserver(list => {\n list.getEntries().forEach(entry => {\n if (entry.entryType === PerformanceObserverEntryTypes.LayoutShift) {\n EntriesBuffer[PerformanceObserverEntryTypes.LayoutShift].push(entry);\n }\n if (entry.entryType === PerformanceObserverEntryTypes.LongTask) {\n EntriesBuffer[PerformanceObserverEntryTypes.LongTask].push(entry);\n }\n });\n });\n return pe;\n};\nexport const startLSObserver = () => {\n getObserver().observe({\n type: PerformanceObserverEntryTypes.LayoutShift,\n buffered: true\n });\n};\nexport const startLTObserver = () => {\n getObserver().observe({\n type: PerformanceObserverEntryTypes.LongTask,\n buffered: true\n });\n};","import { getCLS } from './cls';\nimport { PerformanceObserverEntryTypes } from './const';\nimport { getTBT } from './tbt';\nimport { EntriesBuffer } from './utils/buffer';\nimport { startLSObserver, startLTObserver } from './utils/observer';\nexport function startLighthouseObserver() {\n startLSObserver();\n startLTObserver();\n}\nexport const getLighthouseMetrics = ({\n start,\n stop\n}) => {\n const tbt = getTBT(start, stop, EntriesBuffer[PerformanceObserverEntryTypes.LongTask]);\n\n // no round as CLS is usually 0-1\n const cls = getCLS(start, stop, EntriesBuffer[PerformanceObserverEntryTypes.LayoutShift]);\n return {\n 'metric:tbt': Math.round(tbt.total),\n 'metric:tbt:observed': Math.round(tbt.observed),\n 'metric:cls': cls\n };\n};","const MAX_ACCEPTABLE_TASK_DURATION = 50;\nexport const getTBT = (start, stop, buffer) => buffer.getAll().filter(entry => entry.startTime <= stop && entry.duration > MAX_ACCEPTABLE_TASK_DURATION && (entry.startTime >= start || entry.startTime + entry.duration >= start || entry.startTime <= start && entry.startTime + entry.duration >= stop)).reduce((tbt, entry) => {\n const longTaskStop = entry.startTime + entry.duration;\n const intersectStart = Math.max(entry.startTime + MAX_ACCEPTABLE_TASK_DURATION, start);\n const intersectStop = Math.min(longTaskStop, stop);\n const longTaskIncluded = Math.max(intersectStop - intersectStart, 0);\n // eslint-disable-next-line no-param-reassign\n tbt.observed += entry.duration - MAX_ACCEPTABLE_TASK_DURATION;\n // eslint-disable-next-line no-param-reassign\n tbt.total += longTaskIncluded;\n return tbt;\n}, {\n total: 0,\n observed: 0\n});","/**\n * A random function that passes one in rate times.\n * E.g. coinflip(2) is the same as if you flipped a coin.\n * It will pass 50% of the time\n * @param rate The change that it will pass (1 in times)\n * @returns bool, if it passes or not\n */\nexport default function coinflip(rate) {\n if (rate === 0) {\n return false;\n } else if (rate === 1) {\n return true;\n } else {\n return Math.random() * rate <= 1;\n }\n}","let config;\n\n// Defensively typed, since this is directly user-editable\n// and they could delete empty members\n\nexport function setUFOConfig(newConfig) {\n config = newConfig;\n}\nexport function getConfig() {\n return config;\n}\nexport function getInteractionRate(name, interactionKind) {\n try {\n if (!config) {\n return 0;\n }\n const {\n killswitch,\n rates,\n rules,\n kind,\n autoGeneratedRate\n } = config;\n if (killswitch != null) {\n // Specifically kill certain events\n if (killswitch.includes(name)) {\n return 0;\n }\n }\n if (rates != null) {\n // Decide the rate explicitly\n if (rates[name] != null) {\n return rates[name];\n }\n }\n if (rules != null) {\n for (let i = 0; i < rules.length; i++) {\n const rule = rules[i];\n const {\n test,\n rate\n } = rule;\n if (test != null && rate != null) {\n const regexp = new RegExp(test, 'ig');\n if (regexp.test(name)) {\n return rate;\n }\n }\n }\n }\n const isAutogenerated = name === null || name === void 0 ? void 0 : name.startsWith('auto-generated');\n if (isAutogenerated) {\n const rate = autoGeneratedRate;\n if (rate != null) {\n return rate;\n }\n }\n if (kind != null) {\n const rate = kind[interactionKind];\n if (rate != null) {\n return rate;\n }\n }\n return 0;\n } catch (e) {\n // Fallback\n return 0;\n }\n}\nexport function getCapabilityRate(capability) {\n try {\n if (!config) {\n return 0;\n }\n const {\n capability: capabilityRate\n } = config;\n if (capabilityRate != null) {\n const rate = capabilityRate[capability];\n if (rate != null) {\n return rate;\n }\n }\n return 0;\n } catch {\n return 0;\n }\n}\nconst validTypingMethods = ['timeout', 'timeoutNoAlloc', 'mutationObserver'];\nexport function getTypingPerformanceTracingMethod() {\n const defaultMethod = 'timeout';\n try {\n if (!config) {\n return defaultMethod;\n }\n const {\n typingMethod\n } = config;\n if (typingMethod != null && validTypingMethods.find(m => m === typingMethod)) {\n return typingMethod;\n } else {\n return defaultMethod;\n }\n } catch (e) {\n return defaultMethod;\n }\n}\n\n// Will ask UFO to wait for BM3 TTI for all events on this list\nexport function getAwaitBM3TTIList() {\n try {\n if (!config) {\n return [];\n }\n const {\n awaitBM3TTI\n } = config;\n if (awaitBM3TTI != null) {\n return awaitBM3TTI;\n } else {\n return [];\n }\n } catch (e) {\n return [];\n }\n}\n\n// Flag to remove ufo segments prefixes\nexport function getRemovePageSegmentsUFOPrefixes() {\n try {\n if (!config) {\n return false;\n }\n const {\n removePageSegmentsUFOPrefixes\n } = config;\n if (removePageSegmentsUFOPrefixes != null) {\n return removePageSegmentsUFOPrefixes;\n } else {\n return false;\n }\n } catch (e) {\n return false;\n }\n}\n\n// Flag to remove ufo segments prefixes\nexport function getRemoveInteractionsUFOPrefixes() {\n try {\n if (!config) {\n return false;\n }\n const {\n removeInteractionsUFOPrefixes\n } = config;\n if (removeInteractionsUFOPrefixes != null) {\n return removeInteractionsUFOPrefixes;\n } else {\n return false;\n }\n } catch (e) {\n return false;\n }\n}\n\n// Will ask UFO to override ufoName => experienceKey to the apdex key\n// This is to cover use cases where one rUFO route is split into multiple BM3 keys (1:N)\n// This workaround should only be used as last resource,\n// when we find router limitations preventing teams from splliting these routes\nexport function getUfoNameOverrides() {\n try {\n if (!config) {\n return undefined;\n }\n const {\n ufoNameOverrides\n } = config;\n if (ufoNameOverrides != null) {\n return ufoNameOverrides;\n }\n return undefined;\n } catch (e) {\n return undefined;\n }\n}\n\n// Contains the list of interactions that do not abort existing known interactions\nexport function getDoNotAbortActivePressInteraction() {\n try {\n if (!config) {\n return undefined;\n }\n const {\n doNotAbortActivePressInteraction\n } = config;\n return doNotAbortActivePressInteraction;\n } catch (e) {\n return undefined;\n }\n}\n\n// Contains the list of interactions that do not abort on transitions\nexport function getDoNotAbortActivePressInteractionOnTransition() {\n try {\n if (!config) {\n return undefined;\n }\n const {\n doNotAbortActivePressInteractionOnTransition\n } = config;\n return doNotAbortActivePressInteractionOnTransition;\n } catch (e) {\n return undefined;\n }\n}","/** ttvc configuration values set during initialization */\nexport const CONFIG = {\n /** Decide whether to log debug messages. */\n DEBUG: false,\n /** A duration in ms to wait before declaring the page completely idle. */\n IDLE_TIMEOUT: 200,\n /**\n * A duration in ms to wait before assuming that a single network request\n * was not instrumented correctly.\n *\n * If NETWORK_TIMEOUT is set to 0, disable this feature.\n */\n NETWORK_TIMEOUT: 60000\n};\nexport const setConfig = options => {\n if (options !== null && options !== void 0 && options.debug) {\n CONFIG.DEBUG = options.debug;\n }\n if (options !== null && options !== void 0 && options.idleTimeout) {\n CONFIG.IDLE_TIMEOUT = options.idleTimeout;\n }\n if (options !== null && options !== void 0 && options.networkTimeout) {\n CONFIG.NETWORK_TIMEOUT = options.networkTimeout;\n }\n};","import { CONFIG } from './constants';\nexport class Logger {\n static format(...messages) {\n return ['[ttvc]', ...messages, '::', performance.now()];\n }\n\n /** Log a debug message to the console */\n static debug(...messages) {\n if (!CONFIG.DEBUG) {\n return;\n }\n // eslint-disable-next-line no-console\n console.debug(...this.format(...messages));\n }\n\n /** Log a message to the console */\n static info(...messages) {\n if (!CONFIG.DEBUG) {\n return;\n }\n // eslint-disable-next-line no-console\n console.info(...this.format(...messages));\n }\n\n /** Log a warning message to the console */\n static warn(...messages) {\n if (!CONFIG.DEBUG) {\n return;\n }\n // eslint-disable-next-line no-console\n console.warn(...this.format(...messages));\n }\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { bind } from 'bind-event-listener';\nimport { Logger } from './logger';\nlet unbindFunctions = [];\n\n/**\n * Modeled after IntersectionObserver and MutationObserver, this Image observer\n * reports image load times for images that are visible within the viewport.\n *\n * Note: ImageObserver treats iframes as images to give accurate times\n *\n * @example\n * const observer = new InViewportImageObserver((timestamp) => {\n * // do something with the image load event time\n * });\n *\n * // begin listening for all visible image load events\n * // note that observe() takes no arguments\n * observer.observe();\n *\n * // stop listening to image load events\n * observer.disconnect();\n */\nexport class InViewportImageObserver {\n constructor(callback) {\n _defineProperty(this, \"imageLoadTimes\", new Map());\n _defineProperty(this, \"lastImageLoadTimestamp\", 0);\n _defineProperty(this, \"intersectionObserverCallback\", entries => {\n entries.forEach(entry => {\n const img = entry.target;\n const timestamp = this.imageLoadTimes.get(img);\n if (entry.isIntersecting && timestamp != null) {\n Logger.info('InViewportImageObserver.callback()', '::', 'timestamp =', timestamp);\n this.callback(timestamp, img);\n }\n this.intersectionObserver.unobserve(img);\n this.imageLoadTimes.delete(img);\n });\n });\n // Error events on the `window` can be a `string` (legacy).\n // The built in TS DOM types don't have a (correct) narrower\n // type for the `Document`.\n _defineProperty(this, \"handleLoadOrErrorEvent\", event => {\n if (typeof event !== 'string' && (event.target instanceof HTMLImageElement || event.target instanceof HTMLIFrameElement)) {\n Logger.debug('InViewportImageObserver.handleLoadOrErrorEvent()', '::', 'event =', event);\n this.imageLoadTimes.set(event.target, event.timeStamp);\n this.intersectionObserver.observe(event.target);\n }\n });\n this.callback = callback;\n this.intersectionObserver = new IntersectionObserver(this.intersectionObserverCallback);\n }\n /** Start observing loading images. */\n observe() {\n Logger.info('InViewportImageObserver.observe()');\n const loadUnbindFn = bind(document, {\n type: 'load',\n listener: this.handleLoadOrErrorEvent,\n options: {\n capture: true\n }\n });\n const errorUnbindFn = bind(document, {\n type: 'error',\n listener: this.handleLoadOrErrorEvent,\n options: {\n capture: true\n }\n });\n unbindFunctions.push(loadUnbindFn);\n unbindFunctions.push(errorUnbindFn);\n }\n\n /** Stop observing loading images, and clean up. */\n disconnect() {\n Logger.info('InViewportImageObserver.disconnect()');\n this.lastImageLoadTimestamp = 0;\n this.imageLoadTimes.clear();\n this.intersectionObserver.disconnect();\n unbindFunctions.forEach(unbind => {\n unbind();\n });\n unbindFunctions = [];\n }\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { Logger } from './logger';\n/**\n * Instantiate this class to monitor mutation events that occur *within the\n * viewport*.\n *\n * This class is modeled after the standard MutationObserver API, but does not\n * report mutations that did not occur within the viewport.\n *\n * @example\n * const observer = new InViewportMutationObserver((mutation) => {\n * // do something with the mutation\n * });\n *\n * // begin watching for visible mutations to the body element\n * observer.observe(document.body);\n *\n * // stop watching for mutations\n * observer.disconnect();\n */\nexport class InViewportMutationObserver {\n constructor(callback) {\n _defineProperty(this, \"mutationObserverConfig\", {\n attributeFilter: ['hidden', 'style', 'src'],\n attributeOldValue: true,\n attributes: true,\n childList: true,\n subtree: true\n });\n _defineProperty(this, \"mutations\", new Map());\n _defineProperty(this, \"mutationObserverCallback\", mutations => {\n Logger.debug('InViewportMutationObserver.mutationObserverCallback()', '::', 'mutations =', mutations);\n mutations.forEach(mutation => {\n mutation.timestamp = performance.now();\n let target = null;\n if (mutation.target instanceof Element) {\n target = mutation.target;\n }\n if (mutation.target instanceof Text) {\n target = mutation.target.parentElement;\n }\n if (!target) {\n return;\n }\n switch (mutation.type) {\n case 'childList':\n mutation.addedNodes.forEach(node => {\n if (node instanceof HTMLElement) {\n this.intersectionObserver.observe(node);\n this.mutations.set(node, mutation);\n }\n if (node instanceof Text && node.parentElement != null) {\n this.intersectionObserver.observe(node.parentElement);\n this.mutations.set(node.parentElement, mutation);\n }\n });\n break;\n case 'attributes':\n default:\n this.intersectionObserver.observe(target);\n this.mutations.set(target, mutation);\n }\n });\n });\n _defineProperty(this, \"intersectionObserverCallback\", entries => {\n Logger.debug('InViewportMutationObserver.intersectionObserverCallback()', '::', 'entries =', entries);\n entries.forEach(entry => {\n const mutation = this.mutations.get(entry.target);\n if (entry.isIntersecting && mutation != null) {\n Logger.info('InViewportMutationObserver.callback()', '::', 'mutation =', mutation);\n this.callback(mutation);\n }\n this.mutations.delete(entry.target);\n this.intersectionObserver.unobserve(entry.target);\n });\n });\n this.callback = callback;\n this.mutationObserver = new MutationObserver(this.mutationObserverCallback);\n this.intersectionObserver = new IntersectionObserver(this.intersectionObserverCallback);\n }\n observe(target) {\n Logger.info('InViewportMutationObserver.observe()', '::', 'target =', target);\n this.mutationObserver.observe(target, this.mutationObserverConfig);\n }\n disconnect() {\n Logger.info('InViewportMutationObserver.disconnect()');\n this.mutationObserver.disconnect();\n this.intersectionObserver.disconnect();\n }\n}","// http://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigation/type\nconst getDeprecatedNavigationType = () => {\n const {\n type\n } = window.performance.navigation;\n return type === 2 ? 'back_forward' : type === 1 ? 'reload' : 'navigate';\n};\nexport const getNavigationType = () => {\n var _window$performance$g;\n return ((_window$performance$g = window.performance.getEntriesByType('navigation')[0]) === null || _window$performance$g === void 0 ? void 0 : _window$performance$g.type) || getDeprecatedNavigationType();\n};\nexport const getActivationStart = () => {\n var _window$performance$g2;\n return ((_window$performance$g2 = window.performance.getEntriesByType('navigation')[0]) === null || _window$performance$g2 === void 0 ? void 0 : _window$performance$g2.activationStart) || 0;\n};","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { bind } from 'bind-event-listener';\nimport { CONFIG } from './constants';\nimport { Logger } from './logger';\n/**\n * Alerts subscribers to the presence or absence of pending AJAX requests\n *\n * Use `increment` and `decrement` public methods to instrument your AJAX\n * requests.\n */\nclass AjaxIdleObservable {\n constructor() {\n _defineProperty(this, \"pendingRequests\", 0);\n _defineProperty(this, \"subscribers\", new Set());\n _defineProperty(this, \"didNetworkTimeOut\", false);\n // time out if ajax request never resolves\n _defineProperty(this, \"next\", message => {\n Logger.debug('AjaxIdleObservable.next()', message);\n this.subscribers.forEach(subscriber => subscriber(message));\n });\n _defineProperty(this, \"startCleanupTimeout\", () => {\n if (CONFIG.NETWORK_TIMEOUT === 0) {\n return;\n }\n this.abortCleanupTimeout();\n const cleanup = () => {\n Logger.warn('AjaxIdleObservable', '::', 'Timed out waiting for requests to resolve.', 'Make sure that incrementAjaxCount() is always matched with decrementAjaxCount().', '::', 'pendingRequests =', this.pendingRequests);\n this.didNetworkTimeOut = true;\n this.pendingRequests = 0;\n this.next('IDLE');\n };\n this.cleanupTimeout = window.setTimeout(cleanup, CONFIG.NETWORK_TIMEOUT);\n });\n _defineProperty(this, \"abortCleanupTimeout\", () => {\n window.clearTimeout(this.cleanupTimeout);\n this.cleanupTimeout = undefined;\n });\n /** call this whenever an instrumented AJAX request is triggered */\n _defineProperty(this, \"increment\", () => {\n this.startCleanupTimeout();\n if (this.pendingRequests === 0) {\n this.next('BUSY');\n }\n this.pendingRequests += 1;\n });\n /** call this whenever an instrumented AJAX request is resolved */\n _defineProperty(this, \"decrement\", () => {\n this.abortCleanupTimeout();\n if (this.pendingRequests === 1) {\n this.next('IDLE');\n } else {\n this.startCleanupTimeout();\n }\n this.pendingRequests = Math.max(this.pendingRequests - 1, 0);\n if (this.pendingRequests < 10) {\n Logger.debug('AjaxIdleObservable.decrement()', '::', 'pendingRequests =', this.pendingRequests);\n }\n });\n _defineProperty(this, \"subscribe\", subscriber => {\n this.subscribers.add(subscriber);\n const unsubscribe = () => {\n this.subscribers.delete(subscriber);\n };\n return unsubscribe;\n });\n }\n}\n\n/** Alerts subscribers to the presence or absence of pending resources */\nclass ResourceLoadingIdleObservable {\n // time out if resource never resolves\n\n constructor() {\n var _window;\n _defineProperty(this, \"pendingResources\", new Set());\n _defineProperty(this, \"subscribers\", new Set());\n _defineProperty(this, \"didNetworkTimeOut\", false);\n _defineProperty(this, \"next\", message => {\n Logger.debug('ResourceLoadingIdleObservable.next()', message);\n this.subscribers.forEach(subscriber => subscriber(message));\n });\n _defineProperty(this, \"startCleanupTimeout\", () => {\n if (CONFIG.NETWORK_TIMEOUT === 0) {\n return;\n }\n this.abortCleanupTimeout();\n const cleanup = () => {\n Logger.warn('ResourceLoadingIdleObservable', '::', 'Timed out waiting for resources to resolve.', 'Consider filing a bug report if this continues to occur.', '::', 'pendingResources =', this.pendingResources);\n this.didNetworkTimeOut = true;\n this.pendingResources = new Set();\n this.next('IDLE');\n };\n this.cleanupTimeout = window.setTimeout(cleanup, CONFIG.NETWORK_TIMEOUT);\n });\n _defineProperty(this, \"abortCleanupTimeout\", () => {\n window.clearTimeout(this.cleanupTimeout);\n this.cleanupTimeout = undefined;\n });\n _defineProperty(this, \"add\", element => {\n // ignore elements without resources to load\n if (element instanceof HTMLImageElement && !element.src || element instanceof HTMLImageElement && element.complete || element instanceof HTMLLinkElement && !element.href || element instanceof HTMLScriptElement && !element.src || element instanceof HTMLIFrameElement && !element.src) {\n return;\n }\n this.startCleanupTimeout();\n if (this.pendingResources.size === 0) {\n this.next('BUSY');\n }\n this.pendingResources.add(element);\n });\n _defineProperty(this, \"remove\", element => {\n this.abortCleanupTimeout();\n this.pendingResources.delete(element);\n if (this.pendingResources.size === 0) {\n this.next('IDLE');\n } else {\n this.startCleanupTimeout();\n }\n if (this.pendingResources.size < 10) {\n Logger.debug('ResourceLoadingIdleObservable.remove()', '::', 'pendingResources =', this.pendingResources);\n }\n });\n _defineProperty(this, \"subscribe\", subscriber => {\n this.subscribers.add(subscriber);\n const unsubscribe = () => {\n this.subscribers.delete(subscriber);\n };\n return unsubscribe;\n });\n // watch out for SSR\n if (typeof window !== 'undefined' && (_window = window) !== null && _window !== void 0 && _window.MutationObserver) {\n bind(window, {\n type: 'load',\n listener: () => {\n // watch for added or updated script tags\n const o = new MutationObserver(mutations => {\n mutations.forEach(mutation => {\n mutation.addedNodes.forEach(node => {\n if (node instanceof HTMLScriptElement || node instanceof HTMLLinkElement || node instanceof HTMLImageElement || node instanceof HTMLIFrameElement) {\n this.add(node);\n } else if (node.hasChildNodes() && node instanceof HTMLElement) {\n // images may be mounted within large subtrees, this is less\n // common with link/script elements\n node.querySelectorAll('img').forEach(this.add);\n }\n });\n });\n });\n\n // watch for new tags added anywhere in the document\n o.observe(window.document.documentElement, {\n childList: true,\n subtree: true\n });\n\n // as resources load, remove them from pendingResources\n ['load', 'error'].forEach(eventType => {\n bind(window, {\n type: eventType,\n listener: event => {\n if (event.target instanceof HTMLScriptElement || event.target instanceof HTMLLinkElement || event.target instanceof HTMLImageElement || event.target instanceof HTMLIFrameElement) {\n this.remove(event.target);\n }\n },\n options: {\n capture: true\n }\n });\n });\n }\n });\n }\n }\n}\n\n/**\n * DO NOT INTIALIZE THIS CLASS DIRECTLY. Use getNetworkIdleObservable instead.\n *\n * Alerts subscribers to the presence or absence of _any_ observable network\n * activity. Combines the functionalities of AjaxIdleObservable and\n * ScriptLoadingIdleObservable.\n */\nexport class NetworkIdleObservable {\n constructor() {\n _defineProperty(this, \"ajaxIdleObservable\", new AjaxIdleObservable());\n _defineProperty(this, \"resourceLoadingIdleObservable\", new ResourceLoadingIdleObservable());\n _defineProperty(this, \"subscribers\", new Set());\n // idle state\n _defineProperty(this, \"ajaxIdle\", true);\n _defineProperty(this, \"scriptLoadingIdle\", true);\n _defineProperty(this, \"handleUpdate\", source => message => {\n const wasIdle = this.ajaxIdle && this.scriptLoadingIdle;\n\n // update state\n if (source === 'AJAX') {\n this.ajaxIdle = message === 'IDLE';\n }\n if (source === 'RESOURCE_LOADING') {\n this.scriptLoadingIdle = message === 'IDLE';\n }\n\n // if this is a change, notify subscribers\n const isIdle = this.ajaxIdle && this.scriptLoadingIdle;\n if (wasIdle !== isIdle) {\n this.next(isIdle ? 'IDLE' : 'BUSY');\n }\n });\n _defineProperty(this, \"next\", message => {\n Logger.debug('NetworkIdleObservable.next()', message);\n this.subscribers.forEach(subscriber => subscriber(message));\n });\n _defineProperty(this, \"incrementAjaxCount\", () => this.ajaxIdleObservable.increment());\n _defineProperty(this, \"decrementAjaxCount\", () => this.ajaxIdleObservable.decrement());\n _defineProperty(this, \"isIdle\", () => this.ajaxIdle && this.scriptLoadingIdle);\n _defineProperty(this, \"didNetworkTimeOut\", () => this.ajaxIdleObservable.didNetworkTimeOut || this.resourceLoadingIdleObservable.didNetworkTimeOut);\n _defineProperty(this, \"resetDidNetworkTimeOut\", () => {\n this.ajaxIdleObservable.didNetworkTimeOut = false;\n this.resourceLoadingIdleObservable.didNetworkTimeOut = false;\n });\n _defineProperty(this, \"subscribe\", subscriber => {\n this.subscribers.add(subscriber);\n const unsubscribe = () => {\n this.subscribers.delete(subscriber);\n };\n return unsubscribe;\n });\n this.ajaxIdleObservable.subscribe(this.handleUpdate('AJAX'));\n this.resourceLoadingIdleObservable.subscribe(this.handleUpdate('RESOURCE_LOADING'));\n }\n}\n\n// expose observable as a singleton\nlet networkIdleObservable;\nexport const getNetworkIdleObservable = () => {\n if (!networkIdleObservable) {\n networkIdleObservable = new NetworkIdleObservable();\n }\n return networkIdleObservable;\n};","import { CONFIG } from './constants';\nimport { Logger } from './logger';\nimport { getNetworkIdleObservable } from './network-idle-observable';\nimport { requestIdleCallback } from './request-idle-callback';\n\n/**\n * Request a callback when the CPU and network have both been simultaneously\n * idle for IDLE_TIMEOUT.\n *\n * NOTE: will only trigger once\n */\nexport function requestAllIdleCallback(callback) {\n const networkIdleObservable = getNetworkIdleObservable();\n\n // state\n let networkIdle = networkIdleObservable.isIdle();\n let timeout;\n const handleNetworkChange = message => {\n networkIdle = message === 'IDLE';\n if (networkIdle) {\n requestIdleCallback(handleCpuIdle);\n } else {\n window.clearTimeout(timeout);\n timeout = undefined;\n }\n };\n const handleCpuIdle = () => {\n Logger.debug('requestAllIdleCallback.handleCpuIdle()');\n if (networkIdle && !timeout) {\n handleAllIdle();\n }\n };\n const handleAllIdle = () => {\n timeout = window.setTimeout(() => {\n // Did we have to clear a \"hung\" request from observable state?\n const didNetworkTimeOut = networkIdleObservable.didNetworkTimeOut();\n networkIdleObservable.resetDidNetworkTimeOut();\n Logger.info('requestAllIdleCallback: ALL IDLE');\n callback(didNetworkTimeOut);\n unsubscribe();\n }, CONFIG.IDLE_TIMEOUT);\n };\n const unsubscribe = networkIdleObservable.subscribe(handleNetworkChange);\n\n // base case\n if (networkIdle) {\n handleNetworkChange('IDLE');\n }\n}","/**\n * Request a callback when we are confident that any synchronous CPU work has\n * been flushed from the task queue.\n */\nexport const requestIdleCallback = callback => {\n var _window$requestIdleCa;\n // if browser supports it, wait until CPU is idle\n // eslint-disable-next-line compat/compat\n const requestCallback = (_window$requestIdleCa = window.requestIdleCallback) !== null && _window$requestIdleCa !== void 0 ? _window$requestIdleCa : window.setTimeout;\n requestCallback(() => {\n // wait *two* animation frames, to ensure the page has a chance to flush\n // pending changes to the DOM\n window.requestAnimationFrame(() => window.requestAnimationFrame(callback));\n });\n};","import { bind } from 'bind-event-listener';\n\n/**\n * Returns a promise resolved when the page load event has been reached.\n */\nexport const waitForPageLoad = () => {\n if (document.readyState === 'complete') {\n return Promise.resolve();\n }\n return new Promise(resolve => {\n const unbind = bind(window, {\n type: 'load',\n listener: () => {\n resolve();\n unbind();\n }\n });\n });\n};","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { bind } from 'bind-event-listener';\nimport { InViewportImageObserver } from './in-viewport-image-observer';\nimport { InViewportMutationObserver } from './in-viewport-mutation-observer';\nimport { Logger } from './logger';\nimport { getActivationStart, getNavigationType } from './navigation-entry';\nimport { requestAllIdleCallback } from './request-all-idle-callback';\nimport { waitForPageLoad } from './wait-for-page-load';\n\n/**\n * TTVC `Metric` type uses `PerformanceMeasure` type as it's guideline\n * https://developer.mozilla.org/en-US/docs/Web/API/PerformanceMeasure\n */\n\n/**\n * At the moment, the only error that can occur is measurement cancellation\n */\n\nexport const CancellationReason = {\n NEW_NAVIGATION: 'NEW_NAVIGATION',\n VISIBILITY_CHANGE: 'VISIBILITY_CHANGE',\n USER_INTERACTION: 'USER_INTERACTION',\n MANUAL_CANCELLATION: 'MANUAL_CANCELLATION'\n};\n/**\n * Core of the TTVC calculation that ties viewport observers and network monitoring\n * into a singleton that facilitates communication of TTVC metric measurement and error\n * information to subscribers.\n */\nclass VisuallyCompleteCalculator {\n /**\n * Determine whether the calculator should run in the current environment\n */\n static isSupportedEnvironment() {\n var _window$performance;\n return window !== undefined && 'MutationObserver' in window && 'IntersectionObserver' in window && typeof document.querySelectorAll === 'function' && ((_window$performance = window.performance) === null || _window$performance === void 0 ? void 0 : _window$performance.timing);\n }\n constructor() {\n // configuration\n _defineProperty(this, \"debug\", false);\n _defineProperty(this, \"idleTimeout\", 200);\n _defineProperty(this, \"lastImageLoadTimestamp\", -1);\n _defineProperty(this, \"navigationCount\", 0);\n // only one measurement should be active at a time\n // subscribers\n _defineProperty(this, \"successSubscribers\", new Set());\n _defineProperty(this, \"errorSubscribers\", new Set());\n _defineProperty(this, \"unbindFunctions\", []);\n /** subscribe to Visually Complete metrics */\n _defineProperty(this, \"onTTVC\", (successSubscriber, errorSubscriber) => {\n // register subscriber callbacks\n this.successSubscribers.add(successSubscriber);\n if (errorSubscriber) {\n this.errorSubscribers.add(errorSubscriber);\n }\n\n // return an unsubscribe function\n return () => {\n this.successSubscribers.delete(successSubscriber);\n if (errorSubscriber) {\n this.errorSubscribers.delete(errorSubscriber);\n }\n };\n });\n if (!VisuallyCompleteCalculator.isSupportedEnvironment()) {\n throw new Error('VisuallyCompleteCalculator: This browser/runtime is not supported.');\n }\n this.inViewportMutationObserver = new InViewportMutationObserver(mutation => {\n var _mutation$timestamp, _this$lastMutation$ti, _this$lastMutation;\n if (((_mutation$timestamp = mutation.timestamp) !== null && _mutation$timestamp !== void 0 ? _mutation$timestamp : 0) >= ((_this$lastMutation$ti = (_this$lastMutation = this.lastMutation) === null || _this$lastMutation === void 0 ? void 0 : _this$lastMutation.timestamp) !== null && _this$lastMutation$ti !== void 0 ? _this$lastMutation$ti : 0)) {\n this.lastMutation = mutation;\n }\n });\n this.inViewportImageObserver = new InViewportImageObserver((timestamp, img) => {\n if (timestamp >= this.lastImageLoadTimestamp) {\n this.lastImageLoadTimestamp = timestamp;\n this.lastImageLoadTarget = img;\n }\n });\n }\n\n /**\n * expose a method to abort the current TTVC measurement\n * @param eventType - type of event that triggered cancellation (note that cancellationReason will be set to \"MANUAL_CANCELLATION\" regardless of this value).\n */\n cancel(eventType) {\n Logger.info('VisuallyCompleteCalculator.cancel()', '::', 'index =', this.activeMeasurementIndex);\n if (this.activeMeasurementIndex) {\n this.error({\n start: getActivationStart(),\n end: performance.now(),\n cancellationReason: CancellationReason.MANUAL_CANCELLATION,\n eventType,\n navigationType: getNavigationType(),\n lastVisibleChange: this.getLastVisibleChange()\n });\n }\n this.activeMeasurementIndex = undefined;\n }\n\n /** begin measuring a new navigation */\n async start(start = 0, isBfCacheRestore = false) {\n const navigationIndex = this.navigationCount += 1;\n this.activeMeasurementIndex = navigationIndex;\n Logger.info('VisuallyCompleteCalculator.start()', '::', 'index =', navigationIndex);\n let navigationType = isBfCacheRestore ? 'back_forward' : start > 0 ? 'script' : getNavigationType();\n const activationStart = getActivationStart();\n if (activationStart > start) {\n start = activationStart;\n navigationType = 'prerender';\n }\n\n // setup\n const cancel = (e, cancellationReason) => {\n if (this.activeMeasurementIndex === navigationIndex) {\n this.activeMeasurementIndex = undefined;\n this.error({\n start,\n end: performance.now(),\n cancellationReason,\n eventType: e.type,\n eventTarget: e.target || undefined,\n navigationType,\n lastVisibleChange: this.getLastVisibleChange()\n });\n }\n };\n const cancelOnInteraction = e => cancel(e, CancellationReason.USER_INTERACTION);\n const cancelOnNavigation = e => cancel(e, CancellationReason.NEW_NAVIGATION);\n const cancelOnVisibilityChange = e => cancel(e, CancellationReason.VISIBILITY_CHANGE);\n this.inViewportImageObserver.observe();\n this.inViewportMutationObserver.observe(document.documentElement);\n const pageHideUnbind = bind(window, {\n type: 'pagehide',\n listener: cancelOnNavigation\n });\n const visibilityChangeUnbind = bind(window, {\n type: 'visibilitychange',\n listener: cancelOnVisibilityChange\n });\n this.unbindFunctions.push(pageHideUnbind);\n this.unbindFunctions.push(visibilityChangeUnbind);\n // attach user interaction listeners next tick (we don't want to pick up the SPA navigation click)\n window.setTimeout(() => {\n const clickUnbind = bind(window, {\n type: 'click',\n listener: cancelOnInteraction\n });\n const keydownUnbind = bind(window, {\n type: 'keydown',\n listener: cancelOnInteraction\n });\n this.unbindFunctions.push(clickUnbind);\n this.unbindFunctions.push(keydownUnbind);\n }, 0);\n\n // wait for page to be definitely DONE\n // - wait for window.on(\"load\")\n await waitForPageLoad();\n // - wait for simultaneous network and CPU idle\n const didNetworkTimeOut = await new Promise(requestAllIdleCallback);\n\n // if this navigation's measurement hasn't been cancelled, record it.\n if (navigationIndex === this.activeMeasurementIndex) {\n var _this$lastMutation$ti2, _this$lastMutation2;\n // identify timestamp of last visible change\n const end = Math.max(start, this.lastImageLoadTimestamp, (_this$lastMutation$ti2 = (_this$lastMutation2 = this.lastMutation) === null || _this$lastMutation2 === void 0 ? void 0 : _this$lastMutation2.timestamp) !== null && _this$lastMutation$ti2 !== void 0 ? _this$lastMutation$ti2 : 0);\n\n // report result to subscribers\n this.next({\n start,\n end,\n duration: end - start,\n detail: {\n navigationType,\n didNetworkTimeOut,\n lastVisibleChange: this.getLastVisibleChange()\n }\n });\n } else {\n Logger.debug('VisuallyCompleteCalculator: Measurement discarded', '::', 'index =', navigationIndex);\n if (this.activeMeasurementIndex) {\n this.error({\n start,\n end: performance.now(),\n cancellationReason: CancellationReason.NEW_NAVIGATION,\n navigationType,\n lastVisibleChange: this.getLastVisibleChange()\n });\n }\n }\n\n // cleanup\n this.unbindFunctions.forEach(unbind => {\n unbind();\n });\n this.unbindFunctions = [];\n // only disconnect observers if this is the most recent navigation\n if (navigationIndex === this.navigationCount) {\n this.inViewportImageObserver.disconnect();\n this.inViewportMutationObserver.disconnect();\n }\n }\n next(measurement) {\n var _this$lastMutation$ti3, _this$lastMutation3;\n if (measurement.end > Number.MAX_SAFE_INTEGER) {\n Logger.warn('VisuallyCompleteCalculator.next()', '::', 'This browser reported a time larger than MAX_SAFE_INTEGER. We are ignoring it.', '::', measurement);\n return;\n }\n Logger.debug('VisuallyCompleteCalculator.next()', '::', 'lastImageLoadTimestamp =', this.lastImageLoadTimestamp, 'lastMutationTimestamp =', (_this$lastMutation$ti3 = (_this$lastMutation3 = this.lastMutation) === null || _this$lastMutation3 === void 0 ? void 0 : _this$lastMutation3.timestamp) !== null && _this$lastMutation$ti3 !== void 0 ? _this$lastMutation$ti3 : 0, '::', 'index =', this.activeMeasurementIndex);\n Logger.info('TTVC:', measurement, '::', 'index =', this.activeMeasurementIndex);\n this.successSubscribers.forEach(subscriber => subscriber(measurement));\n }\n error(error) {\n Logger.debug('VisuallyCompleteCalculator.error()', '::', 'cancellationReason =', error.cancellationReason, '::', 'eventType =', error.eventType || 'none', '::', 'index =', this.activeMeasurementIndex);\n this.errorSubscribers.forEach(subscriber => subscriber(error));\n }\n getLastVisibleChange() {\n var _this$lastMutation$ti4, _this$lastMutation4;\n return this.lastImageLoadTimestamp > ((_this$lastMutation$ti4 = (_this$lastMutation4 = this.lastMutation) === null || _this$lastMutation4 === void 0 ? void 0 : _this$lastMutation4.timestamp) !== null && _this$lastMutation$ti4 !== void 0 ? _this$lastMutation$ti4 : 0) ? this.lastImageLoadTarget : this.lastMutation;\n }\n getLastVisibleChangeTimestamp() {\n var _this$lastMutation$ti5, _this$lastMutation5, _this$lastMutation$ti6, _this$lastMutation6;\n return this.lastImageLoadTimestamp > ((_this$lastMutation$ti5 = (_this$lastMutation5 = this.lastMutation) === null || _this$lastMutation5 === void 0 ? void 0 : _this$lastMutation5.timestamp) !== null && _this$lastMutation$ti5 !== void 0 ? _this$lastMutation$ti5 : 0) ? this.lastImageLoadTimestamp : (_this$lastMutation$ti6 = (_this$lastMutation6 = this.lastMutation) === null || _this$lastMutation6 === void 0 ? void 0 : _this$lastMutation6.timestamp) !== null && _this$lastMutation$ti6 !== void 0 ? _this$lastMutation$ti6 : 0;\n }\n}\n// export calculator singleton\nlet calculator;\nexport const getVisuallyCompleteCalculator = () => {\n if (!calculator) {\n calculator = new VisuallyCompleteCalculator();\n }\n return calculator;\n};","import { bind } from 'bind-event-listener';\nimport { setConfig } from './utils/constants';\nimport { Logger } from './utils/logger';\nimport { getNetworkIdleObservable } from './utils/network-idle-observable';\nimport { getVisuallyCompleteCalculator } from './utils/visually-complete-calculator';\nlet calculator;\nconst whenActivated = callback => {\n if (document.prerendering) {\n bind(window, {\n type: 'prerenderingchange',\n listener: callback,\n options: {\n capture: true\n }\n });\n } else {\n callback();\n }\n};\n\n/**\n * Start ttvc and begin monitoring network activity and visual changes.\n */\nexport const initTTVC = options => {\n // apply options\n setConfig(options);\n Logger.info('init()');\n calculator = getVisuallyCompleteCalculator();\n whenActivated(() => {\n void calculator.start();\n\n // restart measurement for SPA navigation\n bind(window, {\n type: 'locationchange',\n listener: event => void calculator.start(event.timeStamp)\n });\n\n // restart measurement on back/forward cache page restoration\n bind(window, {\n type: 'pageshow',\n listener: event => {\n // abort if this is the initial pageload\n if (!event.persisted) {\n return;\n }\n void calculator.start(event.timeStamp, true);\n }\n });\n });\n};\n\n/**\n * Subscribe to notifications about TTVC metrics.\n *\n * NOTE: init() must be called before registering a TTVC subscriber.\n *\n * @example\n * const unsubscribe = onTTVC(ms => console.log(ms));\n *\n * @param successCallback Triggered once for each navigation instance when TTVC was successfully captured.\n * @param [errorCallback] Triggered when TTVC failed to capture\n * @returns A function that unsubscribes the callback from this metric.\n */\nexport const onTTVC = (successCallback, errorCallback) => {\n var _calculator;\n return (_calculator = calculator) === null || _calculator === void 0 ? void 0 : _calculator.onTTVC(successCallback, errorCallback);\n};\n\n/**\n * Begin measuring a new navigation.\n *\n * Call this method to notify ttvc that a new client-side navigation has begun.\n *\n * *DO NOT* call `start()` on initial pageload.\n *\n * If you don't have access to the TTVC library in your product code, you can\n * trigger the same behaviour by dispatching a custom 'locationchange' event\n * (See README.md for an example of usage).\n */\nexport const startTTVC = () => {\n var _calculator2;\n return (_calculator2 = calculator) === null || _calculator2 === void 0 ? void 0 : _calculator2.start(performance.now());\n};\nexport const getLastVisibleChangeTimestamp = () => {\n var _calculator3;\n return (_calculator3 = calculator) === null || _calculator3 === void 0 ? void 0 : _calculator3.getLastVisibleChangeTimestamp();\n};\n\n/**\n * Abort the current TTVC measurement.\n *\n * This method is provided as an escape hatch. Consider using it to notify\n * @dropbox/ttvc that a user interaction has occurred and continuing the\n * measurement may produce an invalid result.\n *\n * @param eventType The type of event that triggered the cancellation. This will be logged to the error callback.\n */\nexport const cancelTTVC = eventType => {\n var _calculator4;\n return (_calculator4 = calculator) === null || _calculator4 === void 0 ? void 0 : _calculator4.cancel(eventType);\n};\n\n/**\n * Call this to notify ttvc that an AJAX request has just begun.\n *\n * Instrument your site's AJAX requests with `incrementAjaxCount` and\n * `decrementAjaxCount` to ensure that ttvc is not reported early.\n *\n * For the most accurate results, `decrementAjaxCount` should be called\n * **exactly once** for each `incrementAjaxCount`.\n */\nexport const incrementAjaxCount = () => {\n const networkIdleObservable = getNetworkIdleObservable();\n networkIdleObservable.incrementAjaxCount();\n};\n\n/**\n * Call this to notify ttvc that an AJAX request has just resolved.\n *\n * Instrument your site's AJAX requests with `incrementAjaxCount` and\n * `decrementAjaxCount` to ensure that ttvc is not reported early.\n *\n * For the most accurate results, `decrementAjaxCount` should be called\n * **exactly once** for each `incrementAjaxCount`.\n */\nexport const decrementAjaxCount = () => {\n const networkIdleObservable = getNetworkIdleObservable();\n networkIdleObservable.decrementAjaxCount();\n};","import { makeTraceHttpRequestHeaders } from './utils/make-trace-http-request-headers';\nconst state = {\n context: null\n};\nexport const setActiveTrace = (traceId, spanId, type) => {\n state.context = {\n traceId,\n spanId,\n type\n };\n};\nexport const getActiveTrace = () => state.context || undefined;\nexport const clearActiveTrace = () => {\n state.context = null;\n};\nexport const getActiveTraceHttpRequestHeaders = _url => {\n if (state.context === null) {\n return null;\n }\n const {\n traceId,\n spanId\n } = state.context;\n return makeTraceHttpRequestHeaders(traceId, spanId);\n};","import { bind } from 'bind-event-listener';\nconst timings = [];\nlet wasHiddenFlag;\nlet setupFlag = false;\nfunction isPageHidden() {\n if ('visibilityState' in document) {\n return document.visibilityState === 'hidden';\n } else {\n // @ts-expect-error - Property 'hidden' does not exist on type 'never'.\n return document.hidden;\n }\n}\nconst SIZE = 50;\nlet insertIndex = 0;\nfunction pushHidden(isPageHiddenFlag, time) {\n timings[insertIndex] = {\n time: time !== null && time !== void 0 ? time : performance.now(),\n hidden: isPageHiddenFlag\n };\n insertIndex = (insertIndex + 1) % SIZE;\n wasHiddenFlag = isPageHiddenFlag;\n}\nfunction handleChange() {\n const isPageHiddenFlag = isPageHidden();\n if (isPageHiddenFlag) {\n if (!wasHiddenFlag) {\n pushHidden(isPageHiddenFlag);\n }\n wasHiddenFlag = true;\n } else {\n if (wasHiddenFlag) {\n pushHidden(isPageHiddenFlag);\n }\n wasHiddenFlag = false;\n }\n}\nfunction setup() {\n bind(window, {\n type: 'pageshow',\n listener: handleChange\n });\n bind(window, {\n type: 'pagehide',\n listener: handleChange\n });\n bind(document, {\n type: 'visibilitychange',\n listener: handleChange\n });\n}\nexport function setupHiddenTimingCapture() {\n if (!setupFlag) {\n const isPageHiddenFlag = isPageHidden();\n pushHidden(isPageHiddenFlag, 0);\n setup();\n setupFlag = true;\n }\n}\nexport function getPageVisibilityState(start, end) {\n // Desirable default value is visible\n if (timings.length === 0) {\n return 'visible';\n }\n const currentSize = timings.length;\n let hiddenState = 'mixed';\n let startIdx = insertIndex;\n let endIdx = insertIndex;\n\n // currentSize is capped at SIZE.\n for (let i = 0; i < currentSize; i++) {\n const tmpIdx = (insertIndex + i) % currentSize;\n if (timings[tmpIdx].time <= end) {\n endIdx = tmpIdx;\n if (timings[tmpIdx].time <= start) {\n startIdx = tmpIdx;\n }\n }\n }\n if (endIdx - startIdx === 0) {\n if (timings[startIdx].hidden) {\n hiddenState = 'hidden';\n } else {\n hiddenState = 'visible';\n }\n }\n return hiddenState;\n}","import { createContext } from 'react';\n\n// Same structure as react's useRef.\n// This allows modals to use a ref to scope their value\n// const id = useRef(null);\n// ...<\n\n// The default InteractionID object is a global singleton\n// It's the one that holds the root value used in routing,\n// and is overwritten when we have new interactions start.\nexport const DefaultInteractionID = {\n current: null\n};\n\n// We use a context to allow modals to have their own lifecycle\nexport default /*#__PURE__*/createContext(DefaultInteractionID);\nexport const getInteractionId = () => DefaultInteractionID;\nexport const useInteractionId = () => DefaultInteractionID;","import { redactValue } from './common/utils';\nexport { redactValue } from './common/utils';\nexport const allFeatureFlagsAccessed = new Map();\nexport const currentFeatureFlagsAccessed = new Map();\n\n/**\n * Used for tracking accessed feature flags in \"@atlassian/jira-feature-flagging\".\n * */\nexport const addFeatureFlagAccessed = (featureFlagName, featureFlagValue) => {\n const value = redactValue(featureFlagValue);\n allFeatureFlagsAccessed.set(featureFlagName, value);\n currentFeatureFlagsAccessed.set(featureFlagName, value);\n};","const interactions = new Map();\nexport default interactions;","import { v4 as createUUID } from 'uuid';\nimport coinflip from '@atlassian/ufo-coinflip';\nimport { getAwaitBM3TTIList, getCapabilityRate } from '@atlassian/ufo-config';\nimport { cancelTTVC } from '@atlassian/ufo-dropbox-ttvc';\nimport { clearActiveTrace } from '@atlassian/ufo-experience-trace-id-context';\nimport { allFeatureFlagsAccessed, currentFeatureFlagsAccessed } from '@atlassian/ufo-feature-flags-accessed';\nimport { getInteractionId } from '@atlassian/ufo-interaction-id-context';\nimport { getVCObserver } from '@atlassian/ufo-vc';\nimport interactions from './common/constants';\nconst PreviousInteractionLog = {\n name: undefined,\n isAborted: undefined\n};\nconst interactionQueue = [];\nconst segmentCache = new Map();\nconst CLEANUP_TIMEOUT = 60 * 1000;\nconst CLEANUP_TIMEOUT_AFTER_APDEX = 15 * 1000;\nconst segmentObservers = [];\nexport function getActiveInteraction() {\n const interactionId = getInteractionId();\n if (!interactionId.current) {\n return;\n }\n return interactions.get(interactionId.current);\n}\nfunction labelStackToString(labelStack, name) {\n var _stack$map;\n const stack = [...(labelStack !== null && labelStack !== void 0 ? labelStack : [])];\n if (name) {\n stack.push({\n name\n });\n }\n return (_stack$map = stack.map(l => l.name)) === null || _stack$map === void 0 ? void 0 : _stack$map.join('/');\n}\nfunction labelStackToIdString(labelStack) {\n var _labelStack$map;\n return labelStack === null || labelStack === void 0 ? void 0 : (_labelStack$map = labelStack.map(l => 'segmentId' in l ? `${l.name}:${l.segmentId}` : `${l.name}`)) === null || _labelStack$map === void 0 ? void 0 : _labelStack$map.join('/');\n}\nfunction addSegmentObserver(observer) {\n segmentObservers.push(observer);\n for (const segmentInfo of segmentCache.values()) {\n observer.onAdd(segmentInfo);\n }\n}\nfunction removeSegmentObserver(observer) {\n const index = segmentObservers.findIndex(obs => obs === observer);\n if (index !== -1) {\n segmentObservers.splice(index, 1);\n }\n}\nexport function remove(interactionId) {\n interactions.delete(interactionId);\n}\nexport function updatePageLoadInteractionName(ufoName, routeName = ufoName) {\n const interaction = getActiveInteraction();\n if (!interaction || interaction.type !== 'page_load' && interaction.type !== 'transition') {\n return;\n }\n interaction.ufoName = ufoName;\n interaction.routeName = routeName;\n}\nexport function addMetadata(interactionId, data) {\n const interaction = interactions.get(interactionId);\n if (interaction != null) {\n Object.keys(data).forEach(key => {\n interaction.metaData[key] = data[key];\n });\n }\n}\nexport function addCustomData(interactionId, labelStack, data) {\n const interaction = interactions.get(interactionId);\n if (interaction != null) {\n Object.keys(data).forEach(i => {\n interaction.customData.push({\n labelStack,\n data: {\n [i]: data[i]\n }\n });\n });\n }\n}\nexport function addCustomTiming(interactionId, labelStack, data) {\n const interaction = interactions.get(interactionId);\n if (interaction != null) {\n interaction.customTimings.push({\n labelStack,\n data\n });\n if (process.env.NODE_ENV !== 'production') {\n for (const [key, timingData] of Object.entries(data)) {\n const {\n startTime,\n endTime\n } = timingData;\n try {\n // for Firefox 102 and older\n performance.measure(`🛸 ${labelStackToString(labelStack, key)} [custom_timing]`, {\n start: startTime,\n end: endTime\n });\n } catch (e) {\n // do nothing\n }\n }\n }\n }\n}\nexport function addMark(interactionId, type, name, labelStack, time = performance.now()) {\n const interaction = interactions.get(interactionId);\n if (interaction != null) {\n interaction.marks.push({\n type,\n name,\n labelStack,\n time\n });\n }\n if (process.env.NODE_ENV !== 'production') {\n performance.mark(`🛸 ${labelStackToString(labelStack, name)} [${type}]`, {\n startTime: time\n });\n }\n}\nexport function addMarkToAll(type, name, labelStack, time = performance.now()) {\n interactions.forEach(interaction => {\n interaction.marks.push({\n type,\n name,\n labelStack,\n time\n });\n });\n if (process.env.NODE_ENV !== 'production') {\n performance.mark(`🛸 ${labelStackToString(labelStack, name)} [${type}]`, {\n startTime: time\n });\n }\n}\nexport function addSpan(interactionId, type, name, labelStack, start, end = performance.now(), size) {\n const interaction = interactions.get(interactionId);\n if (interaction != null) {\n interaction.spans.push({\n type,\n name,\n labelStack,\n start,\n end,\n size\n });\n if (process.env.NODE_ENV !== 'production') {\n try {\n // for Firefox 102 and older\n performance.measure(`🛸 ${labelStackToString(labelStack, name)} [${type}]`, {\n start,\n end\n });\n } catch (e) {\n // do nothing\n }\n }\n }\n}\nexport function addSpanToAll(type, name, labelStack, start, end = performance.now(), size = 0) {\n interactions.forEach(interaction => {\n interaction.spans.push({\n type,\n name,\n labelStack,\n start,\n end,\n size\n });\n });\n if (process.env.NODE_ENV !== 'production') {\n try {\n // for Firefox 102 and older\n performance.measure(`🛸 ${labelStackToString(labelStack, name)} [${type}]`, {\n start,\n end\n });\n } catch (e) {\n // do nothing\n }\n }\n}\nexport function addPreload(moduleId, timestamp) {\n addMarkToAll('bundle_preload', moduleId, null, timestamp);\n}\nexport function addLoad(identifier, start, end) {\n addSpanToAll('bundle_load', identifier, null, start, end - start);\n}\nconst moduleLoadingRequests = {};\nexport function extractModuleName(input) {\n let result = input !== null && input !== void 0 ? input : '';\n result = result.replace(/^\\.\\/src\\/packages\\//, '');\n result = result.replace(/^\\.\\/node_modules\\//, '');\n result = result.replace(/(\\/src)?\\/(index|main)\\.(tsx|ts|js|jsx)$/, '');\n return result;\n}\nexport function addHold(interactionId, labelStack, name) {\n const interaction = interactions.get(interactionId);\n const id = createUUID();\n if (interaction != null) {\n const start = performance.now();\n interaction.holdActive.set(id, {\n labelStack,\n name,\n start\n });\n return () => {\n const end = performance.now();\n if (process.env.NODE_ENV !== 'production') {\n try {\n // for Firefox 102 and older\n performance.measure(`🛸 ${labelStackToString(labelStack, name)} [hold]`, {\n start,\n end\n });\n } catch (e) {\n // do nothing\n }\n }\n const currentInteraction = interactions.get(interactionId);\n const currentHold = interaction.holdActive.get(id);\n if (currentInteraction != null && currentHold != null) {\n currentInteraction.holdInfo.push({\n ...currentHold,\n end\n });\n interaction.holdActive.delete(id);\n }\n };\n }\n return () => {};\n}\nexport function addHoldByID(interactionId, labelStack, name, id, ignoreOnSubmit) {\n const interaction = interactions.get(interactionId);\n if (interaction != null) {\n const start = performance.now();\n interaction.holdActive.set(id, {\n labelStack,\n name,\n start,\n ignoreOnSubmit\n });\n }\n return () => {};\n}\nexport function removeHoldByID(interactionId, id) {\n const interaction = interactions.get(interactionId);\n if (interaction != null) {\n const end = performance.now();\n const currentInteraction = interactions.get(interactionId);\n const currentHold = interaction.holdActive.get(id);\n if (currentInteraction != null && currentHold != null) {\n currentInteraction.holdInfo.push({\n ...currentHold,\n end\n });\n interaction.holdActive.delete(id);\n }\n }\n}\nexport function getCurrentInteractionType(interactionId) {\n const interaction = interactions.get(interactionId);\n if (interaction) {\n return interaction.type;\n }\n return null;\n}\nexport const ModuleLoadingProfiler = {\n onPreload(moduleId, _priority) {\n addPreload(extractModuleName(moduleId), performance.now());\n },\n onLoadStart(info) {\n const timeoutId = setTimeout(() => {\n delete moduleLoadingRequests[info.identifier];\n }, 30000);\n const request = {\n start: performance.now(),\n timeoutId\n };\n moduleLoadingRequests[info.identifier] = request;\n },\n onLoadComplete(info) {\n const request = moduleLoadingRequests[info.identifier];\n if (request) {\n clearTimeout(request.timeoutId);\n delete moduleLoadingRequests[info.identifier];\n addLoad(extractModuleName(info.identifier), request.start, performance.now());\n }\n },\n placeholderFallBackMounted(id, moduleId) {\n const interactionId = getInteractionId();\n const currentInteractionId = interactionId.current;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n addHoldByID(currentInteractionId, [], moduleId, id);\n },\n placeholderFallBackUnmounted(id) {\n const interactionId = getInteractionId();\n const currentInteractionId = interactionId.current;\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n removeHoldByID(currentInteractionId, id);\n }\n};\nexport function addError(interactionId, name, labelStack, errorType, errorMessage, errorStack, forcedError) {\n const interaction = interactions.get(interactionId);\n if (interaction != null) {\n interaction.errors.push({\n name,\n labelStack,\n errorType,\n errorMessage,\n errorStack,\n forcedError\n });\n }\n}\nexport function addErrorToAll(name, labelStack, errorType, errorMessage, errorStack) {\n interactions.forEach(interaction => {\n interaction.errors.push({\n name,\n labelStack,\n errorType,\n errorMessage,\n errorStack\n });\n });\n}\nexport const addProfilerTimings = (interactionId, labelStack, type, actualDuration, baseDuration, startTime, commitTime) => {\n const interaction = interactions.get(interactionId);\n if (interaction != null) {\n interaction.reactProfilerTimings.push({\n labelStack,\n type,\n actualDuration,\n baseDuration,\n startTime,\n commitTime\n });\n }\n};\nconst pushToQueue = (id, data) => {\n interactionQueue.push({\n id,\n data\n });\n};\nlet handleInteraction = pushToQueue;\nfunction callCleanUpCallbacks(interaction) {\n interaction.cleanupCallbacks.reverse().forEach(cleanUpCallback => {\n cleanUpCallback();\n });\n}\nconst finishInteraction = (id, data, endTime = performance.now()) => {\n // eslint-disable-next-line no-param-reassign\n data.end = endTime;\n try {\n // for Firefox 102 and older\n performance.measure(`🛸 ${data.ufoName} [ttai]`, {\n start: data.start,\n end: data.end\n });\n } catch (e) {\n // do nothing\n }\n if (data.featureFlags) {\n // eslint-disable-next-line no-param-reassign\n data.featureFlags.during = Object.fromEntries(currentFeatureFlagsAccessed);\n }\n clearActiveTrace();\n callCleanUpCallbacks(data);\n remove(id);\n PreviousInteractionLog.name = data.ufoName || 'unknown';\n PreviousInteractionLog.isAborted = data.abortReason != null;\n if (data.ufoName) {\n handleInteraction(id, data);\n }\n if (process.env.NODE_ENV !== 'production') {\n const profilerTimingMap = new Map();\n data.reactProfilerTimings.forEach(profilerTiming => {\n const labelStackId = labelStackToIdString(profilerTiming.labelStack);\n if (labelStackId) {\n var _profilerTimingMap$ge, _timing$start, _timing$end;\n const timing = (_profilerTimingMap$ge = profilerTimingMap.get(labelStackId)) !== null && _profilerTimingMap$ge !== void 0 ? _profilerTimingMap$ge : {\n labelStack: profilerTiming.labelStack\n };\n timing.start = profilerTiming.startTime < ((_timing$start = timing.start) !== null && _timing$start !== void 0 ? _timing$start : Number.MAX_SAFE_INTEGER) ? profilerTiming.startTime : timing.start;\n timing.end = profilerTiming.commitTime > ((_timing$end = timing.end) !== null && _timing$end !== void 0 ? _timing$end : Number.MIN_SAFE_INTEGER) ? profilerTiming.commitTime : timing.end;\n profilerTimingMap.set(labelStackId, timing);\n }\n });\n try {\n // for Firefox 102 and older\n for (const [, {\n labelStack,\n start,\n end\n }] of profilerTimingMap.entries()) {\n performance.measure(`🛸 ${labelStackToString(labelStack)} [segment_ttai]`, {\n start,\n end\n });\n }\n } catch (e) {\n // do nothing\n }\n }\n};\nexport const sinkInteractionHandler = sinkFn => {\n if (handleInteraction === pushToQueue) {\n handleInteraction = sinkFn;\n interactionQueue.forEach(interaction => {\n sinkFn(interaction.id, interaction.data);\n });\n interactionQueue.length = 0;\n }\n};\nexport function tryComplete(interactionId, endTime) {\n const interaction = interactions.get(interactionId);\n if (interaction != null) {\n const noMoreHolds = interaction.holdActive.size === 0;\n if (noMoreHolds) {\n finishInteraction(interactionId, interaction, endTime);\n }\n }\n}\nfunction callCancelCallbacks(interaction) {\n interaction.cancelCallbacks.reverse().forEach(cancelCallback => {\n cancelCallback();\n });\n}\nexport function abort(interactionId, abortReason) {\n const interaction = interactions.get(interactionId);\n if (interaction != null) {\n callCancelCallbacks(interaction);\n interaction.abortReason = abortReason;\n finishInteraction(interactionId, interaction);\n }\n}\nexport function abortByNewInteraction(interactionId, interactionName) {\n cancelTTVC();\n const interaction = interactions.get(interactionId);\n if (interaction != null) {\n callCancelCallbacks(interaction);\n interaction.abortReason = 'new_interaction';\n interaction.abortedByInteractionName = interactionName;\n finishInteraction(interactionId, interaction);\n }\n}\nexport function abortAll(abortReason, abortedByInteractionName) {\n cancelTTVC();\n interactions.forEach((interaction, interactionId) => {\n callCancelCallbacks(interaction);\n // eslint-disable-next-line no-param-reassign\n interaction.abortReason = abortReason;\n if (abortedByInteractionName != null) {\n // eslint-disable-next-line no-param-reassign\n interaction.abortedByInteractionName = abortedByInteractionName;\n }\n finishInteraction(interactionId, interaction);\n });\n}\nexport function addOnCancelCallback(id, cancelCallback) {\n const interaction = interactions.get(id);\n interaction === null || interaction === void 0 ? void 0 : interaction.cancelCallbacks.push(cancelCallback);\n}\nexport function addNewInteraction(interactionId, ufoName, type, startTime, rate, labelStack, routeName, trace = null) {\n let previousTime = startTime;\n let timeoutTime = CLEANUP_TIMEOUT;\n const timerID = setTimeout(() => {\n abort(interactionId, 'timeout');\n }, CLEANUP_TIMEOUT);\n function changeTimeout(newTime) {\n // we compare if the time left is lower than the new time to no\n // extend the timeout beyond the initial waiting time\n const currentTime = performance.now();\n const timeLeft = timeoutTime - (currentTime - previousTime);\n if (timeLeft < newTime) {\n return;\n }\n clearTimeout(this.timerID);\n const newTimerID = setTimeout(() => {\n abort(interactionId, 'timeout');\n }, newTime);\n timeoutTime = newTime;\n previousTime = currentTime;\n this.timerID = newTimerID;\n }\n const addFeatureFlagsToInteraction = coinflip(getCapabilityRate('feature_flag_access'));\n const metrics = {\n id: interactionId,\n start: startTime,\n end: 0,\n ufoName,\n type,\n previousInteractionName: PreviousInteractionLog.name,\n isPreviousInteractionAborted: PreviousInteractionLog.isAborted === true,\n marks: [],\n customData: [],\n customTimings: [],\n spans: [],\n requestInfo: [],\n reactProfilerTimings: [],\n holdInfo: [],\n holdActive: new Map(),\n // measure when we execute this code\n // from this we can measure the input delay -\n // how long the browser took to hand execution back to JS)\n measureStart: performance.now(),\n rate,\n cancelCallbacks: [],\n metaData: {},\n errors: [],\n apdex: [],\n labelStack,\n routeName: routeName !== null && routeName !== void 0 ? routeName : ufoName,\n featureFlags: addFeatureFlagsToInteraction ? {\n prior: Object.fromEntries(allFeatureFlagsAccessed),\n during: {}\n } : undefined,\n knownSegments: [],\n cleanupCallbacks: [],\n awaitReactProfilerCount: 0,\n redirects: [],\n timerID,\n changeTimeout,\n trace\n };\n if (addFeatureFlagsToInteraction) {\n currentFeatureFlagsAccessed.clear();\n }\n interactions.set(interactionId, metrics);\n const segmentObserver = {\n onAdd(segment) {\n metrics.knownSegments.push(segment);\n },\n onRemove() {}\n };\n addSegmentObserver(segmentObserver);\n metrics.cleanupCallbacks.push(() => {\n removeSegmentObserver(segmentObserver);\n });\n metrics.cleanupCallbacks.push(() => {\n clearTimeout(metrics.timerID);\n });\n const awaitBM3TTIList = getAwaitBM3TTIList();\n if (awaitBM3TTIList.includes(ufoName)) {\n addHoldByID(interactionId, [], ufoName, ufoName, true);\n }\n if (type === 'transition') {\n getVCObserver().start({\n startTime\n });\n }\n}\nexport function addBrowserMetricEvent(event) {\n const interaction = getActiveInteraction();\n if (interaction) {\n var _event$config;\n interaction.legacyMetrics = interaction.legacyMetrics || [];\n interaction.legacyMetrics.push(event);\n if ((interaction.type === 'page_load' || interaction.type === 'transition') && ((_event$config = event.config) === null || _event$config === void 0 ? void 0 : _event$config.type) === 'PAGE_LOAD') {\n interaction.changeTimeout(CLEANUP_TIMEOUT_AFTER_APDEX);\n removeHoldByID(interaction.id, interaction.ufoName);\n }\n }\n}\nexport function addApdexToAll(apdex) {\n interactions.forEach((interaction, key) => {\n interaction.apdex.push(apdex);\n try {\n var _apdex$startTime;\n // for Firefox 102 and older\n performance.measure(`🛸 ${apdex.key} [bm3_tti]`, {\n start: (_apdex$startTime = apdex.startTime) !== null && _apdex$startTime !== void 0 ? _apdex$startTime : interaction.start,\n end: apdex.stopTime\n });\n } catch (e) {\n // do nothing\n }\n if (interaction.type === 'page_load' || interaction.type === 'transition') {\n interaction.changeTimeout(CLEANUP_TIMEOUT_AFTER_APDEX);\n removeHoldByID(key, interaction.ufoName);\n }\n });\n}\nexport function addApdex(interactionId, apdexInfo) {\n const interaction = interactions.get(interactionId);\n if (interaction != null) {\n interaction.apdex.push(apdexInfo);\n try {\n var _apdexInfo$startTime;\n // for Firefox 102 and older\n performance.measure(`🛸 ${apdexInfo.key} [bm3_tti]`, {\n start: (_apdexInfo$startTime = apdexInfo.startTime) !== null && _apdexInfo$startTime !== void 0 ? _apdexInfo$startTime : interaction.start,\n end: apdexInfo.stopTime\n });\n } catch (e) {\n // do nothing\n }\n if (interaction.type === 'page_load' || interaction.type === 'transition') {\n interaction.changeTimeout(CLEANUP_TIMEOUT_AFTER_APDEX);\n removeHoldByID(interactionId, interaction.ufoName);\n }\n }\n}\nexport function addRequestInfo(interactionId, labelStack, requestInfo) {\n const interaction = interactions.get(interactionId);\n if (interaction != null) {\n interaction.requestInfo.push({\n labelStack,\n ...requestInfo\n });\n }\n}\nfunction isSegmentLabel(obj) {\n return obj && typeof obj.name === 'string' && typeof obj.segmentId === 'string';\n}\nfunction getSegmentCacheKey(labelStack) {\n return labelStack.map(l => {\n if (isSegmentLabel(l)) {\n return `${l.name}_${l.segmentId}`;\n }\n return l.name;\n }).join('|');\n}\nexport function addSegment(labelStack) {\n const key = getSegmentCacheKey(labelStack);\n const existingSegment = segmentCache.get(key);\n if (!existingSegment) {\n const segmentInfo = {\n labelStack\n };\n segmentCache.set(key, segmentInfo);\n segmentObservers.forEach(observer => {\n observer.onAdd(segmentInfo);\n });\n }\n}\nexport function removeSegment(labelStack) {\n const key = getSegmentCacheKey(labelStack);\n const segmentInfo = segmentCache.get(key);\n if (segmentInfo) {\n segmentCache.delete(JSON.stringify(labelStack));\n segmentObservers.forEach(observer => {\n observer.onRemove(segmentInfo);\n });\n }\n}\nexport function addRedirect(interactionId, fromUfoName, nextUfoName, nextRouteName, time) {\n const interaction = interactions.get(interactionId);\n if (interaction != null) {\n interaction.ufoName = nextUfoName;\n interaction.routeName = nextRouteName;\n interaction.redirects.push({\n fromInteractionName: fromUfoName,\n time\n });\n if (process.env.NODE_ENV !== 'production') {\n const prevRedirect = interaction.redirects.at(-2);\n try {\n var _prevRedirect$time;\n // for Firefox 102 and older\n performance.measure(`🛸 ${nextUfoName} [redirect]`, {\n start: (_prevRedirect$time = prevRedirect === null || prevRedirect === void 0 ? void 0 : prevRedirect.time) !== null && _prevRedirect$time !== void 0 ? _prevRedirect$time : interaction.start,\n end: time\n });\n } catch (e) {\n // do nothing\n }\n }\n }\n}","// The UFORouteName object is a global singleton\nconst UFORouteName = {\n current: null\n};\nexport default UFORouteName;","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nconst state = {\n normal: 1,\n waitingForFirstRender: 2,\n ignoring: 3\n};\nexport class Observers {\n constructor(opts) {\n _defineProperty(this, \"observedMutations\", new Map());\n _defineProperty(this, \"elementsInView\", new Set());\n _defineProperty(this, \"callbacks\", new Set());\n _defineProperty(this, \"totalTime\", 0);\n _defineProperty(this, \"_startMeasureTimestamp\", -1);\n _defineProperty(this, \"ssr\", {\n state: state.normal,\n reactRootElement: null,\n renderStart: -1,\n renderStop: -1\n });\n _defineProperty(this, \"selectorConfig\", {\n id: false,\n testId: false,\n role: false,\n className: true\n });\n _defineProperty(this, \"subscribeResults\", cb => {\n this.callbacks.add(cb);\n });\n _defineProperty(this, \"observeElement\", (node, mutation, _type, ignored) => {\n var _this$intersectionObs;\n (_this$intersectionObs = this.intersectionObserver) === null || _this$intersectionObs === void 0 ? void 0 : _this$intersectionObs.observe(node);\n this.observedMutations.set(node, {\n mutation,\n ignored\n });\n });\n this.selectorConfig = opts.selectorConfig;\n this.intersectionObserver = this.getIntersectionObserver();\n this.mutationObserver = this.getMutationObserver();\n }\n observe() {\n this.totalTime = 0;\n this.ssr = {\n state: state.normal,\n reactRootElement: null,\n renderStart: -1,\n renderStop: -1\n };\n this.mutationObserver.observe(document.body, {\n attributeFilter: ['hidden', 'style', 'src'],\n attributeOldValue: true,\n attributes: true,\n childList: true,\n subtree: true\n });\n }\n disconnect() {\n this.mutationObserver.disconnect();\n this.intersectionObserver.disconnect();\n this.observedMutations = new Map();\n this.elementsInView = new Set();\n this.callbacks = new Set();\n this.ssr.reactRootElement = null;\n }\n getTotalTime() {\n return this.totalTime;\n }\n setReactRootElement(element) {\n this.ssr.reactRootElement = element;\n }\n setReactRootRenderStart(startTime = performance.now()) {\n this.ssr.renderStart = startTime;\n this.ssr.state = state.waitingForFirstRender;\n }\n setReactRootRenderStop(stopTime = performance.now()) {\n this.ssr.renderStop = stopTime;\n }\n getMutationObserver() {\n return new MutationObserver(mutations => {\n this.measureStart();\n mutations.forEach(mutation => {\n // patching element if timestamp not automatically added\n // eslint-disable-next-line no-param-reassign\n mutation.timestamp = mutation.timestamp === undefined ? performance.now() : mutation.timestamp;\n let ignored = false;\n if (this.ssr.state === state.waitingForFirstRender && mutation.timestamp > this.ssr.renderStart && mutation.target === this.ssr.reactRootElement) {\n this.ssr.state = state.ignoring;\n if (this.ssr.renderStop === -1) {\n // arbitrary 500ms DOM update window\n this.ssr.renderStop = mutation.timestamp + 500;\n }\n ignored = true;\n }\n if (this.ssr.state === state.ignoring && mutation.timestamp > this.ssr.renderStart && mutation.target === this.ssr.reactRootElement) {\n if (mutation.timestamp <= this.ssr.renderStop) {\n ignored = true;\n } else {\n this.ssr.state = state.normal;\n }\n }\n if (mutation.type === 'childList') {\n mutation.addedNodes.forEach(node => {\n if (node instanceof HTMLElement\n /* && !node instanceof HTMLStyleElement && !node instanceof HTMLScriptElement && !node instanceof HTMLLinkElement */) {\n this.observeElement(node, mutation, 'html', ignored);\n }\n if (node instanceof Text && node.parentElement != null) {\n this.observeElement(node.parentElement, mutation, 'text', ignored);\n }\n });\n mutation.removedNodes.forEach(node => {\n if (node instanceof Element) {\n var _this$intersectionObs2;\n this.elementsInView.delete(node);\n (_this$intersectionObs2 = this.intersectionObserver) === null || _this$intersectionObs2 === void 0 ? void 0 : _this$intersectionObs2.unobserve(node);\n }\n });\n } else if (mutation.type === 'attributes') {\n mutation.addedNodes.forEach(node => {\n if (node instanceof HTMLElement) {\n this.observeElement(node, mutation, 'attr', ignored);\n }\n });\n }\n });\n this.measureStop();\n });\n }\n getElementName(element) {\n try {\n const tagName = element.localName;\n const id = this.selectorConfig.id && element.id ? `#${element.id}` : '';\n let testId = this.selectorConfig.testId ? element.getAttribute('data-testid') || element.getAttribute('data-test-id') : '';\n testId = testId ? `[testid=${testId}]` : '';\n let role = this.selectorConfig.role ? element.getAttribute('role') : '';\n role = role ? `[role=${role}]` : '';\n let classList = this.selectorConfig.className ? Array.from(element.classList).join('.') : '';\n classList = classList === '' ? '' : `.${classList}`;\n const attrs = [id, testId, role].join('');\n let idString = '';\n if (attrs === '' && classList === '') {\n const parent = element.parentElement ? this.getElementName(element.parentElement) : 'unknown';\n idString = `${parent} > ${tagName}`;\n } else {\n idString = [tagName, attrs || classList].join('');\n }\n return idString;\n } catch (e) {\n return 'error';\n }\n }\n getIntersectionObserver() {\n return new IntersectionObserver(entries => {\n this.measureStart();\n entries.forEach(({\n isIntersecting,\n intersectionRect: ir,\n target\n }) => {\n const data = this.observedMutations.get(target);\n this.observedMutations.delete(target);\n if (isIntersecting && ir.width > 0 && ir.height > 0) {\n if (!(target instanceof HTMLElement)) {\n return;\n }\n if (!(data !== null && data !== void 0 && data.mutation)) {\n // ignore intersection report without recent mutation\n return;\n }\n this.callbacks.forEach(callback => {\n let elementName;\n try {\n elementName = this.getElementName(target);\n } catch (e) {\n elementName = 'error';\n }\n callback(data.mutation.timestamp || performance.now(), ir, elementName, target, data.ignored);\n });\n this.elementsInView.add(target);\n } else {\n this.elementsInView.delete(target);\n }\n });\n this.measureStop();\n });\n }\n measureStart() {\n this._startMeasureTimestamp = performance.now();\n }\n measureStop() {\n if (this._startMeasureTimestamp === -1) {\n return;\n }\n this.totalTime += performance.now() - this._startMeasureTimestamp;\n this._startMeasureTimestamp = -1;\n }\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { bind } from 'bind-event-listener';\nimport { initDevTools } from '../vc-dev-tools/replay';\nimport { Observers } from './observers';\nconst abortReason = {\n scroll: 'scroll',\n keypress: 'keypress',\n resize: 'resize',\n error: 'error'\n};\nfunction getViewportWidth() {\n let documentWidth;\n try {\n documentWidth = document.documentElement.clientWidth || 0;\n } catch (e) {\n documentWidth = 0;\n }\n return Math.max(documentWidth, window.innerWidth || 0);\n}\nfunction getViewportHeight() {\n let documentHeight;\n try {\n documentHeight = document.documentElement.clientHeight || 0;\n } catch (e) {\n documentHeight = 0;\n }\n return Math.max(documentHeight, window.innerHeight || 0);\n}\nexport class VCObserver {\n constructor(options) {\n /* abort logic */\n _defineProperty(this, \"abortReason\", {\n reason: null,\n info: '',\n timestamp: -1,\n blocking: false\n });\n _defineProperty(this, \"outOfBoundaryInfo\", '');\n /** config * */\n _defineProperty(this, \"VCParts\", ['75', '80', '85', '90', '95', '98', '99']);\n _defineProperty(this, \"viewport\", {\n w: 0,\n h: 0\n });\n /* heatmap */\n _defineProperty(this, \"arraySize\", 0);\n _defineProperty(this, \"componentsLog\", {});\n _defineProperty(this, \"active\", false);\n _defineProperty(this, \"totalTime\", 0);\n _defineProperty(this, \"startTime\", 0);\n _defineProperty(this, \"_startMeasureTimestamp\", -1);\n _defineProperty(this, \"ssr\", {\n reactRendered: -1\n });\n _defineProperty(this, \"unbind\", {});\n _defineProperty(this, \"getAbortReason\", () => {\n if (this.abortReason.reason === null) {\n return null;\n }\n const info = this.abortReason.info !== '' ? ` ${this.abortReason.info}` : '';\n return `${this.abortReason.reason}${info}`;\n });\n _defineProperty(this, \"getVCResult\", ({\n start,\n stop,\n tti,\n prefix\n }) => {\n this.measureStart();\n if (!this.active) {\n this.measureStop();\n return {};\n }\n const fullPrefix = prefix !== undefined && prefix !== '' ? `${prefix}:` : '';\n this.stop();\n const abortReason = this.getAbortReason();\n if (abortReason !== null && this.abortReason.blocking) {\n return {\n [`${fullPrefix}vc:state`]: false,\n [`${fullPrefix}vc:abort:reason`]: abortReason,\n [`${fullPrefix}vc:abort:timestamp`]: this.abortReason.timestamp\n };\n }\n const {\n VC,\n VCBox,\n VCEntries,\n totalPainted\n } = this.calculateVC(this.ssrInclusiveHeatmap, true);\n const ssrVC = this.calculateVC(this.heatmap);\n const outOfBoundary = this.outOfBoundaryInfo ? {\n [`${fullPrefix}vc:oob`]: this.outOfBoundaryInfo\n } : {};\n const oldDomUpdates = this.oldDomUpdatesEnabled ? {\n [`${fullPrefix}vc:old:dom`]: ssrVC.VCBox\n } : {};\n this.measureStop();\n\n // exposing data to devtools\n try {\n if (this.devToolsEnabled) {\n window.__vc = {\n entries: VCEntries.rel,\n log: this.componentsLog,\n metrics: {\n '75': VC['75'],\n '80': VC['80'],\n '85': VC['85'],\n '90': VC['90'],\n '95': VC['95'],\n '98': VC['98'],\n '99': VC['99'],\n tti,\n ttai: stop - start\n },\n heatmap: this.heatmap\n };\n }\n } catch (e) {\n /* do nothing */\n }\n // console.log('exposed data')\n\n const returnValue = {\n 'metrics:vc': VC,\n [`${fullPrefix}vc:state`]: true,\n [`${fullPrefix}vc:clean`]: abortReason ? false : true,\n [`${fullPrefix}vc:dom`]: VCBox,\n [`${fullPrefix}vc:updates`]: VCEntries.rel.slice(0, 50),\n // max 50\n [`${fullPrefix}vc:size`]: {\n ...this.viewport\n },\n [`${fullPrefix}vc:time`]: Math.round(this.totalTime + this.observers.getTotalTime()),\n [`${fullPrefix}vc:total`]: totalPainted,\n ...outOfBoundary,\n [`${fullPrefix}vc:old`]: ssrVC.VC,\n ...oldDomUpdates\n };\n return returnValue;\n });\n _defineProperty(this, \"handleUpdate\", (rawTime, intersectionRect, targetName, element, ignored) => {\n this.measureStart();\n if (this.abortReason.reason === null || this.abortReason.blocking === false) {\n const time = Math.round(rawTime - this.startTime);\n const mappedValues = this.mapPixelsToHeatmap(intersectionRect.left, intersectionRect.top, intersectionRect.width, intersectionRect.height);\n this.applyChangesToHeatMap(mappedValues, time, this.heatmap);\n if (!ignored) {\n this.applyChangesToHeatMap(mappedValues, time, this.ssrInclusiveHeatmap);\n }\n\n // console.log('handleUpdate', ignored, time, element === this.ssr.element, (intersectionRect.width * intersectionRect.height) / (this.viewport.w*this.viewport.h), element);\n\n if (!this.componentsLog[time]) {\n this.componentsLog[time] = [];\n }\n this.componentsLog[time].push({\n element,\n intersectionRect,\n targetName,\n ignored\n });\n }\n // devtools export\n this.measureStop();\n });\n _defineProperty(this, \"mapPixelsToHeatmap\", (left, top, width, height) => {\n const {\n w,\n h\n } = this.viewport;\n const l = Math.floor(left / w * this.arraySize);\n const t = Math.floor(top / h * this.arraySize);\n const r = Math.ceil((left + width) / w * this.arraySize);\n const b = Math.ceil((top + height) / h * this.arraySize);\n\n // that info is temporary to get info why it goes over boundary\n if (this.outOfBoundaryInfo === '') {\n let outOfBoundaryInfo = '';\n if (r > this.arraySize) {\n outOfBoundaryInfo += ` r ${r} ! ${left} ${width}`;\n }\n if (b > this.arraySize) {\n outOfBoundaryInfo += ` r ${r} ! ${top} ${height}`;\n }\n this.outOfBoundaryInfo = outOfBoundaryInfo;\n }\n\n // correct values to min - 0, max - arraySize\n const result = {\n l: Math.max(0, l),\n t: Math.max(0, t),\n r: Math.min(this.arraySize, r),\n b: Math.min(this.arraySize, b)\n };\n return result;\n });\n _defineProperty(this, \"attachAbortListeners\", () => {\n this.detachAbortListeners();\n const wheelUnbind = bind(window, {\n type: 'wheel',\n listener: e => {\n this.setAbortReason(abortReason.scroll, e.timeStamp);\n },\n options: {\n passive: true,\n once: true\n }\n });\n const keyDownUnbind = bind(window, {\n type: 'keydown',\n listener: e => {\n this.setAbortReason(abortReason.keypress, e.timeStamp);\n },\n options: {\n once: true\n }\n });\n const resizeUnbind = bind(window, {\n type: 'resize',\n listener: e => {\n if (getViewportWidth() !== this.viewport.w || getViewportHeight() !== this.viewport.h) {\n var _this$unbind$resize, _this$unbind;\n this.setAbortReason(abortReason.resize, e.timeStamp);\n (_this$unbind$resize = (_this$unbind = this.unbind).resize) === null || _this$unbind$resize === void 0 ? void 0 : _this$unbind$resize.call(_this$unbind);\n delete this.unbind.resize;\n }\n }\n });\n this.unbind = {\n wheel: wheelUnbind,\n keyDown: keyDownUnbind,\n resize: resizeUnbind\n };\n });\n this.arraySize = options.heatmapSize || 200;\n this.devToolsEnabled = options.devToolsEnabled || false;\n this.oldDomUpdatesEnabled = options.oldDomUpdates || false;\n this.observers = new Observers({\n selectorConfig: options.selectorConfig || {\n id: false,\n testId: false,\n role: false,\n className: true\n }\n });\n this.heatmap = this.getCleanHeatmap();\n this.ssrInclusiveHeatmap = this.getCleanHeatmap();\n if (options.devToolsEnabled) {\n initDevTools();\n }\n }\n start({\n startTime\n }) {\n this.setViewportSize();\n this.resetState();\n this.startTime = startTime;\n this.active = true;\n this.attachAbortListeners();\n this.observers.subscribeResults(this.handleUpdate);\n this.observers.observe();\n }\n stop() {\n this.observers.disconnect();\n this.detachAbortListeners();\n }\n calculateVC(heatmap, addToPerformance = false) {\n const lastUpdate = {};\n let totalPainted = 0;\n heatmap.forEach(line => {\n line.forEach(entry => {\n const rounded = Math.floor(entry);\n totalPainted += entry > 0 ? 1 : 0;\n if (rounded > 0) {\n lastUpdate[rounded] = lastUpdate[rounded] ? lastUpdate[rounded] + 1 : 1;\n }\n });\n });\n const entries = Object.entries(lastUpdate).map(a => [parseInt(a[0], 10), a[1]]).sort((a, b) => a[0] > b[0] ? 1 : -1);\n const VC = this.makeVCReturnObj();\n const VCBox = this.makeVCReturnObj();\n entries.reduce((acc = 0, v) => {\n const VCRatio = v[1] / totalPainted + acc;\n const time = v[0];\n this.VCParts.forEach(key => {\n const value = parseInt(key, 10);\n if ((VC[key] === null || VC[key] === undefined) && VCRatio >= value / 100) {\n var _this$componentsLog$t;\n VC[key] = time;\n VCBox[key] = (_this$componentsLog$t = this.componentsLog[time]) === null || _this$componentsLog$t === void 0 ? void 0 : _this$componentsLog$t.map(v => v.targetName);\n }\n });\n return VCRatio;\n }, 0);\n try {\n if (addToPerformance) {\n this.VCParts.forEach(key => {\n const duration = VC[key];\n if (duration !== null && duration !== undefined) {\n performance.measure(`VC${key}`, {\n start: 0,\n duration\n });\n }\n });\n }\n } catch (e) {\n /* empty */\n }\n const VCEntries = entries.reduce((acc, [timestamp, entryPainted], i) => {\n var _acc$abs, _this$componentsLog$t2;\n const currentlyPainted = entryPainted + (((_acc$abs = acc.abs[i - 1]) === null || _acc$abs === void 0 ? void 0 : _acc$abs[1]) || 0);\n const currentlyPaintedRatio = Math.round(currentlyPainted / totalPainted * 1000) / 10;\n const logEntry = (_this$componentsLog$t2 = this.componentsLog[timestamp]) === null || _this$componentsLog$t2 === void 0 ? void 0 : _this$componentsLog$t2.map(v => v.targetName);\n acc.abs.push([timestamp, currentlyPainted]);\n acc.rel.push({\n time: timestamp,\n vc: currentlyPaintedRatio,\n elements: logEntry\n });\n return acc;\n }, {\n abs: [],\n rel: []\n });\n return {\n VC,\n VCBox,\n VCEntries,\n totalPainted\n };\n }\n setSSRElement(element) {\n this.observers.setReactRootElement(element);\n }\n setReactRootRenderStart(startTime = performance.now()) {\n this.observers.setReactRootRenderStart(startTime);\n }\n setReactRootRenderStop(stopTime = performance.now()) {\n this.observers.setReactRootRenderStop(stopTime);\n }\n setAbortReason(abort, timestamp, info = '') {\n if (this.abortReason.reason === null || this.abortReason.blocking === false) {\n this.abortReason.reason = abort;\n this.abortReason.info = info;\n this.abortReason.timestamp = timestamp;\n this.abortReason.blocking = abort !== abortReason.scroll;\n if (this.abortReason.blocking) {\n this.detachAbortListeners();\n }\n }\n }\n resetState() {\n this.abortReason = {\n reason: null,\n info: '',\n timestamp: -1,\n blocking: false\n };\n this.detachAbortListeners();\n this.heatmap = this.getCleanHeatmap();\n this.ssrInclusiveHeatmap = this.getCleanHeatmap();\n this.totalTime = 0;\n this.componentsLog = {};\n }\n getCleanHeatmap() {\n return Array(this.arraySize).fill('').map(() => Array(this.arraySize).fill(0));\n }\n setViewportSize() {\n this.viewport.w = getViewportWidth();\n this.viewport.h = getViewportHeight();\n }\n applyChangesToHeatMap(a, time, heatmap) {\n const {\n l,\n t,\n r,\n b\n } = a;\n const localHeatmap = heatmap;\n for (let row = t; row < b; row++) {\n for (let col = l; col < r; col++) {\n if (localHeatmap[row] === undefined) {\n try {\n this.setAbortReason(abortReason.error, time, `index - ${row}`);\n } catch (e) {\n this.setAbortReason(abortReason.error, time, 'row error');\n }\n return;\n } else {\n localHeatmap[row][col] = time;\n }\n }\n }\n }\n makeVCReturnObj() {\n const vc = {};\n this.VCParts.forEach(v => {\n vc[v] = null;\n });\n return vc;\n }\n detachAbortListeners() {\n const unbindFns = Object.values(this.unbind);\n if (unbindFns.length > 0) {\n unbindFns.forEach(fn => fn());\n }\n this.unbind = {};\n }\n measureStart() {\n this._startMeasureTimestamp = performance.now();\n }\n measureStop() {\n if (this._startMeasureTimestamp === -1) {\n return;\n }\n this.totalTime += performance.now() - this._startMeasureTimestamp;\n this._startMeasureTimestamp = -1;\n }\n}","export const initDevTools = () => {\n window.VCDevTools = () => import( /* webpackChunkName: \"vc-dev-tools\" */'./dev-tools').then(({\n startVCDevTools\n }) => startVCDevTools === null || startVCDevTools === void 0 ? void 0 : startVCDevTools());\n};","import { VCObserver } from './vc-observer';\nlet instance = null;\nexport const getVCObserver = (opts = {}) => {\n if (instance === null) {\n instance = new VCObserver(opts);\n }\n return instance;\n};","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nexport default class PageVisibility {\n constructor() {\n _defineProperty(this, \"_bindEventListeners\", () => {\n document.addEventListener(this._visibilityChange, this._handleVisibilityChange, false);\n });\n _defineProperty(this, \"_handleVisibilityChange\", () => {\n const isHidden = document[this._hidden];\n this._isHidden = isHidden;\n this._callbacks.forEach(callbackFn => callbackFn(isHidden));\n });\n this._isHidden = false;\n this._callbacks = new Map();\n this._hidden = undefined;\n this._visibilityChange = undefined;\n if (typeof document !== 'undefined') {\n if (typeof document.hidden !== 'undefined') {\n // Opera 12.10 and Firefox 18 and later support\n this._isHidden = document.hidden;\n this._hidden = 'hidden';\n this._visibilityChange = 'visibilitychange';\n } else if (typeof document.msHidden !== 'undefined') {\n this._isHidden = document.msHidden;\n this._hidden = 'msHidden';\n this._visibilityChange = 'msvisibilitychange';\n } else if (typeof document.webkitHidden !== 'undefined') {\n this._isHidden = document.webkitHidden;\n this._hidden = 'webkitHidden';\n this._visibilityChange = 'webkitvisibilitychange';\n }\n if (typeof document.addEventListener !== 'undefined' && this._hidden !== undefined) {\n this._bindEventListeners();\n }\n }\n }\n addCallback(name, fn) {\n if (typeof name !== 'string') {\n throw new Error('Invalid name, must be string');\n }\n if (typeof fn !== 'function') {\n throw new Error('Invalid callback, must be function');\n }\n this._callbacks.set(name, fn);\n }\n removeCallback(name) {\n if (this._callbacks.has(name)) {\n this._callbacks.delete(name);\n }\n }\n getIsHidden() {\n return this._isHidden;\n }\n}","export default class Performance {\n constructor() {\n this._performance = window.performance;\n }\n clearMarks(...args) {\n if (!this._performance || !this._performance.clearMarks) {\n return;\n }\n this._performance.clearMarks(...args);\n }\n mark(...args) {\n if (!this._performance || !this._performance.mark) {\n return;\n }\n this._performance.mark(...args);\n }\n getEntriesByName(...args) {\n if (!this._performance || !this._performance.getEntriesByName) {\n return [];\n }\n return this._performance.getEntriesByName(...args);\n }\n getTimeOrigin() {\n if (!this._performance || !this._performance.timeOrigin && !this._performance.timing) {\n return 0;\n }\n return this._performance.timeOrigin || this._performance.timing.navigationStart;\n }\n now() {\n if (!this._performance || !this._performance.now) {\n return Date.now ? Date.now() : +new Date();\n }\n return this._performance.now();\n }\n isAvailable() {\n return !!this._performance && !!this._performance.clearMarks && !!this._performance.mark && !!this._performance.getEntriesByName && !!this._performance.timing;\n }\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nimport { apdexType, isType } from './analyticsWebTypes';\nimport PageVisibility from './pageVisibility';\nimport Performance from './performance';\nexport default class ApdexEvent {\n constructor(onEvent, pageVisibility) {\n _defineProperty(this, \"_getEventKey\", ({\n task,\n taskId\n }) => taskId ? `${task}.${taskId}` : task);\n _defineProperty(this, \"_getEventTimingByName\", name => {\n const eventTimings = this._performance.getEntriesByName(name);\n const eventTiming = eventTimings[eventTimings.length - 1];\n return eventTiming;\n });\n _defineProperty(this, \"_getApdexFields\", event => {\n const apdexTimings = this._getApdexTimings(event);\n const apdexScore = this._calculateApdex({\n duration: apdexTimings.duration,\n threshold: event.threshold\n });\n return _objectSpread(_objectSpread({}, apdexTimings), {}, {\n apdex: apdexScore\n });\n });\n _defineProperty(this, \"_getApdexTimings\", event => {\n const eventKey = this._getEventKey(event);\n const eventStartName = `${eventKey}-start`;\n const startTime = event.startTime || this._getStartTime(event, eventStartName);\n const stopTime = event.stopTime || this._getStopTime();\n\n // We do some clean up of the marks and started events\n this._cleanApdexState(eventKey);\n return {\n startTime,\n stopTime,\n duration: stopTime - startTime\n };\n });\n _defineProperty(this, \"_getStartTime\", (event, eventName) => {\n let startTime;\n const timeOrigin = this._performance.getTimeOrigin();\n if (event.type === apdexType.INITIAL_LOAD) {\n startTime = timeOrigin;\n } else {\n const eventTiming = this._getEventTimingByName(eventName);\n startTime = timeOrigin + eventTiming.startTime;\n }\n return startTime;\n });\n _defineProperty(this, \"_getStopTime\", () => this._performance.getTimeOrigin() + this._performance.now());\n _defineProperty(this, \"_cleanApdexState\", eventKey => {\n this._performance.clearMarks(`${eventKey}-start`);\n this._performance.clearMarks(`${eventKey}-stop`);\n this._startedEvents.delete(eventKey);\n });\n _defineProperty(this, \"_getVisibilityFields\", event => {\n let isActiveTab;\n /**\n * For initialLoad type:\n * 1. if tab was not ever hidden (!_wasPreviouslyHidden)\n *\n * For transition type:\n * 1. active status is tracked in active events map (_isActiveEvents)\n *\n * For any type, if startTime or stopTime is specified:\n * 1. If currently active (!_isHidden)\n */\n\n if (event.type === apdexType.INITIAL_LOAD) {\n isActiveTab = !this._wasPreviouslyHidden;\n } else if (event.type === apdexType.TRANSITION) {\n const eventKey = this._getEventKey(event);\n isActiveTab = this._isActiveEvents.get(eventKey);\n }\n if (event.startTime || event.stopTime) {\n isActiveTab = !this._pageVisibility.getIsHidden();\n }\n return {\n isActiveTab\n };\n });\n _defineProperty(this, \"_calculateApdex\", ({\n duration,\n threshold = this._threshold\n }) => {\n let apdex;\n const satisfiedThreshold = threshold;\n const tolerableThreshold = threshold * 4;\n if (duration <= satisfiedThreshold) {\n apdex = 1;\n } else if (duration <= tolerableThreshold) {\n apdex = 0.5;\n } else {\n apdex = 0;\n }\n return apdex;\n });\n _defineProperty(this, \"_validateStartEvent\", event => {\n if (!event) {\n throw new Error('Missing \"event\" in Apdex start event');\n }\n if (!event.task) {\n throw new Error('Missing \"task\" in Apdex start event');\n }\n if (typeof event.task !== 'string') {\n throw new Error('Invalid \"task\" in Apdex start event');\n }\n if (event.taskId && typeof event.taskId !== 'string') {\n throw new Error('Invalid \"taskId\" in Apdex start event');\n }\n });\n _defineProperty(this, \"_validateStopEvent\", event => {\n if (!event) {\n throw new Error('Missing \"event\" in Apdex stop event');\n }\n if (!event.task) {\n throw new Error('Missing \"task\" in Apdex stop event');\n }\n if (typeof event.task !== 'string') {\n throw new Error('Invalid \"task\" in Apdex stop event');\n }\n if (event.taskId && typeof event.taskId !== 'string') {\n throw new Error('Invalid \"taskId\" in Apdex stop event');\n }\n if (!event.type) {\n throw new Error('Missing \"type\" in Apdex stop event');\n }\n if (event.type && !isType(apdexType, event.type)) {\n throw new Error('Invalid \"type\" in Apdex stop event');\n }\n if (event.threshold && typeof event.threshold !== 'number') {\n throw new Error('Invalid \"threshold\" in Apdex stop event');\n }\n\n /*\n * For a transition, if the startTime was not specified,\n * the start event should have been present.\n */\n if (!event.startTime && event.type === apdexType.TRANSITION) {\n const eventKey = this._getEventKey(event);\n if (!this._startedEvents.has(eventKey)) {\n throw new Error(`Apdex event transition \"${eventKey}\" was not started`);\n }\n }\n if (event.startTime && !(typeof event.startTime === 'number' && event.startTime >= 0)) {\n throw new Error('Invalid \"startTime\" in Apdex stop event');\n }\n if (event.stopTime && typeof event.stopTime !== 'number') {\n throw new Error('Invalid \"stopTime\" in Apdex stop event');\n }\n if (event.stopTime <= event.startTime) {\n throw new Error('\"stopTime\" should be greater than \"startTime\" in Apdex stop event');\n }\n });\n _defineProperty(this, \"_shouldSendEvent\", event => {\n if (!event) {\n return false;\n }\n if (typeof event.apdex !== 'number') {\n return false;\n }\n return true;\n });\n _defineProperty(this, \"_sendEvent\", (event, callback) => {\n if (this._shouldSendEvent(event)) {\n this._onEvent({\n source: 'ui',\n action: 'readyForUser',\n actionSubject: 'ui',\n attributes: _objectSpread(_objectSpread({}, event.additionalAttributes), {}, {\n task: event.task,\n taskId: event.taskId,\n type: event.type,\n threshold: event.threshold || this._threshold,\n apdex: event.apdex,\n startTime: event.startTime,\n stopTime: event.stopTime,\n duration: event.duration,\n isActiveTab: event.isActiveTab\n })\n }, callback);\n }\n });\n if (!onEvent) {\n throw new Error('Missing onEvent callback');\n }\n if (typeof onEvent !== 'function') {\n throw new Error('Invalid onEvent, must be function');\n }\n if (!(pageVisibility instanceof PageVisibility)) {\n throw new Error('Invalid pageVisibility, must be PageVisibility class');\n }\n this._startedEvents = new Map();\n this._performance = new Performance();\n this._onEvent = onEvent;\n this._threshold = 1000;\n this._wasPreviouslyHidden = pageVisibility.getIsHidden();\n this._isActiveEvents = new Map();\n this._pageVisibility = pageVisibility;\n this._pageVisibility.addCallback('apdexEvent', isHidden => {\n this.onVisibilityChange(!isHidden);\n });\n }\n start(event) {\n this._validateStartEvent(event);\n if (!this._performance.isAvailable()) {\n return;\n }\n const eventKey = this._getEventKey(event);\n const eventStartName = `${eventKey}-start`;\n this._startedEvents.set(eventKey, true);\n this._isActiveEvents.set(eventKey, !this._pageVisibility.getIsHidden());\n this._performance.clearMarks(eventStartName);\n this._performance.mark(eventStartName);\n }\n getStart(event) {\n this._validateStartEvent(event);\n if (!this._performance.isAvailable()) {\n return undefined;\n }\n const eventKey = this._getEventKey(event);\n const eventStartName = `${eventKey}-start`;\n return this._getEventTimingByName(eventStartName);\n }\n stop(event, callback) {\n this._validateStopEvent(event);\n if (!this._performance.isAvailable()) {\n return;\n }\n const apdexFields = this._getApdexFields(event);\n const visibilityFields = this._getVisibilityFields(event);\n this._sendEvent(_objectSpread(_objectSpread(_objectSpread({}, event), apdexFields), visibilityFields), callback);\n }\n onVisibilityChange(isActive) {\n if (!isActive) {\n this._wasPreviouslyHidden = true;\n Array.from(this._isActiveEvents.keys()).forEach(key => this._isActiveEvents.set(key, false));\n }\n }\n}","/**\n * Wraps {possibleFn} into a error-safe function and handles cases where {possibleFn}\n * is a function or object\n *\n * @param possibleFn - function that returns and object or the object itself\n * @param errorMessage - error message to log if {possibleFn} is a function and\n * throws an error when called\n * @returns {Function}\n */\nconst isFunction = possibleFn => typeof possibleFn === 'function';\nexport default ((possibleFn, errorMessage) => {\n return () => {\n if (isFunction(possibleFn)) {\n try {\n return possibleFn();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error(`${errorMessage} - ${e instanceof Error ? e.message : String(e)}`);\n return undefined;\n }\n }\n return possibleFn;\n };\n});","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nimport { eventType } from './analyticsWebTypes';\nimport { isPlainObject } from './util/object-utils';\nconst libraryVersion = \"4.23.0\";\nfunction buildTenantFields(tenantInfo) {\n return {\n tenantIdType: tenantInfo.tenantIdType,\n tenantId: tenantInfo.tenantId\n };\n}\nfunction buildUserFields(userInfo) {\n return {\n userIdType: userInfo.userIdType\n };\n}\nfunction buildOrgFields(orgInfo) {\n return {\n orgId: orgInfo.orgId\n };\n}\nfunction buildWorkspaceFields(workspaceInfo) {\n return {\n workspaceId: workspaceInfo.workspaceId\n };\n}\nfunction buildAliases(aliases) {\n if (isNotEmptyObject(aliases)) {\n return {\n aliases: aliases\n };\n }\n return undefined;\n}\nfunction buildGroups(groups) {\n if (isNotEmptyObject(groups)) {\n return {\n groups: groups\n };\n }\n return undefined;\n}\nfunction buildEventOverrides(event) {\n if (event.anonymousId) {\n return {\n anonymousId: event.anonymousId\n };\n }\n return {};\n}\nfunction getProductField(field, override) {\n return override === undefined ? field : override;\n}\nfunction buildProductFields(productInfo, productOverrides) {\n const overrides = productOverrides || {};\n const env = getProductField(productInfo.env, overrides.env);\n const product = getProductField(productInfo.product, overrides.product);\n const subproduct = getProductField(productInfo.subproduct(), overrides.subproduct);\n const version = getProductField(productInfo.version, overrides.version);\n const origin = getProductField(productInfo.origin, overrides.origin);\n const platform = getProductField(productInfo.platform, overrides.platform);\n return {\n env,\n product,\n subproduct,\n version,\n origin,\n platform\n };\n}\nfunction isNotEmptyObject(obj) {\n return isPlainObject(obj) && Object.keys(obj).length > 0;\n}\nfunction buildAttributesWithName(name, attrObject) {\n return isNotEmptyObject(attrObject) ? {\n [name]: attrObject\n } : undefined;\n}\nfunction buildAttributes(attributes) {\n return buildAttributesWithName('attributes', attributes);\n}\nexport function filterAndBuildContainers(containers) {\n const validContainers = {};\n Object.keys(containers).forEach(key => {\n const value = containers[key];\n validContainers[key] = {\n id: value.id,\n type: value.type\n };\n });\n return validContainers;\n}\nexport function buildContainersWithName(containers) {\n if (isNotEmptyObject(containers)) {\n const validContainers = filterAndBuildContainers(containers);\n return buildAttributesWithName('containers', validContainers);\n }\n return undefined;\n}\nexport function buildActionFields(event, actionEventType) {\n return _objectSpread({\n containerType: event.containerType,\n containerId: event.containerId,\n source: event.source,\n objectType: event.objectType,\n objectId: event.objectId,\n actionSubject: event.actionSubject,\n action: event.action,\n actionSubjectId: event.actionSubjectId,\n attributes: event.attributes,\n nonPrivacySafeAttributes: event.nonPrivacySafeAttributes,\n tags: event.tags,\n highPriority: event.highPriority,\n eventType: actionEventType\n }, buildContainersWithName(event.containers));\n}\nfunction buildNonPrivacySafeAttributes(nonPrivacySafeAttributes) {\n return buildAttributesWithName('nonPrivacySafeAttributes', nonPrivacySafeAttributes);\n}\nexport function buildScreenEvent(productInfo, tenantInfo, userInfo, attributes, nonPrivacySafeAttributes, tags, tabId, sessionId, taskSessions, orgInfo, pageLoadId, workspaceInfo, event, containers, aliases, groups) {\n const productFields = buildProductFields(productInfo);\n const tenantFields = buildTenantFields(tenantInfo);\n const userFields = buildUserFields(userInfo);\n const orgFields = buildOrgFields(orgInfo);\n const workspaceFields = buildWorkspaceFields(workspaceInfo);\n const overrides = {\n title: '',\n path: '',\n url: '',\n referrer: '',\n search: '',\n eventType: eventType.SCREEN\n };\n return _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, productFields), tenantFields), userFields), orgFields), overrides), buildAttributes(attributes)), buildNonPrivacySafeAttributes(nonPrivacySafeAttributes)), buildContainersWithName(containers)), buildEventOverrides(event)), {}, {\n tags,\n tabId,\n sessionId,\n taskSessions,\n pageLoadId\n }, workspaceFields), buildAliases(aliases)), buildGroups(groups));\n}\nexport function buildActionName(event) {\n return `${event.actionSubject} ${event.action}`;\n}\nexport function buildContext(productInfo) {\n const screen = window.screen || {};\n return {\n context: {\n locale: productInfo.locale,\n screen: {\n width: screen.width,\n height: screen.height,\n density: window.devicePixelRatio\n },\n library: {\n name: 'analytics.js',\n version: libraryVersion\n }\n }\n };\n}\nexport function extractProductOverrides(event) {\n const {\n env,\n product,\n subproduct,\n version,\n origin,\n platform\n } = event;\n return {\n env,\n product,\n subproduct,\n version,\n origin,\n platform\n };\n}\nexport function buildActionEvent(productInfo, tenantInfo, userInfo, event, actionEventType, tabId, sessionId, taskSessions, orgInfo, pageLoadId, workspaceInfo, aliases, groups) {\n const productFields = buildProductFields(productInfo, extractProductOverrides(event));\n const tenantFields = buildTenantFields(tenantInfo);\n const orgFields = buildOrgFields(orgInfo);\n const workspaceFields = buildWorkspaceFields(workspaceInfo);\n const userFields = buildUserFields(userInfo);\n const actionFields = buildActionFields(event, actionEventType);\n return _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, productFields), tenantFields), orgFields), userFields), actionFields), buildEventOverrides(event)), {}, {\n tabId,\n sessionId,\n taskSessions,\n pageLoadId\n }, workspaceFields), buildAliases(aliases)), buildGroups(groups));\n}","export const DEFAULT_DELAY_TIMEOUT = 10000;\nexport const MAX_DELAY_TIMEOUT = 30000;","/* eslint-disable no-return-assign, no-sequences */\n\n// https://www.30secondsofcode.org/js/s/map-keys\nconst mapKeys = (obj, fn) => Object.keys(obj).reduce((acc, k) => {\n const key = fn(obj[k], k, obj);\n acc[key] = obj[k];\n return acc;\n}, {});\n\n// https://www.30secondsofcode.org/js/s/pick\nconst pick = (obj, arr) => arr.reduce((acc, curr) => (curr in obj && (acc[curr] = obj[curr]), acc), {});\n\n// https://www.30secondsofcode.org/js/s/omit-by\nconst omitBy = (obj, fn) => Object.keys(obj).filter(k => !fn(obj[k], k)).reduce((acc, key) => (acc[key] = obj[key], acc), {});\n\n// https://www.30secondsofcode.org/js/s/pick-by\nconst pickBy = (obj, fn) => Object.keys(obj).filter(k => fn(obj[k], k)).reduce((acc, key) => (acc[key] = obj[key], acc), {});\n\n// https://www.30secondsofcode.org/js/s/omit\nconst omit = (obj, arr) => Object.keys(obj).filter(k => arr.indexOf(k) < 0).reduce((acc, key) => (acc[key] = obj[key], acc), {});\n\n// https://www.30secondsofcode.org/js/s/equals\nconst equals = (a, b) => {\n if (a === b) {\n return true;\n }\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n if (!a || !b || typeof a !== 'object' && typeof b !== 'object') {\n return a === b;\n }\n if (a.prototype !== b.prototype) {\n return false;\n }\n const keys = Object.keys(a);\n if (keys.length !== Object.keys(b).length) {\n return false;\n }\n return keys.every(k => equals(a[k], b[k]));\n};\n\n// https://www.30secondsofcode.org/js/s/partition\nconst partition = (arr, fn) => arr.reduce(\n// eslint-disable-next-line no-shadow\n(acc, val, i, arr) => {\n acc[fn(val, i, arr) ? 0 : 1].push(val);\n return acc;\n}, [[], []]);\nexport { mapKeys, pick, pickBy, omitBy, omit, equals, partition };","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { isActionEventType, validateActionEvent, validateActionEventType } from '../eventValidation';\nimport { partition } from '../objectUtils';\nexport class CompressionRule {\n /**\n * @callback EventPredicate\n * @param {object} event An analytics event\n * @returns {boolean} A flag indicating whether or not the event matches the conditions\n */\n\n /**\n * @callback CompressionFunction\n * @param {Array.} events A collection of analytics events that match the predicate of this compression rule\n * @returns {Array.} compressedEvents The compressed analytics events to fire\n */\n\n /**\n * This constructor defines a new rule for compressing analytics events.\n * @param {EventPredicate} predicate\n * @param {CompressionFunction} compressFn\n */\n constructor(predicate, compressFn) {\n /**\n * This function returns a flag indicating whether or not this instance is capable of compressing the given event.\n * @param event\n * @returns {boolean}\n */\n _defineProperty(this, \"canCompress\", event => {\n try {\n return event && isActionEventType(event.eventType) && this.predicate(event);\n } catch (e) {\n return false;\n }\n });\n /**\n * This function compresses as many events in the given collection as possible.

\n * Any events in the given collection that do not match the conditions of {@link canCompress} will be left uncompressed and\n * appended to the end of the resulting array.\n *\n * @param events A collection of analytic events to compress\n * @returns {Array.} The action fields for the resulting compressed events\n */\n _defineProperty(this, \"compress\", events => {\n const [compatibleEvents, incompatibleEvents] = partition(events, event => this.canCompress(event));\n const compressedEvents = this.compressFn(compatibleEvents);\n if (!compressedEvents) {\n throw new Error('No events were returned from the compression function');\n }\n compressedEvents.forEach(event => {\n validateActionEventType(event.eventType);\n validateActionEvent(event);\n });\n return compressedEvents.concat(incompatibleEvents);\n });\n if (typeof predicate !== 'function') {\n throw new Error('Invalid predicate, must be a function that accepts an event and returns a boolean');\n }\n if (typeof compressFn !== 'function') {\n throw new Error('Invalid compressFn, must be a function that both accepts and returns an array of events');\n }\n this.predicate = predicate;\n this.compressFn = compressFn;\n }\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n/* eslint-disable implicit-arrow-linebreak */\n/* eslint-disable max-classes-per-file */\n\nimport { buildActionFields } from '../eventBuilder';\nimport { equals, omit } from '../objectUtils';\nimport { CompressionRule } from './compressionRule';\nexport default class EventCompressor {\n constructor(compressionRules = []) {\n _defineProperty(this, \"canCompress\", event => this.compressionRules.some(compressionRule => compressionRule.canCompress(event)));\n _defineProperty(this, \"compress\", events => {\n const groups = this.createGroups(events);\n return groups.reduce((allCompressedEvents, group) => {\n const groupCompressedEvents = this.compressGroup(group);\n return allCompressedEvents.concat(groupCompressedEvents);\n }, []);\n });\n _defineProperty(this, \"createGroups\", events =>\n // Group events based on contextual fields. These fields are anything that is added by the client itself,\n // rather than passed in by the caller (eg. product, org. and tenant info)\n events.reduce((groups, event) => {\n const matchingCompressor = this.compressionRules.find(compressor => compressor.canCompress(event));\n let contextFields;\n if (matchingCompressor) {\n const actionFields = buildActionFields(event, event.eventType);\n contextFields = omit(event, Object.keys(actionFields));\n }\n const matchingGroup = groups.find(group => matchingCompressor === group.compressor && equals(contextFields, group.contextFields));\n if (matchingGroup) {\n matchingGroup.events.push(event);\n } else {\n groups.push({\n contextFields,\n compressor: matchingCompressor,\n events: [event]\n });\n }\n return groups;\n }, []));\n _defineProperty(this, \"compressGroup\", group => {\n // If this group doesn't have any compressor, then the event args are already in their final format\n if (!group.compressor) {\n return group.events;\n }\n try {\n // Run the compressor on the group to generate some new events.\n // The compression function is only expected to return the action fields for each\n // event that it generates, since all other fields are generated by the client.\n const compressedEventActionFields = group.compressor.compress(group.events);\n\n // Add the context fields to each of the resulting events to inflate them into a full action event\n return compressedEventActionFields.map(actionFields => _objectSpread(_objectSpread({}, actionFields), group.contextFields));\n } catch (e) {\n // If we fail to compress the events, then just fall back the uncompressed events\n // so that no data is lost. This can happen if the compression function throws an error\n // or returns some invalid event payloads.\n // eslint-disable-next-line no-console\n console.warn('Failed to compress some analytics events. ' + `Error: ${e.message}. Sending ${group.events.length} uncompressed events instead`);\n return group.events;\n }\n });\n if (!Array.isArray(compressionRules)) {\n throw new Error('Event compressors must be constructed with an array of CompressionRules');\n }\n if (!compressionRules.every(rule => rule instanceof CompressionRule)) {\n throw new Error('Event compressors can only be constructed with instances of CompressionRule');\n }\n this.compressionRules = compressionRules;\n }\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { buildActionName } from '../eventBuilder';\nimport { equals, partition } from '../objectUtils';\nimport EventCompressor from './eventCompressor';\n// We want to throttle the flush rate so that we don't have a huge upfront performance hit from starting the flush,\n// and so that the underlying Segment client has some time to process some events in its queue before more are added.\nconst FLUSH_BATCH_SIZE = 7; // aligns with the default batch size of Segment's BatchableQueue\nconst FLUSH_BATCH_BACKOFF_PERIOD = 100;\nexport default class EventDelayQueue {\n constructor(processFn, compressionRules) {\n _defineProperty(this, \"push\", (identifier, builtEvent, context, userInfo) => {\n this.eventArgs.push({\n identifier,\n builtEvent,\n context,\n userInfo\n });\n });\n _defineProperty(this, \"size\", () => this.eventArgs.length);\n _defineProperty(this, \"startFlush\", () => {\n try {\n this.eventArgs = this.compressEventArgs(this.eventArgs);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.warn('Failed to perform compression on the delayed analytics events. ' + `Error: ${e.message}. Sending ${this.eventArgs.length} uncompressed events instead`);\n }\n this.flushNextBatch();\n });\n _defineProperty(this, \"cancelFlush\", () => {\n if (this.flushBatchTimeout) {\n clearTimeout(this.flushBatchTimeout);\n this.flushBatchTimeout = null;\n }\n });\n _defineProperty(this, \"flushNextBatch\", () => {\n const batch = this.eventArgs.splice(0, FLUSH_BATCH_SIZE);\n batch.forEach(item => this.processFn(item.identifier, item.builtEvent, item.context, item.userInfo));\n if (this.eventArgs.length > 0) {\n this.flushBatchTimeout = setTimeout(() => this.flushNextBatch(), FLUSH_BATCH_BACKOFF_PERIOD);\n } else {\n this.flushBatchTimeout = null;\n }\n });\n _defineProperty(this, \"compressEventArgs\", eventArgs => {\n const [compressibleEventArgs, incompressibleEventArgs] = partition(eventArgs, args => this.compressor.canCompress(args.builtEvent));\n\n // Events can only be compressed together if they share the same context and user info, since these are top-level\n // fields that need to exist on the fired event and can only be set to a single value.\n // We can achieve this by grouping our events by context prior to passing them to the compressor.\n const contextGroups = compressibleEventArgs.reduce((groups, args) => {\n const matchingGroup = groups.find(group => equals(group.userInfo, args.userInfo) && equals(group.context, args.context));\n if (matchingGroup) {\n matchingGroup.eventArgs.push(args);\n } else {\n groups.push({\n userInfo: args.userInfo,\n context: args.context,\n eventArgs: [args]\n });\n }\n return groups;\n }, []);\n\n // Run the compressor on each group\n const allCompressedEventArgs = contextGroups.reduce((acc, group) => {\n try {\n const events = group.eventArgs.map(args => args.builtEvent);\n const compressedEvents = this.compressor.compress(events);\n const compressedEventArgs = compressedEvents.map(compressedEvent => ({\n identifier: buildActionName(compressedEvent),\n builtEvent: compressedEvent,\n userInfo: group.userInfo,\n context: group.context\n }));\n return acc.concat(compressedEventArgs);\n } catch (e) {\n // If anything goes wrong while compressing this group, then just fall back on the\n // uncompressed events instead. The event compressor already handles errors with invalid\n // generator functions or results, but this is an extra layer of defense to prevent data\n // loss in the event of an unexpected error.\n // eslint-disable-next-line no-console\n console.warn('Failed to compress some analytics events. ' + `Error: ${e.message}. Sending ${group.eventArgs.length} uncompressed events instead`);\n return group.eventArgs;\n }\n }, []);\n incompressibleEventArgs.forEach(args => allCompressedEventArgs.push(args));\n return allCompressedEventArgs;\n });\n this.processFn = processFn;\n this.flushBatchTimeout = null;\n this.eventArgs = [];\n this.compressor = new EventCompressor(compressionRules);\n }\n}","export let StopLowPriorityEventDelayReason = /*#__PURE__*/function (StopLowPriorityEventDelayReason) {\n StopLowPriorityEventDelayReason[\"TIMEOUT\"] = \"timeout\";\n StopLowPriorityEventDelayReason[\"MANUAL\"] = \"manual\";\n return StopLowPriorityEventDelayReason;\n}({});","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { DEFAULT_DELAY_TIMEOUT, MAX_DELAY_TIMEOUT } from './defaults';\nimport EventDelayQueue from './eventDelayQueue';\nimport { StopLowPriorityEventDelayReason } from './types';\nexport default class EventDelayCoordinator {\n constructor(fireDelayedEvent, compressors) {\n _defineProperty(this, \"push\", (identifier, builtEvent, context, userInfo) => {\n this.delayQueue.push(identifier, builtEvent, context, userInfo);\n });\n _defineProperty(this, \"startLowPriorityEventDelay\", (timeout = DEFAULT_DELAY_TIMEOUT, callback) => {\n if (Number.isNaN(timeout) || timeout <= 0) {\n throw new Error(`Invalid timeout period: ${timeout}, must be a number greater than 0`);\n }\n if (this.delayTimeout) {\n clearTimeout(this.delayTimeout);\n }\n const delayTimeoutPeriod = timeout ? Math.min(timeout, MAX_DELAY_TIMEOUT) : MAX_DELAY_TIMEOUT;\n this.delayCallback = callback;\n this.delayTimeout = setTimeout(() => this.stopLowPriorityEventDelay(StopLowPriorityEventDelayReason.TIMEOUT), delayTimeoutPeriod);\n\n // If the queue is still flushing from a previous delay period, then we should cancel that flush\n // to stop it from negatively impacting the performance of the new critical section\n this.delayQueue.cancelFlush();\n this.isDelaying = true;\n });\n _defineProperty(this, \"stopLowPriorityEventDelay\", (reason = StopLowPriorityEventDelayReason.MANUAL) => {\n var _this$delayCallback;\n if (this.delayTimeout) {\n clearTimeout(this.delayTimeout);\n this.delayTimeout = undefined;\n }\n this.delayQueue.startFlush();\n this.isDelaying = false;\n (_this$delayCallback = this.delayCallback) === null || _this$delayCallback === void 0 ? void 0 : _this$delayCallback.call(this, reason);\n this.delayCallback = undefined;\n });\n _defineProperty(this, \"isDelayingLowPriorityEvents\", () => this.isDelaying);\n this.isDelaying = false;\n this.delayQueue = new EventDelayQueue(fireDelayedEvent, compressors);\n }\n}","export let LocalStorageKeySuffix = /*#__PURE__*/function (LocalStorageKeySuffix) {\n LocalStorageKeySuffix[\"IN_PROGRESS\"] = \"inProgress\";\n LocalStorageKeySuffix[\"QUEUE\"] = \"queue\";\n LocalStorageKeySuffix[\"RECLAIM_START\"] = \"reclaimStart\";\n LocalStorageKeySuffix[\"RECLAIM_END\"] = \"reclaimEnd\";\n LocalStorageKeySuffix[\"ACK\"] = \"ack\";\n return LocalStorageKeySuffix;\n}({});\nexport let Timers = /*#__PURE__*/function (Timers) {\n Timers[Timers[\"RECLAIM_TIMEOUT\"] = 10000] = \"RECLAIM_TIMEOUT\";\n Timers[Timers[\"RECLAIM_WAIT\"] = 500] = \"RECLAIM_WAIT\";\n Timers[Timers[\"RECLAIM_WAIT_THRESHOLD\"] = 2000] = \"RECLAIM_WAIT_THRESHOLD\";\n return Timers;\n}({});","import { LocalStorageKeySuffix } from './types';\nexport const createLocalStorageKeys = (queuePrefix, queueId) => ({\n [LocalStorageKeySuffix.ACK]: `${queuePrefix}.${queueId}.${LocalStorageKeySuffix.ACK}`,\n [LocalStorageKeySuffix.QUEUE]: `${queuePrefix}.${queueId}.${LocalStorageKeySuffix.QUEUE}`,\n [LocalStorageKeySuffix.IN_PROGRESS]: `${queuePrefix}.${queueId}.${LocalStorageKeySuffix.IN_PROGRESS}`,\n [LocalStorageKeySuffix.RECLAIM_START]: `${queuePrefix}.${queueId}.${LocalStorageKeySuffix.RECLAIM_START}`,\n [LocalStorageKeySuffix.RECLAIM_END]: `${queuePrefix}.${queueId}.${LocalStorageKeySuffix.RECLAIM_END}`\n});","import { LocalStorageKeySuffix } from './types';\nimport { createLocalStorageKeys } from './utils';\n// For more details on this funciton, see https://hello.atlassian.net/wiki/spaces/MEASURE/pages/585086028/Investigation+Local+storage+full\n// TL;DR\n// If a queue looses its `ack` key in localstorage, it will never get claimed.\n// There is a small chance that this can happen.\n// This function is to run through queues and clean any that have been orphaned.\n\n// Keys stolen from https://github.com/segmentio/localstorage-retry/blob/master/lib/index.js#L55\n\nconst validSuffixs = Object.values(LocalStorageKeySuffix);\nexport default (prefix => {\n if (typeof prefix !== 'string' || prefix.length === 0) {\n // We do not want to start deleting everything in localstorage\n return 0;\n }\n try {\n const queueStates = Object.keys(localStorage).filter(key => key && key.startsWith(`${prefix}.`) || false).map(key => key.split('.')).filter(splitKeys => splitKeys.length === 3 && validSuffixs.includes(splitKeys[2])).reduce((accumulator, currentKeys) => {\n const [, id, suffix] = currentKeys;\n if (accumulator[id] === undefined) {\n accumulator[id] = {};\n }\n accumulator[id][suffix] = true;\n return accumulator;\n }, {});\n const queuesToPurge = Object.keys(queueStates).filter(id => queueStates[id][LocalStorageKeySuffix.ACK] !== true);\n queuesToPurge.forEach(id => {\n const {\n queue,\n inProgress,\n reclaimStart,\n reclaimEnd\n } = createLocalStorageKeys(prefix, id);\n localStorage.removeItem(inProgress);\n localStorage.removeItem(queue);\n localStorage.removeItem(reclaimStart);\n localStorage.removeItem(reclaimEnd);\n });\n return queuesToPurge.length;\n } catch (_error) {\n // Ignore errors from localStorage.\n }\n return 0;\n});","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nimport uuid from 'uuid/v4';\nimport { LocalStorageKeySuffix, Timers } from './types';\nimport { createLocalStorageKeys } from './utils';\n\n// Code we need to mimic:\n// https://github.com/segmentio/localstorage-retry/blob/master/lib/index.js#L262-L357\n// Note we do not want to run this library due to the performance, duplication and memory leak issues.\n\nconst promisedSetTimeout = msToWait => new Promise(resolve => {\n setTimeout(resolve, msToWait);\n});\nconst findOtherQueues = queuePrefix => {\n try {\n return Object.keys(localStorage).filter(key => key.startsWith(queuePrefix)).map(key => key.split('.')).filter(split => {\n if (split.length === 3 && split[0] === queuePrefix && split[2] === LocalStorageKeySuffix.ACK) {\n try {\n const ackTimestamp = localStorage.getItem(split.join('.'));\n if (ackTimestamp) {\n const ackTimestampNumber = parseInt(ackTimestamp);\n return Timers.RECLAIM_TIMEOUT + ackTimestampNumber < Date.now();\n }\n } catch (error) {\n // ignore and drop value\n }\n }\n return false;\n }).map(split => split[1]);\n } catch (_error) {\n // Ignore errors from accessing localStorage.\n }\n return [];\n};\nconst tryReclaim = async (options, callback) => {\n const {\n ack,\n reclaimStart,\n reclaimEnd\n } = options.storageKeys;\n const start = Date.now();\n localStorage.setItem(reclaimStart, options.reclaimProcessId);\n localStorage.setItem(ack, start.toString());\n await promisedSetTimeout(Timers.RECLAIM_WAIT);\n if (\n // Prevent duplicates when extracting events from localstorage due to CPU / Memory pressure on client\n Date.now() > start + Timers.RECLAIM_WAIT_THRESHOLD ||\n // Either the parent has caught up and removed our claim, or someone else started a claim instead\n localStorage.getItem(reclaimStart) !== options.reclaimProcessId) {\n throw new Error('Took to long to callback, reclaim abandonded. After reclaimStart.');\n }\n localStorage.setItem(reclaimEnd, options.reclaimProcessId);\n await promisedSetTimeout(Timers.RECLAIM_WAIT);\n if (\n // Prevent duplicates when extracting events from localstorage due to CPU / Memory pressure on client\n Date.now() > start + Timers.RECLAIM_WAIT_THRESHOLD ||\n // Either the parent has caught up and removed our claim, or someone else started a claim instead\n localStorage.getItem(reclaimStart) !== options.reclaimProcessId || localStorage.getItem(reclaimEnd) !== options.reclaimProcessId) {\n throw new Error('Took to long to callback, reclaim abandonded. After reclaimEnd.');\n }\n return reclaim(options, callback);\n};\nconst reclaim = async (options, callback) => {\n const {\n queue,\n inProgress\n } = options.storageKeys;\n\n // Queue is an array of events while inProgress is an object with a uuid for key\n // Either of these queues may legitimately be missing.\n const eventsInQueue = JSON.parse(localStorage.getItem(queue) || '[]');\n const eventsInProgress = JSON.parse(localStorage.getItem(inProgress) || '{}');\n const arrayOfEventsInProgress = Object.entries(eventsInProgress).map(([key, item]) => {\n const itemWithId = _objectSpread(_objectSpread({}, item), {}, {\n // LocalStorage-retry would add the attemptCounter after failure, rather than\n // as it was being processed\n attemptNumber: item.attemptNumber + 1,\n id: key\n });\n return itemWithId;\n });\n const eventsToProcess = [...eventsInQueue, ...arrayOfEventsInProgress];\n if (eventsToProcess.length > 0) {\n const result = await callback(eventsToProcess);\n if (result.status === 'successful') {\n clearLocalStorageKeys(options.storageKeys);\n } else if (result.status === 'partial') {\n // Dont delete all events if we are only able to take some of them.\n const leftover = eventsToProcess.filter(event => !result.acceptedItemIds.includes(event.id));\n\n // This way around, we can almost ensure that we wont hit memory quota exceeded errors.\n // However, there is a very small chance that we may lose events if the process exits between these two commands.\n localStorage.removeItem(inProgress);\n localStorage.setItem(queue, JSON.stringify(leftover));\n return {\n fullReclaim: false\n };\n }\n } else {\n clearLocalStorageKeys(options.storageKeys);\n }\n return {\n fullReclaim: true\n };\n};\n\n// Exterminate\nconst clearLocalStorageKeys = keys => {\n // Always good to do queue and inprogress first to reduce duplications\n // and to free up more space in localstorage\n localStorage.removeItem(keys.queue);\n localStorage.removeItem(keys.inProgress);\n localStorage.removeItem(keys.reclaimEnd);\n localStorage.removeItem(keys.reclaimStart);\n // This has to be last or we risk leaving things in localStorage that have to be purged\n localStorage.removeItem(keys.ack);\n};\nexport default (async (queuePrefix, callback) => {\n if (typeof queuePrefix !== 'string' || queuePrefix.length === 0) {\n // We do not want to start deleting everything in localstorage\n return {\n fullReclaims: 0,\n partialReclaims: 0,\n failedReclaims: 0\n };\n }\n const reclaimProcessId = uuid();\n const queuesToReclaim = findOtherQueues(queuePrefix);\n const claims = queuesToReclaim.map(id => tryReclaim({\n queuePrefix,\n reclaimProcessId,\n storageKeys: createLocalStorageKeys(queuePrefix, id)\n }, callback));\n const settledClaims = await Promise.allSettled(claims);\n const failedReclaims = settledClaims.filter(claim => claim.status === 'rejected');\n const successfulClaims = settledClaims.filter(settledValue => settledValue.status === 'fulfilled').map(result => result.value);\n const fullReclaims = successfulClaims.filter(claim => claim.fullReclaim);\n const partialReclaims = successfulClaims.filter(claim => !claim.fullReclaim);\n return {\n failedReclaims: failedReclaims.length,\n partialReclaims: partialReclaims.length,\n fullReclaims: fullReclaims.length\n };\n});","export const NAMESPACE_AND_TIME_ADDED_INDEX = 'namespace-timeAdded';\nexport const RESILIENCE_DB_NAME = 'analytics-web-client';\nexport const RESILIENCE_STORE_NAME = 'analytics-resilience';\nexport const TIME_TO_PROCESS_AFTER_INDEX = 'timeToBeProcessedAfter';\nexport const TIME_ADDED_INDEX = 'timeAdded';\nexport const RETRY_INDEX = 'retryAttempts';\nexport const INDEXEDDB_TIMEOUT = 15000;\nexport let StoreType = /*#__PURE__*/function (StoreType) {\n StoreType[\"INDEXEDDB\"] = \"indexeddb\";\n StoreType[\"MEMORY\"] = \"memory\";\n return StoreType;\n}({});\n\n// Used to describe how the ResilienceDb should react when there is insufficient storage space.\nexport let GuardPolicy = /*#__PURE__*/function (GuardPolicy) {\n GuardPolicy[\"IGNORE\"] = \"ignore\";\n GuardPolicy[\"ABANDON\"] = \"abandon\";\n GuardPolicy[\"EVICT\"] = \"evict\";\n return GuardPolicy;\n}({});","export const NoIndexedDbErrorName = 'NoIndexedDbError';\n\n/*\n Only to be used with window.indexeddb is undefined.\n This will prevent DbDelegator from logging errors, but will not prevent swapping to memoryDB\n*/\nexport default class NoIndexedDbError extends Error {\n constructor() {\n super('window.indexeddb is undefined.');\n // Must reset the prototypes after calling super of builtin classes\n // https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work\n Object.setPrototypeOf(this, NoIndexedDbError.prototype);\n this.name = NoIndexedDbErrorName;\n }\n}","export const AbandonWriteErrorName = 'AbandonWriteError';\nexport default class AbandonWriteError extends Error {\n constructor(source) {\n super(`Event Limit reached. Abandoning write to: ${source}`);\n\n // Must reset the prototypes after calling super of builtin classes\n // https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work\n Object.setPrototypeOf(this, AbandonWriteError.prototype);\n this.name = AbandonWriteErrorName;\n }\n}","export const CallbackProcessingErrorName = 'CallbackProcessingError';\nexport default class CallbackProcessingError extends Error {\n constructor(error) {\n const messageFromError = error && typeof error === 'object' && 'toString' in error && typeof error.toString === 'function' && error.toString();\n const messageFromString = typeof error === 'string' && error;\n const message = messageFromError || messageFromString || 'Argument passed to CallbackProcessingError was not an Error or string.';\n super(`Error thrown while processing events in callback: ${message}`);\n // Must reset the prototypes after calling super of builtin classes\n // https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work\n Object.setPrototypeOf(this, CallbackProcessingError.prototype);\n this.name = CallbackProcessingErrorName;\n }\n}","export const InvalidPolicyErrorName = 'InvalidPolicyError';\nexport default class InvalidPolicyError extends Error {\n constructor(policy, method) {\n super(`Method '${method}' cannot be called with policy '${policy}'.`);\n this.name = InvalidPolicyErrorName;\n }\n}","import { AbandonWriteErrorName } from './AbandonWriteError';\nimport { CallbackProcessingErrorName } from './CallbackProcessingError';\nimport { InvalidPolicyErrorName } from './InvalidPolicyError';\nexport const shouldIgnoreResilienceDbError = error => {\n if (error && typeof error === 'object' && 'name' in error) {\n const errorWithName = error;\n return typeof errorWithName.name === 'string' && (errorWithName.name === AbandonWriteErrorName || errorWithName.name === CallbackProcessingErrorName || errorWithName.name === InvalidPolicyErrorName);\n }\n return false;\n};","export const GET_ITEM_COUNT = 7;\nexport const VISIBILITY_TIMEOUT = 60 * 1000;\nexport const MAX_ATTEMPTS = 10;\n\n/**\n * The IndexedDbEventCountGuard uses this EVENT_COUNT_LIMIT to limit the number of analytics events\n * stored in AWC IndexedDB object store per product.\n *\n * The EventCountGuards uses this EVENT_COUNT_LIMIT to limit the number of analytics events\n * stored in AWC resilienceDB.\n */\nexport const EVENT_COUNT_LIMIT = 5000;","import uuid from 'uuid/v4';\nimport { EVENT_COUNT_LIMIT, MAX_ATTEMPTS } from './defaults';\nexport const convertToItemWrapper = (item, namespace, {\n id,\n retryAttempts,\n timeToProcessOffset\n}) => ({\n item,\n id: id || uuid(),\n retryAttempts: retryAttempts || 0,\n timeToBeProcessedAfter: Date.now() + (timeToProcessOffset || 0),\n namespace,\n timeAdded: Date.now()\n});\nexport const createOptionsWithDefaults = options => ({\n logger: options.logger || console,\n useMemory: options.useMemory || false,\n maxAttempts: options.maxAttempts || MAX_ATTEMPTS,\n // This is so that we can customise `maxEventLimit`, primarily for testing.\n maxEventLimit: options.maxEventLimit || EVENT_COUNT_LIMIT\n});\n\n// Not to be used on cursors or other requests that may call onsuccess multiple times.\nexport const requestToPromise = request => {\n return new Promise((resolve, reject) => {\n request.onsuccess = event => {\n resolve(event);\n };\n request.onerror = event => {\n reject(event);\n };\n });\n};\nexport const transactionToPromise = transaction => {\n return new Promise((resolve, reject) => {\n // We will have to see how much cost there is to waiting for the transaction to complete in the real world.\n // In theory in some cases we could return as soon as the request is complete and\n // just monitor errors on transactions with the logger.\n\n // This maybe more of an issue in Safari and other older browsers where commit isnt available\n // and we would have to wait for the transaction to complete itself.\n transaction.oncomplete = () => {\n resolve();\n };\n transaction.onerror = event => {\n reject(event);\n };\n transaction.onabort = event => {\n reject(event);\n };\n });\n};\n\n// Not available on older browsers https://developer.mozilla.org/en-US/docs/Web/API/IDBTransaction/commit\nexport const commitTransaction = (transaction, logger) => {\n try {\n if (typeof transaction.commit === 'function') {\n transaction.commit();\n }\n } catch (error) {\n logger.error('Failed to force commit transaction:', error);\n throw error;\n }\n return transactionToPromise(transaction);\n};\n\n// For requests that are not mission critical\nexport const monitorErrorsOnRequest = (request, logger) => {\n request.onerror = event => {\n logger.warn('Error thrown from request:', event);\n };\n};","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { GuardPolicy, NAMESPACE_AND_TIME_ADDED_INDEX } from './constants';\nimport { AbandonWriteError } from './errors';\nimport { commitTransaction, requestToPromise } from './util';\n\n/**\n * A class to enforce a limit on the amount of Analytics Events stored in AWC IndexedDb.\n */\nexport default class IndexedDbEventCountGuard {\n constructor(eventLimit, namespace, logger, deleteItemHandler) {\n /**\n * This query fetches the oldest events currently stored in AWC IndexedDb object store\n * and deletes them sequentially\n */\n _defineProperty(this, \"deleteOldestNEvents\", async (objectStore, count) => {\n var _target;\n const productTimeAddedIndex = objectStore.index(NAMESPACE_AND_TIME_ADDED_INDEX);\n const keyRangeValues = IDBKeyRange.bound([this.namespace, 0], [this.namespace, Date.now()]);\n const getAllRequest = productTimeAddedIndex.getAllKeys(keyRangeValues, count);\n const event = await requestToPromise(getAllRequest);\n const result = event === null || event === void 0 ? void 0 : (_target = event.target) === null || _target === void 0 ? void 0 : _target.result;\n\n // Adding extra safety\n if (result && Array.isArray(result) && result.length > 0) {\n try {\n const deletePromises = result.map(item => this.deleteItemHandler(objectStore, item));\n await Promise.all(deletePromises);\n } catch (error) {\n this.logger.warn('Failed to delete items from indexeddb.', error);\n throw error;\n }\n }\n });\n if (eventLimit > 0) {\n this.eventLimit = eventLimit;\n } else {\n throw Error('Event Limit has to be set higher than 1');\n }\n this.namespace = namespace;\n this.logger = logger;\n this.deleteItemHandler = deleteItemHandler;\n }\n\n /**\n * This function checks the number of events currently in AWC IndexedDB object store and if necessary,\n * will evict the oldest events in favour of the events we want to add.\n *\n * The indexed is treated as effectively: partitioned by product and sorted by timeAdded.\n *\n * This function can be re-used when the bulk add functionality is added in IndexedDbConnector.\n *\n * @param countOfEventsToAdd - The number of events we are proposing to add.\n */\n async insertItems(objectStore, items, policy = GuardPolicy.ABANDON) {\n const itemsToAdd = [...items];\n let numberOfEvictedItems = 0;\n switch (policy) {\n case GuardPolicy.ABANDON:\n await this.throwIfNotEnoughSpace(objectStore, items.length);\n break;\n case GuardPolicy.EVICT:\n numberOfEvictedItems = await this.evictIfNotEnoughSpace(objectStore, items.length);\n break;\n case GuardPolicy.IGNORE:\n // Removed items from `itemsToAdd` if there is insufficient space\n await this.calculateHowManyEventsWeCanAdd(objectStore, itemsToAdd);\n break;\n }\n const promises = itemsToAdd.map(item => requestToPromise(objectStore.add(item)));\n await Promise.all(promises);\n await commitTransaction(objectStore.transaction, this.logger);\n return {\n items: itemsToAdd,\n numberOfEvictedItems\n };\n }\n async throwIfNotEnoughSpace(objectStore, requiredSpace) {\n const freeSpace = await this.calculateFreeSpace(objectStore);\n if (freeSpace < requiredSpace) {\n throw new AbandonWriteError(`Not enough space in IndexedDb. Needed ${requiredSpace} but only had ${freeSpace}`);\n }\n }\n async evictIfNotEnoughSpace(objectStore, requiredSpace) {\n const freeSpace = await this.calculateFreeSpace(objectStore);\n if (freeSpace < requiredSpace) {\n const extraSpace = requiredSpace - freeSpace;\n await this.deleteOldestNEvents(objectStore, extraSpace);\n return extraSpace;\n }\n return 0;\n }\n async calculateHowManyEventsWeCanAdd(objectStore, items) {\n const freeSpace = await this.calculateFreeSpace(objectStore);\n if (freeSpace < items.length) {\n const numberOfItemsToRemove = items.length - freeSpace;\n const start = items.length - numberOfItemsToRemove;\n items.splice(start, numberOfItemsToRemove);\n }\n }\n async calculateFreeSpace(objectStore) {\n const numberOfEventsInDb = await this.getCountofEventsInObjectStore(objectStore);\n return this.eventLimit - numberOfEventsInDb;\n }\n\n /**\n * This query returns the count of items held in AWC IndexedDB object store per product.\n */\n async getCountofEventsInObjectStore(objectStore) {\n const productTimeAddedIndex = objectStore.index(NAMESPACE_AND_TIME_ADDED_INDEX);\n const keyRangeValues = IDBKeyRange.bound([this.namespace, 0], [this.namespace, Date.now()]);\n const request = productTimeAddedIndex.count(keyRangeValues);\n const event = await requestToPromise(request);\n return event.target.result;\n }\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nconst _excluded = [\"item\"],\n _excluded2 = [\"items\"];\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nimport { GuardPolicy, INDEXEDDB_TIMEOUT, NAMESPACE_AND_TIME_ADDED_INDEX, RESILIENCE_DB_NAME, RESILIENCE_STORE_NAME, RETRY_INDEX, StoreType, TIME_ADDED_INDEX, TIME_TO_PROCESS_AFTER_INDEX } from './constants';\nimport { GET_ITEM_COUNT, VISIBILITY_TIMEOUT } from './defaults';\nimport { CallbackProcessingError, InvalidPolicyError, NoIndexedDbError, shouldIgnoreResilienceDbError } from './errors';\nimport IndexedDbEventCountGuard from './IndexedDbEventCountGuard';\nimport { commitTransaction, convertToItemWrapper, createOptionsWithDefaults, monitorErrorsOnRequest, requestToPromise } from './util';\n\n/**\n * We have rolled our own client for IndexedDb as many Indexeddb libraries are\n * not flexible enough for our use case of:\n * 1. Adding specific indexes for time,\n * 2. Getting items on a specific index,\n * 3. Updating a field on an event while getting the event inside of a single ACID compliant transaction.\n */\nexport default class IndexedDbConnector {\n constructor(_namespace, _options = {}) {\n _defineProperty(this, \"startDB\", async () => {\n return new Promise(async (resolve, reject) => {\n if (typeof window !== 'undefined') {\n const dbTimeout = window.setTimeout(() => {\n this.logger.warn('IndexedDB timed out.');\n reject(new NoIndexedDbError());\n }, INDEXEDDB_TIMEOUT);\n\n /*\n * The database version number can never change.\n * An upgrade transaction is limited to only one connection to the database.\n * Once this is done, we cannot open any connections with older versions of the schema.\n * https://www.w3.org/TR/IndexedDB/#upgrade-transaction-construct\n *\n * Due to the nature of how AWC is used (multiple tabs that are very long lived),\n * we will not be able to run version upgrades via indexeddb.\n *\n * This does not mean we cant change what is stored in the tables,\n * this limitation just prevents us from:\n * - Creating new ObjectStores in this database connection, and\n * - Creating new indexes on our ObjectStores\n *\n * Any upgrades we wish to run in the future will have to create a new database,\n * and migrate all the data from older databases.\n *\n * This also means any migrations we make will have to be supported until we have evidence\n * that no events are coming from old versions of the database.\n * This may take a long time.\n */\n const request = window.indexedDB.open(RESILIENCE_DB_NAME, 1);\n request.onupgradeneeded = event => {\n if (event.oldVersion !== 0) {\n throw new Error('We cannot upgrade the database. Do not do this.');\n }\n const db = request.result;\n const store = db.createObjectStore(RESILIENCE_STORE_NAME, {\n keyPath: 'id'\n });\n store.createIndex(TIME_TO_PROCESS_AFTER_INDEX, TIME_TO_PROCESS_AFTER_INDEX, {\n unique: false\n });\n store.createIndex(RETRY_INDEX, RETRY_INDEX, {\n unique: false\n });\n store.createIndex(TIME_ADDED_INDEX, TIME_ADDED_INDEX, {\n unique: false\n });\n // Compound key index of product - timeAdded.\n store.createIndex(NAMESPACE_AND_TIME_ADDED_INDEX, ['namespace', 'timeAdded'], {\n unique: false\n });\n };\n try {\n await requestToPromise(request);\n return resolve(request.result);\n } catch (error) {\n this.logger.warn('IndexedDB failed to initialise.', error);\n reject(new NoIndexedDbError());\n } finally {\n window.clearTimeout(dbTimeout);\n }\n } else {\n this.logger.warn(\"IndexedDB failed to initialise. No 'window' object.\");\n reject(new NoIndexedDbError());\n }\n });\n });\n _defineProperty(this, \"addItem\", async (item, options = {}, policy = GuardPolicy.ABANDON) => {\n const {\n logger,\n namespace\n } = this;\n const value = convertToItemWrapper(item, namespace, options);\n const {\n objectStore\n } = await this.getObjectStoreAndTransaction('readwrite');\n if (policy === GuardPolicy.IGNORE) {\n throw new InvalidPolicyError(policy, 'IndexedDbConnector#addItem');\n }\n try {\n if (!value.namespace || value.namespace.length === 0 || typeof value.namespace !== 'string') {\n throw new Error('Namespace not specified');\n }\n\n // Making space for 1 event, if required.\n const bulkAddResult = await this.globalEventLimitGuard.insertItems(objectStore, [value], policy);\n if (bulkAddResult.items.length === 1) {\n return {\n item: bulkAddResult.items[0],\n numberOfEvictedItems: bulkAddResult.numberOfEvictedItems\n };\n }\n // Should never happen as the Policy and EventCountGuard should cause another pathway\n throw new Error(`Incorrect number of items added. Expected: 1, got: ${bulkAddResult.items.length}`);\n } catch (error) {\n if (shouldIgnoreResilienceDbError(error)) {\n throw error;\n }\n logger.log('Failed to add item to table', error);\n throw new Error('Request to add item to table failed');\n }\n });\n _defineProperty(this, \"bulkAddItem\", async (itemOptions, policy = GuardPolicy.ABANDON) => {\n const {\n logger,\n namespace\n } = this;\n const items = itemOptions.map(_ref => {\n let {\n item\n } = _ref,\n options = _objectWithoutProperties(_ref, _excluded);\n return convertToItemWrapper(item, namespace, options);\n });\n const {\n objectStore\n } = await this.getObjectStoreAndTransaction('readwrite');\n try {\n return await this.globalEventLimitGuard.insertItems(objectStore, items, policy);\n } catch (error) {\n if (shouldIgnoreResilienceDbError(error)) {\n throw error;\n }\n logger.log('Failed to add item to table', error);\n throw new Error('Request to add item to table failed');\n }\n });\n _defineProperty(this, \"getItems\", async (count = GET_ITEM_COUNT) => {\n const fixedCount = count > 0 ? count : GET_ITEM_COUNT;\n const {\n logger\n } = this;\n const maxAttempts = this.options.maxAttempts;\n const {\n transaction,\n objectStore\n } = await this.getObjectStoreAndTransaction('readwrite');\n const timeIndex = objectStore.index(TIME_TO_PROCESS_AFTER_INDEX);\n const upperBoundOpenKeyRange = IDBKeyRange.upperBound(Date.now());\n const request = timeIndex.openCursor(upperBoundOpenKeyRange);\n const getResult = await new Promise(async (resolve, reject) => {\n const items = [];\n let numberOfDeletedItems = 0;\n request.onerror = error => {\n logger.error('Failed to open cursor:', error);\n reject('Failed to open cursor');\n };\n\n // Requests for Cursors call onsuccess multiple times and cannot be converted to promises\n request.onsuccess = event => {\n const cursor = event.target.result;\n if (cursor) {\n // Prevent mutation of the value we are returning\n const value = _objectSpread({}, cursor.value);\n items.push(value);\n\n // Mutations seem to be required for testing indexeddb library\n const updatedValue = cursor.value;\n updatedValue.retryAttempts += 1;\n updatedValue.timeToBeProcessedAfter = Date.now() + VISIBILITY_TIMEOUT;\n if (updatedValue.retryAttempts >= maxAttempts) {\n ++numberOfDeletedItems;\n const request = cursor.delete();\n monitorErrorsOnRequest(request, logger);\n } else {\n const request = cursor.update(updatedValue);\n monitorErrorsOnRequest(request, logger);\n }\n if (items.length < fixedCount) {\n cursor.continue();\n } else {\n resolve({\n items,\n numberOfDeletedItems\n });\n }\n } else {\n resolve({\n items,\n numberOfDeletedItems\n });\n }\n };\n });\n await commitTransaction(transaction, this.logger);\n return getResult;\n });\n _defineProperty(this, \"deleteItems\", async itemIds => {\n const {\n transaction,\n objectStore\n } = await this.getObjectStoreAndTransaction('readwrite');\n try {\n const deletePromises = itemIds.map(id => this.deleteItem(objectStore, id));\n await commitTransaction(transaction, this.logger);\n await Promise.all(deletePromises);\n } catch (error) {\n this.logger.warn('Failed to delete items from indexeddb.', error);\n throw error;\n }\n });\n _defineProperty(this, \"getItemCount\", async () => {\n const {\n transaction,\n objectStore\n } = await this.getObjectStoreAndTransaction('readonly');\n const timeIndex = objectStore.index(TIME_TO_PROCESS_AFTER_INDEX);\n const upperBoundOpenKeyRange = IDBKeyRange.upperBound(Date.now());\n const request = timeIndex.count(upperBoundOpenKeyRange);\n const event = await requestToPromise(request);\n await commitTransaction(transaction, this.logger);\n return event.target.result;\n });\n _defineProperty(this, \"processItems\", async (processFn, count = GET_ITEM_COUNT) => {\n const _await$this$getItems = await this.getItems(count),\n {\n items\n } = _await$this$getItems,\n partialResult = _objectWithoutProperties(_await$this$getItems, _excluded2);\n try {\n const result = await processFn(items, partialResult);\n const itemIds = items.map(item => item.id);\n\n // We should not await this delete as a rejected promise would get caught by the catch statement\n await this.deleteItems(itemIds);\n return result;\n } catch (error) {\n // Eventually we will need a intermediate class to catch all errors but we should ignore this error\n // This allows libraries beneath to distinguish between a success or failure in processing to update schedulers or anything else\n // To provide back off or any other mechanism to allow what ever is cauing the errors to recover\n throw new CallbackProcessingError(error);\n }\n });\n _defineProperty(this, \"deleteItem\", async (objectStore, id) => {\n const {\n logger\n } = this;\n try {\n await requestToPromise(objectStore.delete(id));\n } catch (error) {\n logger.error('Failed to delete item:', id, error);\n throw error;\n }\n });\n _defineProperty(this, \"getObjectStoreAndTransaction\", async mode => {\n const transaction = (await this.db).transaction(RESILIENCE_STORE_NAME, mode);\n const objectStore = transaction.objectStore(RESILIENCE_STORE_NAME);\n return {\n transaction,\n objectStore\n };\n });\n this.options = createOptionsWithDefaults(_options);\n this.namespace = _namespace;\n this.logger = this.options.logger;\n if (!window.indexedDB) {\n throw new NoIndexedDbError();\n }\n this.db = this.startDB();\n // We just swallow any errors as we know that these are intermittent errors\n // when switching from indexeddb -> localStorage\n this.db.catch(() => {});\n\n /**\n *\n * This class will enforce the number of analytics events we can store in our IndexedDB object store\n * if asked before adding items to the object store.\n */\n this.globalEventLimitGuard = new IndexedDbEventCountGuard(this.options.maxEventLimit, this.namespace, this.logger, this.deleteItem);\n }\n storeType() {\n return StoreType.INDEXEDDB;\n }\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { GuardPolicy, StoreType } from './constants';\nimport { AbandonWriteError } from './errors';\nexport default class MemoryDbEventCountGuard {\n constructor(eventLimit, memoryItemHandlers) {\n /**\n * Unlike IndexedDb, we cannot take advantage of any index. So we are,\n * treating the memory store as a sorted set when adding items.\n */\n _defineProperty(this, \"insertItemsToMemoryStore\", (itemsToAdd, policy) => {\n switch (policy) {\n case GuardPolicy.ABANDON:\n return this.handleAbandonIfLimitWillExceedPolicy(itemsToAdd);\n case GuardPolicy.EVICT:\n return Promise.resolve(this.handleEvictOldestIfLimitExceededPolicy(itemsToAdd));\n case GuardPolicy.IGNORE:\n return this.handleAddAsManyAsPossible(itemsToAdd);\n }\n });\n if (eventLimit > 0) {\n this.eventLimit = eventLimit;\n } else {\n throw Error('Event Limit has to be set higher than 1');\n }\n this.memoryItemHandlers = memoryItemHandlers;\n }\n async handleAbandonIfLimitWillExceedPolicy(itemsToAdd) {\n const itemCount = await this.memoryItemHandlers.getItemCount();\n if (itemCount + itemsToAdd.length > this.eventLimit) {\n throw new AbandonWriteError(StoreType.MEMORY);\n }\n this.memoryItemHandlers.addItems(itemsToAdd);\n return {\n items: itemsToAdd,\n numberOfEvictedItems: 0\n };\n }\n handleEvictOldestIfLimitExceededPolicy(itemsToAdd) {\n this.memoryItemHandlers.addItems(itemsToAdd);\n const numberOfEvictedItems = this.memoryItemHandlers.evictEventsIfNeeded(this.eventLimit);\n return {\n items: itemsToAdd,\n numberOfEvictedItems\n };\n }\n async handleAddAsManyAsPossible(itemsToAdd) {\n const freeSpace = this.eventLimit - (await this.memoryItemHandlers.getItemCount());\n const partialEventsToAdd = freeSpace > itemsToAdd.length ? itemsToAdd : itemsToAdd.slice(0, freeSpace);\n this.memoryItemHandlers.addItems(partialEventsToAdd);\n return {\n items: partialEventsToAdd,\n numberOfEvictedItems: 0\n };\n }\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nconst _excluded = [\"item\"],\n _excluded2 = [\"items\"];\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nimport { GuardPolicy, StoreType } from './constants';\nimport { GET_ITEM_COUNT, VISIBILITY_TIMEOUT } from './defaults';\nimport { CallbackProcessingError, InvalidPolicyError } from './errors';\nimport MemoryDbEventCountGuard from './MemoryDbEventCountGuard';\nimport { convertToItemWrapper, createOptionsWithDefaults } from './util';\nexport default class MemoryDb {\n constructor(namespace, options = {}) {\n this.namespace = namespace;\n this.memoryStore = [];\n this.options = createOptionsWithDefaults(options);\n /**\n * This class will enforce the number of analytics events we can store in our MemoryDb\n */\n this.globalEventLimitGuard = new MemoryDbEventCountGuard(this.options.maxEventLimit, {\n addItems: this.addItems.bind(this),\n getItemCount: this.getItemCount.bind(this),\n evictEventsIfNeeded: this.evictEventsIfNeeded.bind(this)\n });\n }\n\n /**\n * This method is used mainly to write new events to MemoryDB and uses the MEMORY_DB_GUARD_POLICY.EVICT_OLDEST_IF_LIMIT_EXECEEDED policy\n * to removes oldest events when limit is reached.\n */\n async addItem(item, options = {}, policy = GuardPolicy.ABANDON) {\n if (policy === GuardPolicy.IGNORE) {\n throw new InvalidPolicyError(policy, 'IndexedDbConnector#addItem');\n }\n const storedValue = convertToItemWrapper(item, this.namespace, options);\n // Delegated responsiblity to event limit guard to insert to memory stored\n const bulkAddItemsResult = await this.globalEventLimitGuard.insertItemsToMemoryStore([storedValue], policy);\n return Promise.resolve({\n item: bulkAddItemsResult.items[0],\n numberOfEvictedItems: bulkAddItemsResult.numberOfEvictedItems\n });\n }\n bulkAddItem(itemOptions, policy = GuardPolicy.ABANDON) {\n const items = itemOptions.map(_ref => {\n let {\n item\n } = _ref,\n addOptions = _objectWithoutProperties(_ref, _excluded);\n return convertToItemWrapper(item, this.namespace, addOptions);\n });\n return this.bulkAddItemWrapperType(items, policy);\n }\n\n /**\n * This method is used mainly to write events to MemoryDB when unknown errors are thrown from IndexedDB.\n */\n bulkAddItemWrapperType(items, policy = GuardPolicy.ABANDON) {\n return Promise.resolve(this.globalEventLimitGuard.insertItemsToMemoryStore(items, policy));\n }\n getItems(count = GET_ITEM_COUNT) {\n return Promise.resolve(this.synchronousGetItems(count));\n }\n synchronousGetItems(count = GET_ITEM_COUNT) {\n const fixedCount = count > 0 ? count : GET_ITEM_COUNT;\n const now = Date.now();\n const wrappedItems = [];\n const itemsToRemove = [];\n for (let wrappedItem of this.memoryStore) {\n if (wrappedItem.timeToBeProcessedAfter <= now) {\n wrappedItems.push(_objectSpread({}, wrappedItem));\n // Mutates the item in the memoryStore array, but not whats inside of wrappedItems\n wrappedItem.timeToBeProcessedAfter += VISIBILITY_TIMEOUT;\n wrappedItem.retryAttempts += 1;\n if (wrappedItem.retryAttempts >= this.options.maxAttempts) {\n itemsToRemove.push(wrappedItem);\n }\n }\n if (wrappedItems.length >= fixedCount) {\n break;\n }\n }\n itemsToRemove.forEach(item => {\n const index = this.memoryStore.indexOf(item);\n this.memoryStore.splice(index, 1);\n });\n return {\n items: wrappedItems,\n numberOfDeletedItems: itemsToRemove.length\n };\n }\n deleteItems(itemIds) {\n this.memoryStore = this.memoryStore.filter(item => !itemIds.includes(item.id));\n return Promise.resolve(void 0);\n }\n getItemCount() {\n const now = Date.now();\n const count = this.memoryStore.filter(item => item.timeToBeProcessedAfter <= now).length;\n return Promise.resolve(count);\n }\n async processItems(processFn, count) {\n const _this$synchronousGetI = this.synchronousGetItems(count),\n {\n items\n } = _this$synchronousGetI,\n partialGetResult = _objectWithoutProperties(_this$synchronousGetI, _excluded2);\n const itemIds = items.map(i => i.id);\n try {\n const result = await processFn(items, partialGetResult);\n await this.deleteItems(itemIds);\n return result;\n } catch (error) {\n throw new CallbackProcessingError(error);\n }\n }\n storeType() {\n return StoreType.MEMORY;\n }\n\n /**\n * This function is adding items to the tail of the memoryStore and as it adds new items it keeps the\n * memory store sorted by timeAdded property. This makes evictions easier and adding elements to\n * memoryStore much faster.\n *\n * @param itemsToAdd\n */\n addItems(itemsToAdd) {\n this.memoryStore.push(...itemsToAdd);\n\n // Sorting everytime, intentionally.\n this.memoryStore.sort(function (a, b) {\n return a.timeAdded - b.timeAdded;\n });\n }\n\n /**\n * This function checks the number of events currently in AWC MemoryDb and if necessary,\n * will evict the oldest events in favour of the events we want to add.\n *\n * @param countOfEventsToAdd - The number of events we are proposing to add.\n */\n evictEventsIfNeeded(eventLimit) {\n const numberOfEventsInDb = this.memoryStore.length;\n // The number of analytics events currently in MemoryDb and\n // the Z events we are proposing to add will exceed our event count limit.\n if (numberOfEventsInDb > eventLimit) {\n const m = numberOfEventsInDb - eventLimit;\n\n // Removing oldest M events\n this.memoryStore.splice(0, m);\n return m;\n }\n return 0;\n }\n}","export let ResilienceMechanism = /*#__PURE__*/function (ResilienceMechanism) {\n ResilienceMechanism[\"INDEXEDDB\"] = \"indexeddb\";\n ResilienceMechanism[\"MEMORY\"] = \"memory\";\n return ResilienceMechanism;\n}({});\nexport let NetworkStatusEnum = /*#__PURE__*/function (NetworkStatusEnum) {\n NetworkStatusEnum[NetworkStatusEnum[\"ONLINE\"] = 0] = \"ONLINE\";\n NetworkStatusEnum[NetworkStatusEnum[\"OFFLINE\"] = 1] = \"OFFLINE\";\n return NetworkStatusEnum;\n}({});","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { ResilienceMechanism } from './types';\nexport class MetricsCollector {\n constructor() {\n // Number of events discarded due to exceeding retry limits.\n _defineProperty(this, \"itemsDiscardedByRetry\", 0);\n // Number of events created by the product in current tab.\n _defineProperty(this, \"eventCount\", 0);\n // Number of events discarded due to reaching queue max size.\n _defineProperty(this, \"itemsDiscardedByOverflow\", 0);\n // Will be used in the future when we get more resilience mechanisms\n _defineProperty(this, \"resilienceMechanism\", ResilienceMechanism.INDEXEDDB);\n /* --- LocalStorage specific metrics --- */\n // Emitted by purgeOrphanedQueues to tell us how many queues we have had to clean up due to\n // https://github.com/segmentio/localstorage-retry/pull/17\n _defineProperty(this, \"localstorageNumberOfQueuesPurged\", 0);\n // Emitted by reclaimEvents to tell us how many queues were seen in the process of reclaim.\n // We will only emit metrics for queues that are not currently being maintained (i.e. `ack` is not being updated).\n // Queue was found, all events removed and put into resilienceDb.\n _defineProperty(this, \"localstorageNumberOfFullReclaims\", 0);\n // Queue was found but not all events were able to be put into resilienceDb.\n _defineProperty(this, \"localstorageNumberOfPartialReclaims\", 0);\n // Reclaim failed for a queue and reclaim was abandonded.\n _defineProperty(this, \"localstorageNumberOfFailedReclaims\", 0);\n }\n addToItemsDiscardedByRetryCounter(numberOfDeletedEvents = 1) {\n this.itemsDiscardedByRetry += numberOfDeletedEvents;\n }\n addToEventCount() {\n this.eventCount++;\n }\n addToItemsDiscardedByOverflowCounter(numberOfDeletedEvents = 1) {\n this.itemsDiscardedByOverflow += numberOfDeletedEvents;\n }\n setResilienceMechanism(mechanism) {\n this.resilienceMechanism = mechanism;\n }\n\n /* */\n\n addToReclaimMetrics(reclaimMetrics) {\n this.localstorageNumberOfFullReclaims += reclaimMetrics.fullReclaims;\n this.localstorageNumberOfPartialReclaims += reclaimMetrics.partialReclaims;\n this.localstorageNumberOfFailedReclaims += reclaimMetrics.failedReclaims;\n }\n addToPurgedQueuesMetrics(numberOfQueuesPurged) {\n this.localstorageNumberOfQueuesPurged += numberOfQueuesPurged;\n }\n\n /* */\n\n subtractFromMetrics(sentMetrics) {\n this.itemsDiscardedByRetry = this.subtractFromCount(this.itemsDiscardedByRetry, sentMetrics.itemsDiscardedByRetry);\n this.eventCount = this.subtractFromCount(this.eventCount, sentMetrics.eventCount);\n this.itemsDiscardedByOverflow = this.subtractFromCount(this.itemsDiscardedByOverflow, sentMetrics.itemsDiscardedByOverflow);\n\n // Localstorage specific\n this.localstorageNumberOfFullReclaims = this.subtractFromCount(this.localstorageNumberOfFullReclaims, sentMetrics.fullReclaims);\n this.localstorageNumberOfPartialReclaims = this.subtractFromCount(this.localstorageNumberOfPartialReclaims, sentMetrics.partialReclaims);\n this.localstorageNumberOfFailedReclaims = this.subtractFromCount(this.localstorageNumberOfFailedReclaims, sentMetrics.failedReclaims);\n this.localstorageNumberOfQueuesPurged = this.subtractFromCount(this.localstorageNumberOfQueuesPurged, sentMetrics.localstorageQueuesPurged);\n }\n subtractFromCount(count, subtract) {\n return Math.max(count - (subtract || 0), 0);\n }\n getMetricsPayload() {\n return {\n itemsDiscardedByRetry: this.itemsDiscardedByRetry,\n eventCount: this.eventCount,\n itemsDiscardedByOverflow: this.itemsDiscardedByOverflow,\n resilienceMechanism: this.resilienceMechanism,\n // Localstorage specific\n localstorageQueuesPurged: this.localstorageNumberOfQueuesPurged,\n fullReclaims: this.localstorageNumberOfFullReclaims,\n partialReclaims: this.localstorageNumberOfPartialReclaims,\n failedReclaims: this.localstorageNumberOfFailedReclaims\n };\n }\n}\nlet cachedMetricsClient = null;\nexport default (() => {\n if (!cachedMetricsClient) {\n cachedMetricsClient = new MetricsCollector();\n }\n return cachedMetricsClient;\n});","import { NetworkStatusEnum } from './types';\nexport default class NetworkStatus {\n constructor(networkChangeCallback) {\n if (typeof window !== 'undefined') {\n window.addEventListener('offline', () => networkChangeCallback(NetworkStatusEnum.OFFLINE));\n window.addEventListener('online', () => networkChangeCallback(NetworkStatusEnum.ONLINE));\n }\n }\n getNetworkStatus() {\n if (window.navigator.onLine) {\n return NetworkStatusEnum.ONLINE;\n }\n return NetworkStatusEnum.OFFLINE;\n }\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nexport let CallbackStatus = /*#__PURE__*/function (CallbackStatus) {\n CallbackStatus[\"IDLE\"] = \"idle\";\n CallbackStatus[\"RUNNING\"] = \"running\";\n CallbackStatus[\"COMPLETED\"] = \"completed\";\n CallbackStatus[\"TIMED_OUT\"] = \"timedOut\";\n return CallbackStatus;\n}({});\nexport let CallbackEvent = /*#__PURE__*/function (CallbackEvent) {\n CallbackEvent[\"EXECUTE\"] = \"execute\";\n CallbackEvent[\"COMPLETE\"] = \"complete\";\n CallbackEvent[\"TIMEOUT\"] = \"timeout\";\n return CallbackEvent;\n}({});\nexport class CallbackWithTimeout {\n constructor(timeoutPeriod) {\n // Milliseconds to wait\n // Tracks the settimeout; so that we can clear the timeout\n _defineProperty(this, \"timeoutHandle\", undefined);\n _defineProperty(this, \"callbackStatus\", CallbackStatus.IDLE);\n if (timeoutPeriod > 0) {\n this.timeoutPeriod = timeoutPeriod;\n return;\n }\n throw new Error('CallbackWithTimeout requires timeout period higher than 0');\n }\n\n // This is a state machine to control the flow of execution.\n // IDLE -> RUNNING -> COMPLETED\n // IDLE -> RUNNING -> TIMEDOUT\n transitionCallbackStatus(currentStatus, event) {\n switch (currentStatus) {\n case CallbackStatus.IDLE:\n case CallbackStatus.TIMED_OUT:\n case CallbackStatus.COMPLETED:\n if (event === CallbackEvent.EXECUTE) {\n this.callbackStatus = CallbackStatus.RUNNING;\n }\n break;\n case CallbackStatus.RUNNING:\n switch (event) {\n case CallbackEvent.COMPLETE:\n this.callbackStatus = CallbackStatus.COMPLETED;\n break;\n case CallbackEvent.TIMEOUT:\n this.callbackStatus = CallbackStatus.TIMED_OUT;\n break;\n }\n break;\n default:\n this.callbackStatus = currentStatus;\n }\n }\n\n // Start a timeout. If this.callback(this._done) does not finish\n // by this.options.callbackTimeoutPeriod time period,\n // we will call done with a true value.\n executeCallbackWithTimeout(callback, onDone, onTimeout) {\n if (typeof window === 'undefined') {\n return;\n }\n this.transitionCallbackStatus(this.callbackStatus, CallbackEvent.EXECUTE);\n\n // Setting timeout\n this.timeoutHandle = window.setTimeout(() => {\n this.transitionCallbackStatus(this.callbackStatus, CallbackEvent.TIMEOUT);\n onTimeout();\n }, this.timeoutPeriod);\n\n // Executing callback\n callback(state => {\n this.cancelTimeout();\n if (this.getCallbackStatus() !== CallbackStatus.TIMED_OUT) {\n this.transitionCallbackStatus(this.callbackStatus, CallbackEvent.COMPLETE);\n onDone(state);\n }\n });\n }\n getCallbackStatus() {\n return this.callbackStatus;\n }\n\n // This allows us to cancel the timeout function, for example, if the callback finishes before the timeout period\n // or, if the user wants to manually cancel the timeout\n cancelTimeout() {\n if (typeof window !== 'undefined' && this.timeoutPeriod > 0 && this.timeoutHandle) {\n window.clearTimeout(this.timeoutHandle);\n this.timeoutHandle = undefined;\n }\n }\n}","// Clients can optionally provide the callbackTimeoutPeriod parameter\n\nexport let DoneState = /*#__PURE__*/function (DoneState) {\n DoneState[DoneState[\"NOOP\"] = 0] = \"NOOP\";\n DoneState[DoneState[\"SUCCESS\"] = 1] = \"SUCCESS\";\n DoneState[DoneState[\"ERROR\"] = 2] = \"ERROR\";\n return DoneState;\n}({});","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { CallbackStatus, CallbackWithTimeout } from './CallbackWithTimeout';\nimport { DoneState } from './types';\nconst SCHEDULER_OPTIONS_DEFAULT = {\n minRetryDelay: 1000,\n maxRetryDelay: 30000,\n backoffFactor: 2,\n backoffJitterPercentage: 0,\n waitInterval: 500,\n callbackTimeoutPeriod: 5000\n};\nexport let QueuedScheduleTypes = /*#__PURE__*/function (QueuedScheduleTypes) {\n QueuedScheduleTypes[QueuedScheduleTypes[\"NONE\"] = 0] = \"NONE\";\n QueuedScheduleTypes[QueuedScheduleTypes[\"IMMEDIATE\"] = 1] = \"IMMEDIATE\";\n QueuedScheduleTypes[QueuedScheduleTypes[\"WAIT\"] = 2] = \"WAIT\";\n return QueuedScheduleTypes;\n}({});\nexport default class Scheduler {\n constructor(retryOptions, callback) {\n _defineProperty(this, \"schedule\", ({\n immediate\n } = {\n immediate: false\n }) => {\n if (typeof window === 'undefined') {\n return;\n }\n if (this.operationInFlight) {\n if (immediate) {\n this.queuedSchedule = QueuedScheduleTypes.IMMEDIATE;\n } else if (this.queuedSchedule !== QueuedScheduleTypes.IMMEDIATE) {\n this.queuedSchedule = QueuedScheduleTypes.WAIT;\n }\n\n // Only run immediately if we have no failures\n } else if ((immediate || this.options.waitInterval <= 0) && this.failureCount === 0) {\n this.clearTimeout();\n this.run();\n\n // Backoff\n } else if (this.failureCount > 0 && this.scheduledTimeout === null) {\n this.scheduledTimeout = window.setTimeout(this.run, this.calculateBackoff());\n\n // Schedule as normal\n } else if (this.scheduledTimeout === null) {\n this.scheduledTimeout = window.setTimeout(this.run, this.options.waitInterval);\n }\n });\n _defineProperty(this, \"stop\", () => {\n this.clearTimeout();\n this.queuedSchedule = QueuedScheduleTypes.NONE;\n });\n _defineProperty(this, \"getFailureCount\", () => this.failureCount);\n _defineProperty(this, \"getCallbackStatus\", () => {\n return this.callbackTimer.getCallbackStatus();\n });\n _defineProperty(this, \"clearTimeout\", () => {\n if (typeof window !== 'undefined' && this.scheduledTimeout !== null) {\n window.clearTimeout(this.scheduledTimeout);\n this.scheduledTimeout = null;\n }\n });\n _defineProperty(this, \"run\", () => {\n this.operationInFlight = true;\n this.clearTimeout();\n try {\n this.callbackTimer.executeCallbackWithTimeout(\n // callback to execute\n this.callback,\n // when callback completes, call this function\n this.done,\n // on timeout, do this instead\n () => this.done(DoneState.ERROR));\n } catch (err) {\n this.done(err);\n }\n });\n _defineProperty(this, \"done\", state => {\n this.operationInFlight = false;\n if (state === DoneState.ERROR || this.callbackTimer.getCallbackStatus() === CallbackStatus.TIMED_OUT) {\n this.failureCount++;\n this.clearTimeout();\n } else if (state === DoneState.SUCCESS) {\n this.failureCount = 0;\n }\n this.processQueuedSchedule();\n });\n _defineProperty(this, \"processQueuedSchedule\", () => {\n if (this.queuedSchedule !== QueuedScheduleTypes.NONE) {\n const immediate = this.queuedSchedule === QueuedScheduleTypes.IMMEDIATE;\n this.queuedSchedule = QueuedScheduleTypes.NONE;\n this.schedule({\n immediate\n });\n } else if (this.failureCount > 0) {\n // This will schedule tasks when this._done was called with a truthy value\n // For example, when this.callback(this._done) was not called within\n // this.callbackTimeoutPeriod\n this.schedule();\n }\n });\n _defineProperty(this, \"calculateBackoff\", () => {\n const {\n minRetryDelay,\n maxRetryDelay,\n backoffFactor,\n backoffJitterPercentage\n } = this.options;\n let ms = minRetryDelay * backoffFactor ** this.failureCount;\n if (backoffJitterPercentage) {\n const rand = Math.random();\n const deviation = Math.floor(rand * backoffJitterPercentage * ms);\n if (Math.floor(rand * 10) < 5) {\n ms -= deviation;\n } else {\n ms += deviation;\n }\n }\n return Number(Math.min(ms, maxRetryDelay).toPrecision(1));\n });\n this.options = {\n minRetryDelay: retryOptions.minRetryDelay || SCHEDULER_OPTIONS_DEFAULT.minRetryDelay,\n maxRetryDelay: retryOptions.maxRetryDelay || SCHEDULER_OPTIONS_DEFAULT.maxRetryDelay,\n backoffFactor: retryOptions.backoffFactor || SCHEDULER_OPTIONS_DEFAULT.backoffFactor,\n backoffJitterPercentage: retryOptions.backoffJitterPercentage || SCHEDULER_OPTIONS_DEFAULT.backoffJitterPercentage,\n waitInterval: retryOptions.waitInterval !== undefined ? retryOptions.waitInterval : SCHEDULER_OPTIONS_DEFAULT.waitInterval,\n callbackTimeoutPeriod: retryOptions.callbackTimeoutPeriod || SCHEDULER_OPTIONS_DEFAULT.callbackTimeoutPeriod\n };\n this.scheduledTimeout = null;\n this.failureCount = 0;\n this.callback = callback;\n this.operationInFlight = false;\n this.queuedSchedule = QueuedScheduleTypes.NONE;\n this.callbackTimer = new CallbackWithTimeout(this.options.callbackTimeoutPeriod);\n }\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nimport { purgeOrphanedQueues, reclaimEvents } from '../localstorage-retry';\nimport ResilienceDb, { CallbackProcessingErrorName, GuardPolicy } from '../resiliencedb';\nimport getMetricsCollector from './Metrics';\nimport NetworkStatus from './NetworkStatus';\nimport Scheduler, { DoneState } from './scheduler';\nimport { NetworkStatusEnum } from './types';\nconst ONE_MINUTE = 60000;\nconst LONG_POLLING_OPTIONS = {\n backoffFactor: 0,\n backoffJitterPercentage: 0,\n flushWaitMs: ONE_MINUTE,\n minRetryDelay: ONE_MINUTE,\n maxRetryDelay: ONE_MINUTE\n};\nexport const DEFAULT_POLLING_OPTIONS = {\n backoffFactor: 2,\n backoffJitterPercentage: 0.2,\n batchFlushSize: 7,\n flushBeforeUnload: false,\n flushWaitMs: 500,\n maxAttempts: 10,\n // TODO figure out this number. For indexeddb we are sharing the queue with all tabs\n maxItems: 1000,\n maxRetryDelay: 30000,\n minRetryDelay: 1000\n};\nexport default class PullBatchableQueue {\n constructor(queuePrefix, product, options, logger) {\n this.queuePrefix = queuePrefix;\n // Avoiding using options in ResilienceDB at this stage as\n // the options are optimised for the PushBatchableQueue\n this.resilience = new ResilienceDb(product, {\n logger,\n maxAttempts: options === null || options === void 0 ? void 0 : options.maxAttempts,\n maxEventLimit: options === null || options === void 0 ? void 0 : options.maxItems\n });\n this.options = this.buildOptions(options);\n this.scheduler = new Scheduler(_objectSpread(_objectSpread({}, this.options), {}, {\n waitInterval: options !== null && options !== void 0 && options.flushBeforeUnload ? 0 : this.options.flushWaitMs\n }), this.scheduleCallback.bind(this));\n this.longPollingScheduler = new Scheduler(_objectSpread(_objectSpread({}, LONG_POLLING_OPTIONS), {}, {\n waitInterval: LONG_POLLING_OPTIONS.flushWaitMs\n }), this.scheduleLongCallBack.bind(this));\n this.metricsCollector = getMetricsCollector();\n this.networkStatus = new NetworkStatus(status => {\n if (status === NetworkStatusEnum.OFFLINE) {\n this.scheduler.stop();\n } else {\n this.checkEventCountAndReschedule();\n }\n });\n }\n start(flushCallback) {\n this.batchFlushCallback = flushCallback;\n this.longPollingScheduler.schedule();\n }\n stop() {\n this.scheduler.stop();\n this.longPollingScheduler.stop();\n }\n async addItem(item) {\n // Since Jira and Confluence use `.toJSON` on objects that should be strings\n // And expect us to use `JSON.stringify` on these objects,\n // And indexeddb strips these functions from the objects when adding them to the DB,\n // We must run this silly stringify and parse before passing the event to the resilience meechanism.\n // Planning on removing this in v4\n const jsonStringifiedAndParsedItem = JSON.parse(JSON.stringify(item));\n const {\n numberOfEvictedItems\n } = await this.resilience.addItem(jsonStringifiedAndParsedItem, {}, GuardPolicy.EVICT);\n this.scheduler.schedule();\n this.metricsCollector.addToEventCount();\n if (numberOfEvictedItems > 0) {\n this.metricsCollector.addToItemsDiscardedByOverflowCounter(numberOfEvictedItems);\n }\n }\n getGlobalRetryCount() {\n return this.scheduler.getFailureCount();\n }\n async scheduleCallback(done) {\n // Even though we stopped the scheduler, it can be restarted with a call to schedule.\n // This could be triggered by a new event or the longPollingScheduler\n if (this.networkStatus.getNetworkStatus() === NetworkStatusEnum.OFFLINE) {\n done(DoneState.NOOP);\n return;\n }\n try {\n const result = await this.resilience.processItems(this.flush.bind(this), this.options.batchFlushSize);\n done(result);\n } catch (error) {\n if (error.name === CallbackProcessingErrorName) {\n done(DoneState.ERROR);\n return;\n }\n // TODO we can probably log here but throwing is useless as it will just be shallowed by the Scheduler\n // In theory something else should catch all other errors from indexeddb and this should never happen.\n } finally {\n await this.checkEventCountAndReschedule();\n }\n }\n async checkEventCountAndReschedule() {\n const eventWaitingCount = await this.resilience.getItemCount();\n if (eventWaitingCount > 0) {\n this.scheduler.schedule({\n immediate: eventWaitingCount >= this.options.batchFlushSize\n });\n }\n }\n async scheduleLongCallBack(done) {\n // Eventually we will want to send data about how many queues were purged\n const numberOfQueuesPurged = purgeOrphanedQueues(this.queuePrefix);\n this.metricsCollector.addToPurgedQueuesMetrics(numberOfQueuesPurged);\n // Eventually we will want to send data about how attempted reclaims and actual reclaims were made\n const reclaimMetrics = await reclaimEvents(this.queuePrefix, async localStorageItems => {\n const itemsToAdd = localStorageItems.map(localStorageItem => ({\n item: localStorageItem.item,\n retryAttempts: localStorageItem.attemptNumber,\n id: localStorageItem.id\n }));\n const {\n items: addedEvents\n } = await this.resilience.bulkAddItem(itemsToAdd, GuardPolicy.IGNORE);\n if (addedEvents.length === itemsToAdd.length) {\n return {\n status: 'successful'\n };\n } else {\n return {\n status: 'partial',\n acceptedItemIds: addedEvents.map(event => event.id)\n };\n }\n });\n this.metricsCollector.addToReclaimMetrics(reclaimMetrics);\n\n // We dont want to flush events from here as there maybe issues with analytics-service\n // Scheduler has all the context and can schedule the next batch accordingly\n await this.checkEventCountAndReschedule();\n done(DoneState.SUCCESS);\n this.longPollingScheduler.schedule();\n }\n flush(wrappedItems, otherMetadata) {\n this.metricsCollector.setResilienceMechanism(this.resilience.storeType());\n const {\n batchFlushCallback\n } = this;\n if (!batchFlushCallback) {\n throw new Error('batchFlushCallback has not been set. Call PullBatchableQueue#start first.');\n }\n return new Promise((resolve, reject) => {\n if (wrappedItems.length <= 0) {\n resolve(DoneState.NOOP);\n return;\n }\n const items = wrappedItems.map(wrappedItem => {\n const item = wrappedItem.item;\n if (wrappedItem.retryAttempts > 0 && item.msg) {\n if (!item.msg._metadata) {\n item.msg._metadata = {};\n }\n item.msg._metadata.failedAttempts = wrappedItem.retryAttempts;\n }\n return item;\n });\n batchFlushCallback(items, error => {\n if (error) {\n if (otherMetadata.numberOfDeletedItems > 0) {\n this.metricsCollector.addToItemsDiscardedByRetryCounter(otherMetadata.numberOfDeletedItems);\n }\n reject(error);\n } else {\n resolve(DoneState.SUCCESS);\n }\n });\n });\n }\n buildOptions(options) {\n return {\n backoffFactor: (options === null || options === void 0 ? void 0 : options.backoffFactor) || DEFAULT_POLLING_OPTIONS.backoffFactor,\n backoffJitterPercentage: (options === null || options === void 0 ? void 0 : options.backoffJitterPercentage) !== undefined ? options.backoffJitterPercentage : DEFAULT_POLLING_OPTIONS.backoffJitterPercentage,\n batchFlushSize: (options === null || options === void 0 ? void 0 : options.batchFlushSize) || DEFAULT_POLLING_OPTIONS.batchFlushSize,\n flushBeforeUnload: (options === null || options === void 0 ? void 0 : options.flushBeforeUnload) || DEFAULT_POLLING_OPTIONS.flushBeforeUnload,\n flushWaitMs: (options === null || options === void 0 ? void 0 : options.flushWaitMs) || DEFAULT_POLLING_OPTIONS.flushWaitMs,\n maxItems: (options === null || options === void 0 ? void 0 : options.maxItems) || DEFAULT_POLLING_OPTIONS.maxItems,\n maxAttempts: (options === null || options === void 0 ? void 0 : options.maxAttempts) || DEFAULT_POLLING_OPTIONS.maxAttempts,\n maxRetryDelay: (options === null || options === void 0 ? void 0 : options.maxRetryDelay) || DEFAULT_POLLING_OPTIONS.maxRetryDelay,\n minRetryDelay: (options === null || options === void 0 ? void 0 : options.minRetryDelay) || DEFAULT_POLLING_OPTIONS.minRetryDelay\n };\n }\n}","import { GuardPolicy, StoreType } from './constants';\nimport { NoIndexedDbError, shouldIgnoreResilienceDbError } from './errors';\nimport IndexedDbConnector from './IndexedDbConnector';\nimport MemoryDb from './MemoryDb';\nimport { createOptionsWithDefaults } from './util';\nexport default class DbDelegator {\n constructor(namespace, options = {}) {\n this.namespace = namespace;\n this.options = createOptionsWithDefaults(options);\n if (!namespace || namespace.length === 0 || typeof namespace !== 'string') {\n throw new Error('Invalid namespace provided');\n }\n this.resilience = this.getResilienceMechanism(namespace, options);\n }\n getResilienceMechanism(namespace, options) {\n if (!options.useMemory) {\n try {\n return new IndexedDbConnector(namespace, options);\n } catch (error) {\n if (!(error instanceof NoIndexedDbError)) {\n var _options$logger;\n (_options$logger = options.logger) === null || _options$logger === void 0 ? void 0 : _options$logger.warn('Attempted to create IndexedDbResilience but failed. Using memory instead.');\n }\n }\n }\n return new MemoryDb(this.namespace, options);\n }\n addItem(item, options, policy = GuardPolicy.ABANDON) {\n return this.runOrFailOver(() => this.resilience.addItem(item, options, policy));\n }\n bulkAddItem(itemOptions, policy = GuardPolicy.ABANDON) {\n return this.runOrFailOver(() => this.resilience.bulkAddItem(itemOptions, policy));\n }\n getItems(count) {\n return this.runOrFailOver(() => this.resilience.getItems(count));\n }\n deleteItems(itemIds) {\n return this.runOrFailOver(() => this.resilience.deleteItems(itemIds));\n }\n getItemCount() {\n return this.runOrFailOver(() => this.resilience.getItemCount());\n }\n processItems(processFn, count) {\n return this.runOrFailOver(() => this.resilience.processItems(processFn, count));\n }\n storeType() {\n return this.resilience.storeType();\n }\n async runOrFailOver(runnable) {\n try {\n return await runnable();\n } catch (error) {\n if (shouldIgnoreResilienceDbError(error)) {\n throw error;\n } else if (this.resilience.storeType() === StoreType.INDEXEDDB) {\n await this.failOver();\n }\n return runnable();\n }\n }\n async failOver() {\n // Attempt to get any events we can and put them into memory\n const oldResilience = this.resilience;\n const newResilience = new MemoryDb(this.namespace, this.options);\n this.resilience = newResilience;\n try {\n const {\n items\n } = await oldResilience.getItems(this.options.maxEventLimit);\n if (items.length > 0) {\n const bulkAddItemsResponse = await newResilience.bulkAddItemWrapperType(items, GuardPolicy.IGNORE);\n const addedItemIds = bulkAddItemsResponse.items.map(item => item.id);\n await oldResilience.deleteItems(addedItemIds);\n }\n } catch (error) {\n this.options.logger.warn('Unexpected error from ResilienceDb, switching to MemoryDb');\n // Dont need to catch. We are just getting events if we can\n }\n }\n}","// Segment event types copied from our backend\n// https://bitbucket.org/atlassian/analytics-service/src/master/api/src/main/java/com/atlassian/dataservices/analytics/service/api/segment/\n\nexport let SegmentEventTypes = /*#__PURE__*/function (SegmentEventTypes) {\n SegmentEventTypes[\"IDENTIFY\"] = \"identify\";\n SegmentEventTypes[\"PAGE\"] = \"page\";\n SegmentEventTypes[\"TRACK\"] = \"track\";\n return SegmentEventTypes;\n}({});\nexport let CrossDomainIdentifierType = /*#__PURE__*/function (CrossDomainIdentifierType) {\n CrossDomainIdentifierType[\"XC\"] = \"xc\";\n CrossDomainIdentifierType[\"UID\"] = \"uid\";\n return CrossDomainIdentifierType;\n}({});\nexport let CrossDomainIdentifierState = /*#__PURE__*/function (CrossDomainIdentifierState) {\n CrossDomainIdentifierState[\"NEW\"] = \"NEW\";\n CrossDomainIdentifierState[\"CHANGED\"] = \"CHANGED\";\n CrossDomainIdentifierState[\"EXISTING\"] = \"EXISTING\";\n CrossDomainIdentifierState[\"TIMEOUT\"] = \"TIMEOUT\";\n CrossDomainIdentifierState[\"ERROR\"] = \"ERROR\";\n CrossDomainIdentifierState[\"UNAVAILABLE\"] = \"UNAVAILABLE\";\n CrossDomainIdentifierState[\"MALFORMED\"] = \"MALFORMED\";\n CrossDomainIdentifierState[\"UNKNOWN\"] = \"UNKNOWN\";\n return CrossDomainIdentifierState;\n}({});","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nimport { SegmentEventTypes } from '../integration/types';\nexport function attachXidToSingleEvent(item, xidCallback) {\n if (!(xidCallback && xidCallback instanceof Function)) {\n return item;\n }\n if (item.msg.type === SegmentEventTypes.PAGE || item.msg.type === SegmentEventTypes.TRACK) {\n const xid = xidCallback();\n if (xid && Array.isArray(xid)) {\n item.msg.properties = _objectSpread(_objectSpread({}, item.msg.properties), {}, {\n xid\n });\n }\n } else if (item.msg.traits && item.msg.type === SegmentEventTypes.IDENTIFY) {\n const xid = xidCallback();\n if (xid && Array.isArray(xid)) {\n item.msg.traits = _objectSpread(_objectSpread({}, item.msg.traits), {}, {\n xid\n });\n }\n }\n return item;\n}\nexport async function attachXidToMultipleEvents(items, xidItemPromiseCallback) {\n try {\n const xidCallback = await xidItemPromiseCallback;\n return items.map(item => attachXidToSingleEvent(item, xidCallback));\n } catch (error) {\n return items;\n }\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nimport memoize from 'memoize-one';\nexport const sendEvents = async options => {\n var _createOrGetAbortCont;\n const signal = (_createOrGetAbortCont = createOrGetAbortController(options)) === null || _createOrGetAbortCont === void 0 ? void 0 : _createOrGetAbortCont.signal;\n const corsOptions = getCorsForUrl(options.url);\n const response = await fetch(options.url, _objectSpread({\n method: 'POST',\n // Content-type has to be text/plain in order to prevent unnecessary `OPTIONS` requests.\n headers: {\n 'Content-Type': 'text/plain'\n },\n body: JSON.stringify(options.batch),\n signal\n }, corsOptions));\n if (response.status === 429 || response.status >= 500 && response.status < 600) {\n throw new Error(`HTTP Error ${response.status} (${response.statusText})`);\n }\n return response;\n};\nconst createOrGetAbortController = options => {\n if (options.abortController) {\n return options.abortController;\n } else if (options.timeout) {\n const abortController = new AbortController();\n\n // After a fetch has completed, calling abort is ignored.\n setTimeout(() => {\n abortController.abort();\n }, options.timeout);\n return abortController;\n }\n};\n\n// To ensure we always have cookies, we should check if the origins match.\n// If they dont, we need to set mode to `cors` and credentials to `include`.\nconst getCorsForUrl = memoize(url => {\n const origin = new URL(url).origin;\n if (origin === location.origin) {\n return {};\n } else {\n return {\n mode: 'cors',\n credentials: 'include'\n };\n }\n});","export let AWCCookiesKeys = /*#__PURE__*/function (AWCCookiesKeys) {\n AWCCookiesKeys[\"AWC_TLD_TEST\"] = \"AWC_TLD_TEST\";\n AWCCookiesKeys[\"AWC_ANALYTICS_DEBUG\"] = \"AWC_ANALYTICS_DEBUG\";\n AWCCookiesKeys[\"AJS_ANONYMOUS_ID\"] = \"AJS_ANONYMOUS_ID\";\n return AWCCookiesKeys;\n}({});\nclass CookieSchema {\n constructor(key, options) {\n this.key = key;\n this.options = options;\n }\n getAttributes() {\n return this.options;\n }\n getKey() {\n return this.key;\n }\n}\nexport const AllAnalyticsCookies = {\n [AWCCookiesKeys.AWC_TLD_TEST]: new CookieSchema('__awc_tld_test__', {\n expires: 365,\n secure: window.location.protocol === 'https:',\n path: '/'\n }),\n [AWCCookiesKeys.AWC_ANALYTICS_DEBUG]: new CookieSchema('atlassian_analytics_debug', {\n expires: 365,\n secure: window.location.protocol === 'https:',\n path: '/'\n }),\n [AWCCookiesKeys.AJS_ANONYMOUS_ID]: new CookieSchema('ajs_anonymous_id', {\n expires: 365,\n secure: window.location.protocol === 'https:',\n path: '/'\n })\n};","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nexport class InMemoryStore {\n constructor() {\n _defineProperty(this, \"_data\", {});\n _defineProperty(this, \"length\", 0);\n _defineProperty(this, \"setItem\", (key, value) => {\n this._data[key] = value;\n this.length = Object.keys(this._data).length;\n return value;\n });\n _defineProperty(this, \"getItem\", key => {\n if (key in this._data) {\n return this._data[key];\n }\n return null;\n });\n _defineProperty(this, \"removeItem\", key => {\n if (key in this._data) {\n delete this._data[key];\n }\n this.length = Object.keys(this._data).length;\n return null;\n });\n _defineProperty(this, \"clear\", () => {\n this._data = {};\n this.length = 0;\n });\n _defineProperty(this, \"key\", index => Object.keys(this._data)[index]);\n }\n}\n\n// eslint-disable-next-line import/no-anonymous-default-export\nexport default new InMemoryStore();","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\n/*\n * Code heavily influenced by Segment's Store https://github.com/segmentio/localstorage-retry/blob/master/lib/store.js\n * and Engine https://github.com/segmentio/localstorage-retry/blob/master/lib/engine.js\n * But is not used because it's not public API and is too restrictive in the way it sets keys and does JSON parsing and stringify\n */\nimport { envType } from '../analyticsWebTypes';\nimport InMemoryStorage from './InMemoryStorage';\nexport const AWC_STORAGE_PREFIX = 'awc';\nexport const GLOBAL_IN_MEMORY_NAME = 'awcInMemoryStorageFallback';\nexport function isSupported(store) {\n const TEST_VALUE = 'test_value';\n if (!store) {\n return false;\n }\n try {\n const key = 'awc.storage.support';\n store.setItem(key, TEST_VALUE);\n const value = store.getItem(key);\n store.removeItem(key);\n\n // handle localStorage silently failing\n return value === TEST_VALUE;\n } catch (e) {\n // Can throw if localStorage is disabled\n return false;\n }\n}\nexport function isQuotaExceeded(e) {\n let quotaExceeded = false;\n if (e.code) {\n switch (e.code) {\n case 22:\n quotaExceeded = true;\n break;\n case 1014:\n // Firefox\n if (e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {\n quotaExceeded = true;\n }\n break;\n default:\n break;\n }\n } else if (e.number === -2147024882) {\n // Internet Explorer 8\n quotaExceeded = true;\n }\n return quotaExceeded;\n}\nexport default class SafeStorage {\n constructor(storageToUse, options = {}) {\n _defineProperty(this, \"getStore\", () => this._store);\n _defineProperty(this, \"getItem\", key => this._store.getItem(this.createKey(key)));\n _defineProperty(this, \"removeItem\", key => this._store.removeItem(this.createKey(key)));\n _defineProperty(this, \"setItem\", (key, value) => {\n try {\n this._store.setItem(this.createKey(key), value);\n } catch (err) {\n if (isQuotaExceeded(err)) {\n this.swapToInMemory();\n this._store.setItem(this.createKey(key), value);\n }\n }\n });\n _defineProperty(this, \"swapToInMemory\", () => {\n if (this._store === InMemoryStorage || typeof window === 'undefined') {\n return;\n }\n const keys = Object.keys(this._store || {});\n let inMemoryStorage;\n if (isSupported(window[GLOBAL_IN_MEMORY_NAME])) {\n inMemoryStorage = window[GLOBAL_IN_MEMORY_NAME];\n } else {\n inMemoryStorage = InMemoryStorage;\n if (!window[GLOBAL_IN_MEMORY_NAME]) {\n // If not already attached to window then attach our instance of InMemoryStorage\n // We need to do this because if there are multiple instances of Analytics Client in multiple scopes,\n // there is no way to guarantee the throttling behaviour of the UI viewed event across those instances without a global singleton\n window[GLOBAL_IN_MEMORY_NAME] = InMemoryStorage;\n }\n }\n keys.forEach(key => {\n if (key.indexOf(this.getPrefix()) === 0) {\n const value = this._store.getItem(key);\n if (value) {\n inMemoryStorage.setItem(key, value);\n }\n }\n });\n this._store = inMemoryStorage;\n });\n _defineProperty(this, \"clear\", () => this._store.clear());\n _defineProperty(this, \"key\", index => this._store.key(index));\n _defineProperty(this, \"getPrefix\", () => this._prefix);\n _defineProperty(this, \"createKey\", key => {\n if (this._prefix) {\n return `${this.getPrefix()}.${key}`;\n }\n return key;\n });\n this.options = options;\n const prefixes = [];\n if (options.useStoragePrefix === undefined || options.useStoragePrefix) {\n prefixes.push(AWC_STORAGE_PREFIX);\n }\n if (options.envPrefix && options.envPrefix !== envType.PROD) {\n prefixes.push(options.envPrefix);\n }\n this._prefix = prefixes.join('-');\n if (isSupported(storageToUse)) {\n this._store = storageToUse;\n } else {\n this.swapToInMemory();\n }\n }\n}","import InMemoryStorage from './InMemoryStorage';\nimport SafeStorage from './SafeStorage';\n// eslint-disable-next-line import/no-anonymous-default-export\nexport default class extends SafeStorage {\n constructor(options) {\n let storageToUse;\n try {\n storageToUse = window.localStorage || InMemoryStorage;\n } catch (err) {\n storageToUse = InMemoryStorage;\n }\n super(storageToUse, options);\n }\n}","import SafeLocalStorage from '../storage/SafeLocalStorage';\nexport default class LocalStorageAlt {\n constructor() {\n this.safeStorage = new SafeLocalStorage({\n useStoragePrefix: false\n });\n }\n set(name, value) {\n this.safeStorage.setItem(name, value);\n return value;\n }\n get(name) {\n const value = this.safeStorage.getItem(name);\n return value || undefined;\n }\n remove(name) {\n this.safeStorage.removeItem(name);\n }\n}","import Cookie from 'js-cookie';\nimport memoize from 'memoize-one';\nimport { AllAnalyticsCookies } from './AllAnalyticsCookies';\nexport const canUseCookie = (disableCookiePersistence = false) => {\n if (disableCookiePersistence) {\n return false;\n }\n return !(location.protocol === 'file:' || location.protocol === 'chrome-extension:');\n};\n\n// Only exported for testing\nexport const COOKIE_NAME = AllAnalyticsCookies.AWC_TLD_TEST.getKey();\nexport const COOKIE_VALUE = 'tld_test';\n\n// This is an expensive function so we should only run this once per page load\nexport const getTld = memoize(() => {\n if (typeof location === 'undefined') {\n return '';\n }\n const {\n hostname\n } = location;\n const splitHostname = hostname.split('.');\n for (let i = 1; i <= splitHostname.length; i++) {\n const domainParts = splitHostname.slice(i * -1);\n const domain = `.${domainParts.join('.')}`;\n Cookie.set(COOKIE_NAME, COOKIE_VALUE, {\n domain\n });\n if (Cookie.get(COOKIE_NAME) === COOKIE_VALUE) {\n Cookie.remove(COOKIE_NAME, {\n domain\n });\n return domain;\n }\n }\n return hostname;\n});","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nimport Cookie from 'js-cookie';\nimport { AllAnalyticsCookies } from './AllAnalyticsCookies';\nimport LocalStorageAlt from './localStorageAlt';\nimport { canUseCookie, getTld } from './util';\nexport default class CookieWrapper {\n constructor(disableCookiePersistence) {\n this.cookieLike = canUseCookie(disableCookiePersistence) ? Cookie : new LocalStorageAlt();\n }\n set(name, value, options) {\n // no-op\n if (!AllAnalyticsCookies[name]) {\n // eslint-disable-next-line no-console\n console.warn(`Unknown cookie key ${name} provided, not set.`);\n return;\n }\n return this.cookieLike.set(AllAnalyticsCookies[name].getKey(), value, _objectSpread(_objectSpread({}, AllAnalyticsCookies[name].getAttributes()), {}, {\n // Function is memoized so we only calculate this once per page load\n domain: getTld()\n }, options));\n }\n get(name) {\n if (!AllAnalyticsCookies[name]) {\n // eslint-disable-next-line no-console\n console.warn(`Unknown cookie key ${name} provided, not fetched.`);\n return;\n }\n return this.cookieLike.get(AllAnalyticsCookies[name].getKey());\n }\n remove(name, options) {\n if (!AllAnalyticsCookies[name]) {\n // eslint-disable-next-line no-console\n console.warn(`Unknown cookie key ${name} provided, not removed.`);\n return;\n }\n this.cookieLike.remove(AllAnalyticsCookies[name].getKey(), _objectSpread({}, options));\n }\n}","import differenceInDays from 'date-fns/differenceInDays';\nimport uuid from 'uuid/v4';\nimport Cookie, { AllAnalyticsCookies, AWCCookiesKeys } from '../cookie';\nimport SafeLocalStorage from '../storage/SafeLocalStorage';\n\n// Cookie is stale, if anonymousId was generated 7 days ago.\nconst ANONYMOUS_ID_COOKIE_STALE_DAYS = 7;\nconst SAFE = 'SAFE';\nconst UNSAFE = 'UNSAFE';\nconst NOT_FOUND = 'NOT_FOUND';\nconst COOKIE = 'COOKIE';\nconst LOCAL_STORAGE = 'LOCAL_STORAGE';\nexport default class User {\n constructor(disableCookiePersistence) {\n this.store = new SafeLocalStorage({\n useStoragePrefix: false\n });\n this.cookie = new Cookie(disableCookiePersistence);\n }\n getUserId() {\n return this.userId || null;\n }\n setUserId(userId) {\n this.userId = userId;\n }\n getAnonymousId(customAnonymousIdGenerator) {\n /**\n * Prefer localStorage as there cant be duplicate keys, and its faster. Also update cookie, if stale.\n * If not set in localStorage, check cookies. Also set localStorage for future attempts.\n * If not in cookies, generate a new one. Set both cookie and localStorage keys.\n */\n return this.getAnonymousIdFromLocalStorageAndUpdateCookieIfStale() || this.getAnonymousIdFromCookieAndUpdateLocalStorage() || this.generateNewAnonymousId(customAnonymousIdGenerator);\n }\n setAnonymousId(anonymousId) {\n const stringifyAnonymosId = JSON.stringify(anonymousId);\n this.cookie.set(AWCCookiesKeys.AJS_ANONYMOUS_ID, stringifyAnonymosId);\n this.lastAnonymousIdCookieUpdate = Date.now();\n return this.store.setItem(AllAnalyticsCookies.AJS_ANONYMOUS_ID.getKey(), stringifyAnonymosId);\n }\n getAnonymousIdFromStorage(source) {\n const rawStorageAnonidValue = source === LOCAL_STORAGE ? this.store.getItem(AllAnalyticsCookies.AJS_ANONYMOUS_ID.getKey()) : this.cookie.get(AWCCookiesKeys.AJS_ANONYMOUS_ID);\n if (rawStorageAnonidValue) {\n const unsafeValue = {\n type: UNSAFE,\n anonymousId: rawStorageAnonidValue\n };\n try {\n const parsedAnonId = JSON.parse(rawStorageAnonidValue);\n if (parsedAnonId && typeof parsedAnonId === 'string') {\n return {\n type: SAFE,\n anonymousId: parsedAnonId\n };\n }\n return unsafeValue;\n } catch (err) {\n /*\n * Segments new Analytics-next client will store strings as strings without stringifing.\n * The legacy Segment client and AWC always stringify and parse cookies and values.\n * If the new Segment analytics-client stores a cookie and local storage value first, it will\n * breaking old clients.\n *\n * Additionally, JSON.parse can cause exceptions to be thrown in some browsers; see AAP-324.\n *\n * Intentionally swalling errors here and returning the original value found in storage to avoid ping-pong.\n */\n return unsafeValue;\n }\n }\n return {\n type: NOT_FOUND\n };\n }\n getAnonymousIdFromLocalStorageAndUpdateCookieIfStale() {\n const localStorageValue = this.getAnonymousIdFromStorage(LOCAL_STORAGE);\n let shouldUpdateCookie = false;\n if (!this.lastAnonymousIdCookieUpdate || differenceInDays(new Date(), new Date(this.lastAnonymousIdCookieUpdate)) >= ANONYMOUS_ID_COOKIE_STALE_DAYS) {\n shouldUpdateCookie = true;\n }\n switch (localStorageValue.type) {\n case SAFE:\n if (shouldUpdateCookie) {\n this.setAnonymousId(localStorageValue.anonymousId);\n }\n return localStorageValue.anonymousId;\n case UNSAFE:\n return localStorageValue.anonymousId;\n case NOT_FOUND:\n default:\n return null;\n }\n }\n getAnonymousIdFromCookieAndUpdateLocalStorage() {\n const cookieValue = this.getAnonymousIdFromStorage(COOKIE);\n switch (cookieValue.type) {\n case SAFE:\n case UNSAFE:\n this.store.setItem(AllAnalyticsCookies.AJS_ANONYMOUS_ID.getKey(), JSON.stringify(cookieValue.anonymousId));\n return cookieValue.anonymousId;\n case NOT_FOUND:\n default:\n return null;\n }\n }\n generateNewAnonymousId(customAnonymousIdGenerator = uuid) {\n const newAnonId = customAnonymousIdGenerator();\n this.setAnonymousId(newAnonId);\n return newAnonId;\n }\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\n// @ts-ignore\nimport traverseISODate from '@segment/isodate-traverse';\nexport const buildContext = context => {\n return _objectSpread(_objectSpread({}, context.context), {}, {\n userAgent: navigator.userAgent\n });\n};\nexport const prepareEventProperties = properties => {\n const propertiesWithoutUndefined = nestedRemoveUndefinedValues(properties);\n return traverseISODate(propertiesWithoutUndefined);\n};\n\n// This function will essentially deepClone as well\nexport const nestedRemoveUndefinedValues = obj => {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n const clone = {};\n Object.keys(obj).forEach(key => {\n const value = getValueOfObject(obj, key);\n if (value !== undefined) {\n if (Array.isArray(value)) {\n clone[key] = value.map(i => nestedRemoveUndefinedValues(i));\n } else if (typeof value === 'object' && value !== null) {\n clone[key] = nestedRemoveUndefinedValues(value);\n } else {\n clone[key] = value;\n }\n }\n });\n return clone;\n};\n\n// Using ts-ignore everywhere urked me\nconst getValueOfObject = (obj, key) => {\n // @ts-ignore This is an object\n return obj[key];\n};","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nimport uuid from 'uuid/v4';\nimport getBatchableQueue from '../resilienceQueue';\nimport getMetricsCollector from '../resilienceQueue/Metrics';\nimport { attachXidToMultipleEvents } from '../xid';\nimport { DEFAULT_REQUEST_TIMEOUT } from './defaults';\nimport { sendEvents } from './sendEvents';\nimport { SegmentEventTypes } from './types';\nimport User from './user';\nimport { buildContext, prepareEventProperties } from './util';\nexport default class EventProcessor {\n constructor(options) {\n var _this$options;\n // Using anonymous function so it can have the BatchFlushCallback type associated with it\n // And to allow it to not need bind when passing through to ResilieceQueue.\n _defineProperty(this, \"sendEvents\", async (items, callback) => {\n const httpRetryCount = this.resilienceQueue.getGlobalRetryCount();\n const metricsPayload = this.metrics.getMetricsPayload();\n const metadata = _objectSpread(_objectSpread({}, metricsPayload), {}, {\n httpRetryCount\n });\n for (let key in metadata) {\n // @ts-ignore Some keys maybe a string, but these will never equal 0\n if (metadata[key] === 0) {\n // @ts-ignore Save space in requests by removing metrics with no impact\n delete metadata[key];\n }\n }\n const eventsWithXID = await this.attachXIDs(items);\n\n // Calculating sentAt after the XID generation as this may take some time.\n const sentAt = new Date().toISOString();\n const unpackagedEvents = eventsWithXID.map(item => {\n item.msg.sentAt = sentAt;\n return item.msg;\n });\n const batchBody = {\n batch: unpackagedEvents,\n sentAt,\n metadata\n };\n try {\n const response = await sendEvents({\n url: this.gasv3BatchUrl,\n batch: batchBody,\n timeout: this.options.requestTimeout\n });\n this.metrics.subtractFromMetrics(metricsPayload);\n callback(null, response);\n } catch (error) {\n callback(error, null);\n }\n });\n this.options = _objectSpread(_objectSpread({}, options), {}, {\n requestTimeout: options.requestTimeout || DEFAULT_REQUEST_TIMEOUT,\n retryQueueOptions: options.retryQueueOptions || {},\n logger: options.logger || console,\n disableCookiePersistence: options.disableCookiePersistence || false\n });\n this.user = new User((_this$options = this.options) === null || _this$options === void 0 ? void 0 : _this$options.disableCookiePersistence);\n this.xidPromiseCallback = options.xidPromiseGetter();\n this.gasv3BatchUrl = `${options.apiHostProtocol}://${options.apiHost}/batch`;\n this.metrics = getMetricsCollector();\n this.resilienceQueue = getBatchableQueue(options.retryQueuePrefix, options.product, this.options.retryQueueOptions, this.options.logger);\n this.resilienceQueue.start(this.sendEvents);\n }\n getUser() {\n return this.user;\n }\n async track(eventName, builtEvent, context, callback) {\n const baseEvent = this.buildBaseEvent(context, SegmentEventTypes.TRACK, builtEvent);\n const eventWithoutMessageId = _objectSpread(_objectSpread({}, baseEvent), {}, {\n type: SegmentEventTypes.TRACK,\n properties: prepareEventProperties(builtEvent),\n event: eventName\n });\n const event = _objectSpread(_objectSpread({}, eventWithoutMessageId), {}, {\n messageId: this.createMessageId()\n });\n const packagedEvent = this.packageEvent(event);\n await this.resilienceQueue.addItem(packagedEvent);\n if (callback) {\n callback();\n }\n }\n async page(eventName, builtEvent, context, callback) {\n const baseEvent = this.buildBaseEvent(context, SegmentEventTypes.PAGE, builtEvent);\n const eventWithoutMessageId = _objectSpread(_objectSpread({}, baseEvent), {}, {\n type: SegmentEventTypes.PAGE,\n properties: prepareEventProperties(builtEvent),\n name: eventName\n });\n const event = _objectSpread(_objectSpread({}, eventWithoutMessageId), {}, {\n messageId: this.createMessageId()\n });\n const packagedEvent = this.packageEvent(event);\n await this.resilienceQueue.addItem(packagedEvent);\n if (callback) {\n callback();\n }\n }\n\n // Segment uses the identifier to update user id which we have already done in the analyticsWebClient.ts\n async identify(_identifier, builtEvent, context, callback) {\n const baseEvent = this.buildBaseEvent(context, SegmentEventTypes.IDENTIFY, builtEvent);\n const eventWithoutMessageId = _objectSpread(_objectSpread({}, baseEvent), {}, {\n type: SegmentEventTypes.IDENTIFY,\n traits: prepareEventProperties(builtEvent)\n });\n const event = _objectSpread(_objectSpread({}, eventWithoutMessageId), {}, {\n messageId: this.createMessageId()\n });\n const packagedEvent = this.packageEvent(event);\n await this.resilienceQueue.addItem(packagedEvent);\n if (callback) {\n callback();\n }\n }\n buildBaseEvent(context, type, overrides) {\n const clonedContext = prepareEventProperties(context);\n const segmentContext = buildContext(clonedContext);\n return {\n context: segmentContext,\n timestamp: new Date().toISOString(),\n type,\n userId: this.user.getUserId(),\n anonymousId: overrides.anonymousId || this.user.getAnonymousId()\n };\n }\n createMessageId() {\n return `ajs-${uuid()}`;\n }\n packageEvent(event) {\n const {\n apiHost,\n apiHostProtocol\n } = this.options;\n return {\n headers: {\n 'Content-Type': 'text/plain'\n },\n msg: event,\n url: `${apiHostProtocol}://${apiHost}/${event.type.charAt(0)}`\n };\n }\n async attachXIDs(items) {\n if (this.xidPromiseCallback) {\n return attachXidToMultipleEvents(items, this.xidPromiseCallback);\n }\n return Promise.resolve(items);\n }\n}","export const DEFAULT_REQUEST_TIMEOUT = 10 * 1000; // 10 seconds","import PullBatchableQueue from './PullBatchableQueue';\nimport { ResilienceMechanism } from './types';\n// Enum isnt just a type, its also an object that needs to be\n// exported as an object.\nexport { ResilienceMechanism };\nexport default ((retryQueuePrefix, product, options, logger) => {\n return new PullBatchableQueue(retryQueuePrefix, product, options || {}, logger);\n});","import { parseUrl, stringify } from 'query-string';\nimport { omitBy, pickBy } from './objectUtils';\nexport const defaultHistoryReplaceFn = newUrl => window.history.replaceState({}, '', newUrl);\nconst urlParamExtractor = (isCaptureParam, historyReplaceFn = defaultHistoryReplaceFn) => {\n // Extract target parameters and values from URL if present\n const originalUrl = window.location.href;\n const fragmentHash = window.location.hash;\n const removedFragmentURL = fragmentHash !== '' ? originalUrl.replace(fragmentHash, '') : originalUrl;\n const {\n url,\n query\n } = parseUrl(removedFragmentURL);\n const captureParams = pickBy(query, isCaptureParam);\n\n // Do not modify URL if no matches\n if (Object.keys(captureParams).length > 0) {\n const queryWithoutCaptureParams = omitBy(query, isCaptureParam);\n\n // Replace the URL minus captured parameters\n if (Object.keys(queryWithoutCaptureParams).length > 0) {\n const newUrl = `${url}?${stringify(queryWithoutCaptureParams)}${fragmentHash}`;\n historyReplaceFn(newUrl);\n } else {\n historyReplaceFn(`${url}${fragmentHash}`);\n }\n }\n return captureParams;\n};\nexport default urlParamExtractor;","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { originTracingType } from './analyticsWebTypes';\nimport urlParamExtractor from './urlUtils';\nexport default class OriginTracing {\n constructor() {\n _defineProperty(this, \"handleOriginParameters\", (originParamHandlerMapping, historyReplaceFn) => {\n // Collect all the parameter labels to be handled\n const originParamLabelList = Object.keys(originParamHandlerMapping);\n if (!(originParamLabelList.length > 0)) {\n throw new Error('Empty parameter mapping provided');\n }\n\n // Check if the parameter labels are valid. If any invalid labels are found throw an exception.\n const invalidParams = originParamLabelList.filter(x => Object.values(originTracingType).indexOf(x) < 0);\n if (invalidParams.length > 0) {\n throw new Error(`Invalid Origin Tracing Parameter(s) supplied: ${invalidParams.join()}!`);\n }\n const isCaptureParam = (_, key) => originParamLabelList.indexOf(key) >= 0;\n // Capture and remove params from URL\n const capturedURLParams = urlParamExtractor(isCaptureParam, historyReplaceFn);\n // Apply provided handler function to extract origin trace ID from each URL parameter\n const applyHandlerFunction = key => {\n const x = originParamHandlerMapping[key](capturedURLParams[key]);\n return {\n [key]: x\n };\n };\n const extractedOriginID = Object.keys(capturedURLParams).map(applyHandlerFunction).reduce((accumulator, currentValue) => Object.assign(accumulator, currentValue), {});\n return extractedOriginID;\n });\n this._originStore = {};\n }\n}","import { envOverrides, envType, perimeterType } from './analyticsWebTypes';\nconst PROD_HOST = 'as.atlassian.com/api/v1';\nconst STARGATE_PROD_HOST = 'api-private.atlassian.com/gasv3/api/v1';\nconst STAGING_HOST = 'as.staging.atl-paas.net/api/v1';\nconst STARGATE_STAGING_HOST = 'api-private.stg.atlassian.com/gasv3/api/v1';\nconst FEDRAMP_SANDBOX_HOST = 'as.atlassian-fex.com/api/v1';\nconst FEDRAMP_STAGING_HOST = 'as.staging.atl-paas-us-gov-mod.net/api/v1';\nconst FEDRAMP_PROD_HOST = 'as.atlassian-us-gov-mod.com/api/v1';\nconst STARGATE_FEDRAMP_STAGING_HOST = 'api.stg.atlassian-us-gov-mod.com/gasv3/api/v1';\nconst STARGATE_FEDRAMP_PROD_HOST = 'api.atlassian-us-gov-mod.com/gasv3/api/v1';\nconst STARGATE_FEDRAMP_SANDBOX_HOST = 'api-private.atlassian-fex.com/gasv3/api/v1';\nconst STARGATE_PROXY_PATH = '/gateway/api/gasv3/api/v1';\nconst handleFedRampStagingSandboxDirect = envOverride => {\n if (envOverride && envOverride === envOverrides.FEDRAMP_MODERATE_SANDBOX) {\n return FEDRAMP_SANDBOX_HOST;\n }\n return FEDRAMP_STAGING_HOST;\n};\nconst handleFedRampStagingSandboxStargate = envOverride => {\n if (envOverride && envOverride === envOverrides.FEDRAMP_MODERATE_SANDBOX) {\n return STARGATE_FEDRAMP_SANDBOX_HOST;\n }\n return STARGATE_FEDRAMP_STAGING_HOST;\n};\nconst handleFedRampModerate = ({\n useStargate,\n env,\n useLegacyUrl,\n envOverride\n}) => {\n if (env === envType.LOCAL || env === envType.DEV) {\n throw Error('No LOCAL or DEV environments for FedRAMP.');\n }\n if (env === envType.PROD && envOverride) {\n throw Error('Cannot override to FedRAMP Sandbox for Prod.');\n }\n if (!useStargate) {\n return env === envType.PROD ? FEDRAMP_PROD_HOST : handleFedRampStagingSandboxDirect(envOverride);\n }\n if (useLegacyUrl) {\n return env === envType.PROD ? STARGATE_FEDRAMP_PROD_HOST : handleFedRampStagingSandboxStargate(envOverride);\n }\n\n /**\n * Stargate proxy path now needs to be the default to work around browser restrictions with cookies.\n * For more details, see:\n * - https://experimentation-platform.atlassian.net/browse/MHD-326, and\n * - https://hello.atlassian.net/wiki/spaces/I/pages/1217206437/api-private+is+broken+is+your+product+impacted\n */\n return window.location.host + STARGATE_PROXY_PATH;\n};\nconst handleCommercial = ({\n useStargate,\n env,\n useLegacyUrl\n}) => {\n if (!useStargate) {\n return env === envType.PROD ? PROD_HOST : STAGING_HOST;\n }\n if (useLegacyUrl) {\n return env === envType.PROD ? STARGATE_PROD_HOST : STARGATE_STAGING_HOST;\n }\n\n /**\n * Stargate proxy path now needs to be the default to work around browser restrictions with cookies.\n * For more details, see:\n * - https://experimentation-platform.atlassian.net/browse/MHD-326, and\n * - https://hello.atlassian.net/wiki/spaces/I/pages/1217206437/api-private+is+broken+is+your+product+impacted\n */\n return window.location.host + STARGATE_PROXY_PATH;\n};\nexport function selectHost({\n useStargate,\n env,\n useLegacyUrl,\n perimeter,\n envOverride\n}) {\n if (perimeter === perimeterType.FEDRAMP_MODERATE) {\n return handleFedRampModerate({\n useStargate,\n env,\n useLegacyUrl,\n envOverride\n });\n }\n return handleCommercial({\n useStargate,\n env,\n useLegacyUrl\n });\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport SafeLocalStorage from './storage/SafeLocalStorage';\nconst SESSION_ID_STORAGE_KEY = 'session.id';\nconst SESSION_EXPIRY_STORAGE_KEY = 'session.expiry';\nconst ONLY_NUMBERS_REGEX = /^\\d+$/;\nexport const DEFAULT_SESSION_EXPIRY_TIME_MS = 30 * 60 * 1000; // 30 minutes\nexport const DEFAULT_EXPIRY_DEBOUNCE = 5 * 1000; // 5 seconds\nexport const DEFAULT_DEBOUNCE_THRESHOLD_PERCENTAGE = 0.9; // 90% of expiry\nexport const NOOP = () => {};\nexport default class SessionTracking {\n constructor(options = {}) {\n _defineProperty(this, \"_generateNewSessionId\", () => {\n const newSessionId = Date.now().toString();\n this._safeLocalStorage.setItem(SESSION_ID_STORAGE_KEY, newSessionId);\n\n // COMMENTS-123 - When a new session starts, call the callback if it is given\n this._onNewSessionStarted && this._onNewSessionStarted();\n return newSessionId;\n });\n _defineProperty(this, \"_updateSessionExpiry\", () => {\n const expiry = Date.now() + this._sessionExpiryTime;\n this._safeLocalStorage.setItem(SESSION_EXPIRY_STORAGE_KEY, expiry.toString());\n return expiry;\n });\n _defineProperty(this, \"_debouncedUpdateSessionExpiry\", currentExpiry => {\n const {\n _updateSessionExpiry\n } = this;\n // If the current expiry is out of date by more than 10% of the expiry, update immediately\n if (currentExpiry < Date.now() + this._sessionExpiryDebounceThresholdPercentage * this._sessionExpiryTime) {\n return _updateSessionExpiry();\n } else {\n if (this._sessionExpiryDebounceTimer) {\n clearTimeout(this._sessionExpiryDebounceTimer);\n }\n // @ts-ignore Something wrong with our types... this is legit\n this._sessionExpiryDebounceTimer = setTimeout(() => {\n _updateSessionExpiry();\n }, this._sessionExpiryDebounce);\n }\n });\n this._sessionExpiryTime = options.sessionExpiryTime || DEFAULT_SESSION_EXPIRY_TIME_MS;\n this._sessionExpiryDebounce = options.sessionExpiryDebounce || DEFAULT_EXPIRY_DEBOUNCE;\n this._sessionExpiryDebounceThresholdPercentage = options.sessionExpiryDebounceThresholdPercentage || DEFAULT_DEBOUNCE_THRESHOLD_PERCENTAGE;\n this._onNewSessionStarted = options.onNewSessionStarted ? options.onNewSessionStarted : NOOP;\n this._safeLocalStorage = new SafeLocalStorage();\n }\n getCurrentSessionId() {\n const sessionId = this._safeLocalStorage.getItem(SESSION_ID_STORAGE_KEY);\n const sessionExpiry = parseInt(this._safeLocalStorage.getItem(SESSION_EXPIRY_STORAGE_KEY) || '0', 10) || 0;\n this._debouncedUpdateSessionExpiry(sessionExpiry);\n if (!sessionId || sessionExpiry <= Date.now() || Number.isNaN(sessionExpiry)) {\n return this._generateNewSessionId();\n }\n\n // Old versions of sessionId were UUIDs which caused issues for Amplitude which only accepts\n // integers for this field. In these scenarios we want to regenerate the sessionId as an integer\n if (!ONLY_NUMBERS_REGEX.test(sessionId)) {\n return this._generateNewSessionId();\n }\n return sessionId;\n }\n}","import InMemoryStorage from './InMemoryStorage';\nimport SafeStorage from './SafeStorage';\n// eslint-disable-next-line import/no-anonymous-default-export\nexport default class extends SafeStorage {\n constructor(options) {\n let storageToUse;\n try {\n storageToUse = window.sessionStorage || InMemoryStorage;\n } catch (err) {\n storageToUse = InMemoryStorage;\n }\n super(storageToUse, options);\n }\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport uuidv4 from 'uuid/v4';\nimport SafeSessionStorage from './storage/SafeSessionStorage';\nconst STORAGE_KEY = 'tab.id';\nexport default class TabTracking {\n constructor() {\n _defineProperty(this, \"_generateNewTabId\", () => {\n const newTabId = uuidv4();\n this._safeSessionStorage.setItem(STORAGE_KEY, newTabId);\n return newTabId;\n });\n this._safeSessionStorage = new SafeSessionStorage();\n }\n getCurrentTabId() {\n let tabId = this._safeSessionStorage.getItem(STORAGE_KEY);\n if (!tabId) {\n tabId = this._generateNewTabId();\n }\n return tabId;\n }\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nimport { parseUrl, stringify } from 'query-string';\nimport uuidv4 from 'uuid/v4';\nimport { originTracingType } from './analyticsWebTypes';\nimport { mapKeys, omit, pick } from './objectUtils';\nimport SafeSessionStorage from './storage/SafeSessionStorage';\nimport urlParamExtractor from './urlUtils';\nconst STORAGE_KEY = 'taskSessions';\nconst INIT_KEY = 'taskSessionsInit';\nconst AWC_PARAM_PREFIX = 'awc.';\nconst TASK_SESSION_RELOAD_TIME = 3000;\nexport default class TaskSessionStore {\n constructor() {\n _defineProperty(this, \"_taskSessionsNotRecentlyInitialised\", currentTimestamp => this._safeSessionStorage.getItem(STORAGE_KEY) === null || this._safeSessionStorage.getItem(INIT_KEY) === null || parseInt(this._safeSessionStorage.getItem(INIT_KEY) || '0', 10) < currentTimestamp - TASK_SESSION_RELOAD_TIME);\n _defineProperty(this, \"_removeTaskSessionPrefix\", (_, taskSessionName) => taskSessionName.split(AWC_PARAM_PREFIX)[1]);\n _defineProperty(this, \"_isTaskSessionQueryParam\", (_, taskSessionName) => taskSessionName.startsWith(AWC_PARAM_PREFIX));\n _defineProperty(this, \"getAllTaskSessions\", () => {\n try {\n return JSON.parse(this._safeSessionStorage.getItem(STORAGE_KEY) || '');\n } catch (e) {\n return {};\n }\n });\n _defineProperty(this, \"_writeToSessionStorage\", taskSessions => {\n try {\n this._safeSessionStorage.setItem(STORAGE_KEY, JSON.stringify(taskSessions));\n // eslint-disable-next-line no-empty\n } catch (e) {}\n });\n _defineProperty(this, \"_appendTaskSessions\", newTaskSessions => {\n const currentState = this.getAllTaskSessions();\n const newState = currentState === null ? newTaskSessions : Object.assign(currentState, newTaskSessions);\n this._writeToSessionStorage(newState);\n });\n _defineProperty(this, \"_safelyRemoveKey\", (currentState, taskSessionName) => {\n if (currentState === null) {\n return {};\n }\n delete currentState[taskSessionName];\n return currentState;\n });\n _defineProperty(this, \"createTaskSession\", taskSessionName => {\n const taskSessionId = uuidv4();\n const newTaskSessions = {};\n newTaskSessions[taskSessionName] = taskSessionId;\n this._appendTaskSessions(newTaskSessions);\n return taskSessionId;\n });\n _defineProperty(this, \"createTaskSessionWithProvidedId\", (taskSessionName, taskSessionId) => {\n if (typeof taskSessionId !== 'string') {\n throw new TypeError('invalid taskSessionId, must be string');\n }\n const newTaskSessions = {};\n newTaskSessions[taskSessionName] = taskSessionId;\n this._appendTaskSessions(newTaskSessions);\n });\n _defineProperty(this, \"completeTaskSession\", taskSessionName => {\n const currentState = this.getAllTaskSessions();\n const updatedState = this._safelyRemoveKey(currentState, taskSessionName);\n this._writeToSessionStorage(updatedState);\n });\n _defineProperty(this, \"formatTaskSessionQueryString\", ({\n uri,\n includedTaskSessions\n }) => {\n const {\n url,\n query\n } = parseUrl(uri);\n const currentState = this.getAllTaskSessions();\n\n // Use specified task sessions, otherwise all tasksessions excluding originTracing sessions\n const filteredTaskSessions = includedTaskSessions ? pick(currentState, includedTaskSessions) : omit(currentState, Object.values(originTracingType));\n if (Object.keys(filteredTaskSessions).length === 0) {\n return uri;\n }\n const queryWithTaskSessions = _objectSpread(_objectSpread({}, mapKeys(filteredTaskSessions, (_, taskSessionName) => AWC_PARAM_PREFIX + taskSessionName)), query);\n return `${url}?${stringify(queryWithTaskSessions)}`;\n });\n _defineProperty(this, \"stripQueryParameters\", () => {\n const extractedTaskSessions = mapKeys(urlParamExtractor(this._isTaskSessionQueryParam), this._removeTaskSessionPrefix);\n this._appendTaskSessions(extractedTaskSessions);\n });\n const _currentTimestamp = Date.now();\n this._safeSessionStorage = new SafeSessionStorage();\n // Wrapping all sessionStorage calls in try catch to stop any error propogation, taskSessions should gracefully fail.\n try {\n if (this._taskSessionsNotRecentlyInitialised(_currentTimestamp)) {\n this._writeToSessionStorage({});\n this._safeSessionStorage.setItem(INIT_KEY, _currentTimestamp.toString());\n }\n // eslint-disable-next-line no-empty\n } catch (e) {}\n }\n}","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport Cookie from 'js-cookie';\nimport { AllAnalyticsCookies } from './cookie';\nconst MAX_CACHE_SIZE = 100;\nconst COOKIE_NAME = AllAnalyticsCookies.AWC_ANALYTICS_DEBUG.getKey();\nconst DEBUG_TAG = 'synthetic';\nconst getDebugCookie = () => {\n try {\n return JSON.parse(Cookie.get(COOKIE_NAME) || 'false');\n } catch (error) {\n Cookie.remove(COOKIE_NAME);\n }\n return false;\n};\nclass TestingCache {\n constructor() {\n _defineProperty(this, \"_bind\", () => {\n if (typeof window === 'undefined' || window.testAnalytics) {\n return;\n }\n window.testAnalytics = {\n eventCache: [],\n events: () => window.testAnalytics.eventCache,\n clear: () => {\n window.testAnalytics.eventCache = [];\n try {\n localStorage.removeItem('awc.ui.viewed.last.sent');\n localStorage.removeItem('awc-staging.ui.viewed.last.sent');\n localStorage.removeItem('awc-dev.ui.viewed.last.sent');\n localStorage.removeItem('awc-local.ui.viewed.last.sent');\n } catch (_error) {\n // Ignore errors from localStorage.\n }\n }\n };\n });\n _defineProperty(this, \"_cache\", event => {\n if (typeof window === 'undefined') {\n return;\n }\n if (window.testAnalytics.eventCache.length >= MAX_CACHE_SIZE) {\n window.testAnalytics.eventCache = window.testAnalytics.eventCache.slice(1, window.testAnalytics.eventCache.length);\n }\n window.testAnalytics.eventCache.push(event);\n });\n _defineProperty(this, \"_shouldCacheEvent\", () => this._isDebugCookieEnabled);\n _defineProperty(this, \"saveEvent\", event => {\n if (event && this._shouldCacheEvent()) {\n if (!window.testAnalytics) {\n this._bind();\n }\n if (event.tags instanceof Array) {\n event.tags.push(DEBUG_TAG);\n } else {\n event.tags = [DEBUG_TAG];\n }\n this._cache(event);\n }\n });\n this._isDebugCookieEnabled = getDebugCookie();\n if (this._isDebugCookieEnabled) {\n this._bind();\n }\n }\n}\nexport default TestingCache;","import _objectWithoutProperties from \"@babel/runtime/helpers/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nconst _excluded = [\"embeddedProduct\"];\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nimport { tenantType } from './analyticsWebTypes';\nimport SafeLocalStorage from './storage/SafeLocalStorage';\nconst DEFAULT_DELAY = 1000 * 2; // 2 seconds\nconst DEFAULT_THROTTLE = 1000 * 60 * 60; // 1 hour\nconst DEFAULT_STORAGE_KEY = 'ui.viewed.last.sent';\nexport default class UIViewedEvent {\n constructor(productInfo, getContext, onEvent, settings = {}) {\n _defineProperty(this, \"start\", () => {\n this._startInterval();\n this._bindEventListeners();\n });\n _defineProperty(this, \"stop\", () => {\n this._stopInterval();\n this._unbindEventListeners();\n });\n _defineProperty(this, \"resetTimers\", () => {\n if (this._intervalId) {\n this.stop();\n this.start();\n }\n });\n _defineProperty(this, \"_bindEventListeners\", () => {\n if (typeof window !== 'undefined') {\n window.addEventListener('focus', this._focusListener);\n window.addEventListener('blur', this._blurListener);\n }\n });\n _defineProperty(this, \"_unbindEventListeners\", () => {\n if (typeof window !== 'undefined') {\n window.removeEventListener('focus', this._focusListener);\n window.removeEventListener('blur', this._blurListener);\n }\n });\n _defineProperty(this, \"_startInterval\", () => {\n clearInterval(this._intervalId);\n this._intervalId = setInterval(this._handleInterval, this._delay);\n });\n _defineProperty(this, \"_stopInterval\", () => {\n if (this._intervalId) {\n clearInterval(this._intervalId);\n this._intervalId = null;\n }\n });\n _defineProperty(this, \"_getProductKey\", (product, subproduct) => {\n let productKey = product;\n if (subproduct) {\n productKey += `-${subproduct}`;\n }\n return productKey;\n });\n _defineProperty(this, \"_getLastSentTimestamp\", (productKey, tenantId, userId) => {\n const json = this._parseLocalStorageData() || {};\n const u = json[userId] || {};\n const t = u[tenantId] || {};\n const p = t[productKey] || null;\n return p;\n });\n _defineProperty(this, \"_parseLocalStorageData\", () => {\n const data = this._safeLocalStorage.getItem(this._storageKey);\n try {\n return JSON.parse(data || '');\n } catch (error) {\n this._safeLocalStorage.removeItem(this._storageKey);\n return null;\n }\n });\n _defineProperty(this, \"_setLastSentTimestamp\", (productKey, tenantId, userId) => {\n const json = this._parseLocalStorageData() || {};\n const u = json[userId] || {};\n const t = u[tenantId] || {};\n t[productKey] = Date.now();\n u[tenantId] = t;\n json[userId] = u;\n this._safeLocalStorage.setItem(this._storageKey, JSON.stringify(json));\n });\n _defineProperty(this, \"_shouldSendEvent\", (productKey, tenantIdType, tenantId, userId) => {\n if (!document.hasFocus()) {\n return false;\n }\n if (tenantIdType !== tenantType.NONE && !tenantId || !userId) {\n return false;\n }\n const sinceLastSent = Date.now() - this._getLastSentTimestamp(productKey, tenantId, userId);\n return sinceLastSent > this._throttle;\n });\n _defineProperty(this, \"_handleInterval\", () => {\n const _this$_getContext = this._getContext(),\n {\n embeddedProduct\n } = _this$_getContext,\n context = _objectWithoutProperties(_this$_getContext, _excluded);\n this._sendEvent(this._product, context);\n if (embeddedProduct) {\n this._sendEvent(embeddedProduct, context, true);\n }\n });\n _defineProperty(this, \"_sendEvent\", (product, context, isEmbeddedProduct = false) => {\n const {\n subproduct,\n tenantIdType,\n tenantId,\n userId,\n lastScreenEvent,\n attributes\n } = context;\n const productKey = this._getProductKey(product, subproduct);\n if (this._shouldSendEvent(productKey, tenantIdType, tenantId, userId)) {\n this._setLastSentTimestamp(productKey, tenantId, userId);\n const event = this._createEvent(product, subproduct, isEmbeddedProduct, lastScreenEvent, attributes);\n this._onEvent(event);\n }\n });\n _defineProperty(this, \"_createEvent\", (product, subproduct, isEmbeddedProduct, lastScreenEvent, extraAttributes) => {\n const event = {\n product,\n source: 'ui',\n action: 'viewed',\n actionSubject: 'ui',\n attributes: extraAttributes\n };\n if (isEmbeddedProduct) {\n // Clear the subproduct and version as they don't relate to the embedded product\n event.subproduct = null;\n event.version = null;\n event.attributes = _objectSpread(_objectSpread({}, event.attributes), {}, {\n embeddedInEnv: this._productInfo.env,\n embeddedInProduct: this._productInfo.product,\n embeddedInSubproduct: subproduct,\n embeddedInVersion: this._productInfo.version,\n embeddedInOrigin: this._productInfo.origin,\n embeddedInPlatform: this._productInfo.platform\n });\n }\n if (lastScreenEvent) {\n event.attributes = _objectSpread(_objectSpread({}, event.attributes), {}, {\n lastScreenEvent: {\n name: lastScreenEvent.name,\n attributes: lastScreenEvent.attributes\n }\n });\n }\n return event;\n });\n if (!productInfo) {\n throw new Error('Missing productInfo');\n }\n if (!productInfo.product) {\n throw new Error('Missing productInfo.product');\n }\n if (!getContext) {\n throw new Error('Missing getContext callback');\n }\n if (typeof getContext !== 'function') {\n throw new Error('Invalid getContext, must be function');\n }\n if (!onEvent) {\n throw new Error('Missing onEvent callback');\n }\n if (typeof onEvent !== 'function') {\n throw new Error('Invalid onEvent, must be function');\n }\n this._productInfo = productInfo;\n this._product = productInfo.product;\n this._getContext = getContext;\n this._onEvent = onEvent;\n this._delay = settings.delay || DEFAULT_DELAY;\n this._throttle = settings.throttle || DEFAULT_THROTTLE;\n this._storageKey = settings.storageKey || DEFAULT_STORAGE_KEY;\n this._safeLocalStorage = new SafeLocalStorage({\n envPrefix: this._productInfo.env\n });\n this._focusListener = () => {\n this._startInterval();\n };\n this._blurListener = () => {\n this._stopInterval();\n };\n }\n}","export default function wrapCallback(callback, event) {\n if (!callback || typeof callback !== 'function') {\n return null;\n }\n return () => {\n callback(event);\n };\n}","export let XIDItemType = /*#__PURE__*/function (XIDItemType) {\n XIDItemType[\"XC\"] = \"xc\";\n XIDItemType[\"UID\"] = \"uid\";\n return XIDItemType;\n}({});\nexport let XIDState = /*#__PURE__*/function (XIDState) {\n XIDState[\"NEW\"] = \"NEW\";\n XIDState[\"CHANGED\"] = \"CHANGED\";\n XIDState[\"EXISTING\"] = \"EXISTING\";\n XIDState[\"TIMEOUT\"] = \"TIMEOUT\";\n XIDState[\"ERROR\"] = \"ERROR\";\n XIDState[\"UNAVAILABLE\"] = \"UNAVAILABLE\";\n XIDState[\"MALFORMED\"] = \"MALFORMED\";\n XIDState[\"UNKNOWN\"] = \"UNKNOWN\";\n return XIDState;\n}({});","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nimport uuid from 'uuid/v4';\nimport { aliasType, envType, eventType, groupType, isType, objectValues, originType, perimeterType, platformType, tenantType } from './analyticsWebTypes';\nimport ApdexEvent from './apdexEvent';\nimport createGetter from './createGetter';\nimport { buildActionEvent, buildActionName, buildContext, buildScreenEvent } from './eventBuilder';\nimport EventDelayQueue from './eventDelay';\nimport { validateContainers, validateIdentifyEvent, validateOperationalEvent, validatePlatform, validateScreenEvent, validateTrackEvent, validateUIEvent } from './eventValidation';\nimport EventProcessor from './integration';\nimport OriginTracing from './originTracing';\nimport PageVisibility from './pageVisibility';\nimport { selectHost } from './selectHost';\nimport SessionTracking from './sessionTracking';\nimport SafeSessionStorage from './storage/SafeSessionStorage';\nimport TabTracking from './tabTracking';\nimport TaskSessionStore from './taskSessionStore';\nimport TestingCache from './testingCache';\nimport UIViewedEvent from './uiViewedEvent';\nimport { defaultHistoryReplaceFn } from './urlUtils';\nimport wrapCallback from './wrapCallback';\nimport { XIDPromise } from './xid';\nexport const STARGATE_PROXY_PATH = '/gateway/api/gasv3/api/v1';\nconst LAST_SCREEN_EVENT_STORAGE_KEY = 'last.screen.event';\nexport default class AnalyticsWebClient {\n constructor(productInfo, settings = {}) {\n _defineProperty(this, \"_useStargate\", useStargate => {\n if (useStargate == null) {\n return true;\n }\n return useStargate;\n });\n _defineProperty(this, \"_endsWith\", (str, suffix) => str.indexOf(suffix, str.length - suffix.length) !== -1);\n _defineProperty(this, \"_changeInternalUserId\", (userId, anonymousId) => {\n this.eventProcessor.getUser().setUserId(userId);\n if (anonymousId && anonymousId !== this.eventProcessor.getUser().getAnonymousId()) {\n // Setting anonymous id can take a long time. Reading is a lot faster.\n // Only update if it has changed.\n this.eventProcessor.getUser().setAnonymousId(anonymousId);\n }\n });\n _defineProperty(this, \"_createSubproductGetter\", subproduct => createGetter(subproduct, 'Cannot get subproduct from the callback. Proceeding without it.'));\n _defineProperty(this, \"_createEmbeddedProductGetter\", embeddedProduct => createGetter(embeddedProduct, 'Cannot get embeddedProduct from the callback. Proceeding without it.'));\n _defineProperty(this, \"_getLastScreenEvent\", () => {\n try {\n return JSON.parse(this._safeSessionStorage.getItem(LAST_SCREEN_EVENT_STORAGE_KEY) || '');\n } catch (err) {\n this._safeSessionStorage.removeItem(LAST_SCREEN_EVENT_STORAGE_KEY);\n return null;\n }\n });\n _defineProperty(this, \"_setLastScreenEvent\", event => {\n this._safeSessionStorage.setItem(LAST_SCREEN_EVENT_STORAGE_KEY, JSON.stringify({\n name: event.name,\n attributes: event.attributes\n }));\n });\n _defineProperty(this, \"_shouldEventBeDelayed\", event => {\n // TODO: this is a temporary restriction for the purposes of the Track All Changes project\n // The delay mechanism has a chance of event loss, which we can only accept for our own data at this point.\n // Once the delay queue implementation has been improved and measured to confirm that it is reliable enough,\n // then we will be able to open it up for other products to use by removing this check.\n if (!event.tags || event.tags.indexOf('measurement') === -1) {\n return false;\n }\n const isEventHighPriority = event.highPriority !== false; // defaults to true if excluded\n return this.eventDelayQueue.isDelayingLowPriorityEvents() && !isEventHighPriority;\n });\n _defineProperty(this, \"_fireEvent\", (identifier, builtEvent, context, callback) => {\n switch (builtEvent.eventType) {\n case eventType.UI:\n case eventType.OPERATIONAL:\n case eventType.TRACK:\n return this.eventProcessor.track(identifier, builtEvent, context, callback);\n case eventType.SCREEN:\n return this.eventProcessor.page(identifier, builtEvent, context, callback);\n case eventType.IDENTIFY:\n return this.eventProcessor.identify(identifier, builtEvent, context, callback);\n default:\n throw new Error(`No handler has been defined for events of type ${builtEvent.eventType}`);\n }\n });\n _defineProperty(this, \"_fireDelayedEvent\", (identifier, builtEvent, context, userInfo) => {\n try {\n // User information can change while the delay period is active, so we need to restore the values that\n // were active when the event was originally fired.\n this._changeInternalUserId(userInfo.userId, userInfo.anonymousId);\n builtEvent.tags = [...(builtEvent.tags || []), 'sentWithDelay'];\n\n // The callbacks for delayed events are fired immediately, so there is nothing to pass through for this argument.\n this._fireEvent(identifier, builtEvent, context, undefined);\n } finally {\n this._changeInternalUserId(this._userInfo.userId, this._userInfo.anonymousId);\n }\n });\n _defineProperty(this, \"_delayEvent\", (identifier, builtEvent, context, userInfo, callback) => {\n this.eventDelayQueue.push(identifier, builtEvent, context, userInfo);\n // Fire the callback immediately, as we can consider the event successfully processed at this point\n if (callback) {\n callback();\n }\n });\n _defineProperty(this, \"_processEvent\", (identifier, builtEvent, context, callback) => {\n this._testingCache.saveEvent(builtEvent);\n if (this._shouldEventBeDelayed(builtEvent)) {\n this._delayEvent(identifier, builtEvent, context, this._userInfo, callback);\n return Promise.resolve();\n } else {\n return this._fireEvent(identifier, builtEvent, context, callback);\n }\n });\n _defineProperty(this, \"setEmbeddedProduct\", embeddedProduct => {\n this._productInfo.embeddedProduct = this._createEmbeddedProductGetter(embeddedProduct);\n this.resetUIViewedTimers();\n });\n _defineProperty(this, \"clearEmbeddedProduct\", () => {\n this._productInfo.embeddedProduct = this._createEmbeddedProductGetter(null);\n });\n _defineProperty(this, \"setSubproduct\", subproduct => {\n this._productInfo.subproduct = this._createSubproductGetter(subproduct);\n this.resetUIViewedTimers();\n });\n /**\n * Calling this function in the intialisation of the client in product\n * captures specified 'origin tracing' URL params and fires a single origin landed event\n *

\n * This function expects a mapping between the keys for any URL parameters\n * that should be captured and removed for origin tracing\n * Multiple parameters may be captured simultaneously if multiple key: handler function pairs are provided\n * Each handler function should return an object with two items\n * a) 'originTracingAttributes' - an object that will be added to the 'origin landed' event's attributes under 'originTracing\n * b) 'taskSessionId' (optional) - an Id string that will be added to the tasksessions for any event that fires from the tab, with the key\n * matching the URL parameter, for the purpose of attributing subsequent analytics event to the origin land.\n *

\n * The general use case for this feature is for allowing attributation of user behaviour to a out of product or cross product link,\n * e.g. from a share or email\n *\n * An example calling this function using an external decoding library, with taskSessionId specified to persist\n * analyticsWebClient.setOriginTracingHandlers({\n atlOrigin: encodedOrigin => {\n const { id, product } = OriginTracing.fromEncoded(encodedOrigin);\n return { originTracingAttributes: {'id': id, 'product': product}, taskSessionId: id };\n },\n });\n *\n * @param {Object} originParamHandlerMapping a dictionary of mappings between origin url param keys and handler functions\n * @this {AnalyticsWebClient}\n */\n _defineProperty(this, \"setOriginTracingHandlers\", originParamHandlerMapping => {\n const capturedOriginTraces = this.originTracing.handleOriginParameters(originParamHandlerMapping, this._historyReplaceFn);\n Object.keys(capturedOriginTraces).forEach(x => {\n if (typeof capturedOriginTraces[x].taskSessionId !== 'undefined') {\n this.task.createTaskSessionWithProvidedId(x, capturedOriginTraces[x].taskSessionId);\n }\n });\n const originAttributes = {};\n Object.keys(capturedOriginTraces).forEach(x => {\n if (capturedOriginTraces[x].originTracingAttributes) {\n originAttributes[x] = capturedOriginTraces[x].originTracingAttributes;\n } else {\n // eslint-disable-next-line no-console\n console.warn(`Handling method for origin parameter ${x} has not returned any attributes`);\n }\n });\n if (Object.keys(capturedOriginTraces).length > 0) {\n return this.sendOperationalEvent({\n action: 'landed',\n actionSubject: 'origin',\n source: 'webClient',\n attributes: {\n originTracesLanded: originAttributes\n }\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n () => {});\n }\n return Promise.resolve();\n });\n _defineProperty(this, \"setTenantInfo\", (tenantIdType, tenantId) => {\n if (!tenantIdType) {\n throw new Error('Missing tenantIdType');\n }\n if (tenantIdType !== tenantType.NONE && !tenantId) {\n throw new Error('Missing tenantId');\n }\n if (!isType(tenantType, tenantIdType)) {\n throw new Error(`Invalid tenantIdType '${tenantIdType}', ` + `must be an tenantType: [${objectValues(tenantType)}]`);\n }\n this._tenantInfo = {\n tenantIdType,\n tenantId\n };\n });\n _defineProperty(this, \"clearTenantInfo\", () => {\n this._tenantInfo = {};\n });\n _defineProperty(this, \"setOrgInfo\", orgId => {\n if (!orgId) {\n throw new Error('Missing orgId');\n }\n this._orgInfo = {\n orgId\n };\n });\n _defineProperty(this, \"clearOrgInfo\", () => {\n this._orgInfo = {};\n });\n _defineProperty(this, \"setWorkspaceInfo\", workspaceId => {\n if (!workspaceId) {\n throw new Error('Missing workspaceId');\n }\n this._workspaceInfo = {\n workspaceId\n };\n });\n _defineProperty(this, \"clearWorkspaceInfo\", () => {\n this._workspaceInfo = {};\n });\n _defineProperty(this, \"setUserInfo\", (userIdType, userId) => {\n validateIdentifyEvent(userIdType, userId);\n this._changeInternalUserId(userId);\n this._userInfo = {\n userIdType: userIdType,\n userId,\n anonymousId: this.eventProcessor.getUser().getAnonymousId()\n };\n });\n _defineProperty(this, \"clearUserInfo\", () => {\n this._changeInternalUserId(undefined);\n this._userInfo = {\n anonymousId: this.eventProcessor.getUser().getAnonymousId()\n };\n });\n _defineProperty(this, \"setAlias\", (aliasKeyType, alias) => {\n if (!aliasKeyType) {\n throw new Error('Missing aliasType');\n }\n if (!isType(aliasType, aliasKeyType)) {\n throw new Error(`Invalid aliasType '${aliasKeyType}', ` + `must be an aliasType: [${objectValues(aliasType)}]`);\n }\n this._aliases[aliasKeyType] = alias;\n });\n _defineProperty(this, \"clearAlias\", () => {\n this._aliases = {};\n });\n _defineProperty(this, \"setGroup\", (groupsKeyType, group) => {\n if (!groupsKeyType) {\n throw new Error('Missing groupType');\n }\n if (!isType(groupType, groupsKeyType)) {\n throw new Error(`Invalid groupType '${groupsKeyType}', ` + `must be an groupType: [${objectValues(groupType)}]`);\n }\n this._groups[groupsKeyType] = group;\n });\n _defineProperty(this, \"clearGroup\", () => {\n this._groups = {};\n });\n _defineProperty(this, \"getAnonymousId\", () => this._userInfo.anonymousId);\n _defineProperty(this, \"setUIViewedAttributes\", uiViewedAttributes => {\n if (!uiViewedAttributes) {\n throw new Error('Missing uiViewedAttributes');\n }\n if (typeof uiViewedAttributes !== 'object' || Array.isArray(uiViewedAttributes)) {\n throw new Error('Invalid uiViewedAttributes type, should be a non array object');\n }\n this._uiViewedAttributes = _objectSpread({}, uiViewedAttributes);\n });\n _defineProperty(this, \"getUIViewedAttributes\", () => {\n return this._uiViewedAttributes;\n });\n _defineProperty(this, \"clearUIViewedAttributes\", () => {\n this._uiViewedAttributes = {};\n });\n _defineProperty(this, \"sendIdentifyEvent\", (userIdType, userId, callback) => {\n this.setUserInfo(userIdType, userId);\n const builtEvent = {\n userIdType,\n eventType: eventType.IDENTIFY\n };\n return this._processEvent(userId, builtEvent, this._context, callback);\n });\n /**\n * @deprecated\n * please use {@link sendScreenEvent instead)\n */\n _defineProperty(this, \"sendPageEvent\", (name, callback) => {\n return this.sendScreenEvent(name, callback);\n });\n /**\n * send screen event\n * @param event The event / For retrocompatibility event name is still supported here.\n * @param callback\n * @param attributes. Deprecated, will get ignored if using an event object as first param.\n */\n _defineProperty(this, \"sendScreenEvent\", (event, callback, attributes) => {\n let screenName;\n let screenAttributes;\n let screenContainers;\n let screenTags;\n if (typeof event === 'object') {\n /* This is for retrocompatibility */\n screenName = event.name;\n screenAttributes = event.attributes;\n screenContainers = event.containers;\n screenTags = event.tags;\n } else {\n screenName = event;\n screenAttributes = attributes;\n }\n validateScreenEvent(screenName);\n validateContainers(screenContainers);\n const builtEvent = buildScreenEvent(this._productInfo, this._tenantInfo, this._userInfo, screenAttributes,\n // TODO: Remove the as any and move into a place where we know event is an object\n event.nonPrivacySafeAttributes, screenTags, this._tabTracking.getCurrentTabId(), this._sessionTracking.getCurrentSessionId(), this.task.getAllTaskSessions(), this._orgInfo, this._pageLoadId, this._workspaceInfo, event, screenContainers, this._aliases, this._groups);\n const builtEventWithName = _objectSpread({\n name: screenName\n }, builtEvent);\n this._setLastScreenEvent(builtEventWithName);\n return this._processEvent(screenName, builtEventWithName, this._context, wrapCallback(callback, builtEventWithName));\n });\n _defineProperty(this, \"sendTrackEvent\", (event, callback) => {\n validateTrackEvent(event);\n const builtEvent = buildActionEvent(this._productInfo, this._tenantInfo, this._userInfo, event, eventType.TRACK, this._tabTracking.getCurrentTabId(), this._sessionTracking.getCurrentSessionId(), this.task.getAllTaskSessions(), this._orgInfo, this._pageLoadId, this._workspaceInfo, this._aliases, this._groups);\n return this._processEvent(buildActionName(event), builtEvent, this._context, wrapCallback(callback, builtEvent));\n });\n _defineProperty(this, \"sendUIEvent\", (event, callback) => {\n validateUIEvent(event);\n const builtEvent = buildActionEvent(this._productInfo, this._tenantInfo, this._userInfo, event, eventType.UI, this._tabTracking.getCurrentTabId(), this._sessionTracking.getCurrentSessionId(), this.task.getAllTaskSessions(), this._orgInfo, this._pageLoadId, this._workspaceInfo, this._aliases, this._groups);\n return this._processEvent(buildActionName(event), builtEvent, this._context, wrapCallback(callback, builtEvent));\n });\n _defineProperty(this, \"sendOperationalEvent\", (event, callback) => {\n validateOperationalEvent(event);\n const builtEvent = buildActionEvent(this._productInfo, this._tenantInfo, this._userInfo, event, eventType.OPERATIONAL, this._tabTracking.getCurrentTabId(), this._sessionTracking.getCurrentSessionId(), this.task.getAllTaskSessions(), this._orgInfo, this._pageLoadId, this._workspaceInfo, this._aliases, this._groups);\n return this._processEvent(buildActionName(event), builtEvent, this._context, wrapCallback(callback, builtEvent));\n });\n _defineProperty(this, \"startUIViewedEvent\", callback => {\n this.stopUIViewedEvent();\n this._uiViewedEvent = new UIViewedEvent(this._productInfo, () => ({\n embeddedProduct: this._productInfo.embeddedProduct(),\n subproduct: this._productInfo.subproduct(),\n tenantIdType: this._tenantInfo.tenantIdType,\n tenantId: this._tenantInfo.tenantId,\n userId: this._userInfo.userId,\n lastScreenEvent: this._getLastScreenEvent(),\n attributes: this._uiViewedAttributes\n }), event => this.sendUIEvent(event, callback));\n this._uiViewedEvent.start();\n });\n _defineProperty(this, \"stopUIViewedEvent\", () => {\n if (this._uiViewedEvent) {\n this._uiViewedEvent.stop();\n this._uiViewedEvent = null;\n }\n });\n _defineProperty(this, \"resetUIViewedTimers\", () => {\n if (this._uiViewedEvent) {\n this._uiViewedEvent.resetTimers();\n }\n });\n _defineProperty(this, \"startApdexEvent\", apdexEvent => {\n this._apdexEvent.start(apdexEvent);\n });\n _defineProperty(this, \"getApdexStart\", apdexEvent => this._apdexEvent.getStart(apdexEvent));\n _defineProperty(this, \"stopApdexEvent\", (apdexEvent, callback) => {\n this._apdexEvent.stop(apdexEvent, callback);\n });\n // TODO If we ever make another breaking change, merge these two optional args into an `options` object arg.\n _defineProperty(this, \"startLowPriorityEventDelay\", (timeout, callback) => {\n this.eventDelayQueue.startLowPriorityEventDelay(timeout, callback);\n });\n _defineProperty(this, \"stopLowPriorityEventDelay\", () => {\n this.eventDelayQueue.stopLowPriorityEventDelay();\n });\n _defineProperty(this, \"onEvent\", (_analyticsId, analyticsData) => {\n if (!analyticsData) {\n throw new Error('Missing analyticsData');\n }\n if (!analyticsData.eventType) {\n throw new Error('Missing analyticsData.eventType');\n }\n if (analyticsData.eventType === eventType.TRACK) {\n return this.sendTrackEvent(analyticsData);\n } else if (analyticsData.eventType === eventType.UI) {\n return this.sendUIEvent(analyticsData);\n } else if (analyticsData.eventType === eventType.OPERATIONAL) {\n return this.sendOperationalEvent(analyticsData);\n } else if (analyticsData.eventType === eventType.SCREEN) {\n return this.sendScreenEvent(analyticsData.name, null, analyticsData.attributes);\n } else if (analyticsData.eventType === eventType.IDENTIFY) {\n return this.sendIdentifyEvent(analyticsData.userIdType, analyticsData.userId);\n }\n throw new Error(`Invalid analyticsData.eventType '${analyticsData.eventType}', ` + `must be an eventType: [${objectValues(eventType)}]`);\n });\n if (!productInfo) {\n throw new Error('Missing productInfo');\n }\n if (!productInfo.env) {\n throw new Error('Missing productInfo.env');\n }\n if (!productInfo.product) {\n throw new Error('Missing productInfo.product');\n }\n if (!isType(envType, productInfo.env)) {\n throw new Error(`Invalid productInfo.env '${productInfo.env}', ` + `must be an envType: [${objectValues(envType)}]`);\n }\n if (productInfo.perimeter && !isType(perimeterType, productInfo.perimeter)) {\n throw new Error(`Invalid productInfo.perimeter '${productInfo.perimeter}', ` + `must be an perimeterType: [${objectValues(perimeterType)}]`);\n }\n if (!productInfo.origin) {\n productInfo.origin = originType.WEB;\n } else if (!isType(originType, productInfo.origin)) {\n throw new Error(`Invalid productInfo.origin '${productInfo.origin}', ` + `must be an originType: [${objectValues(originType)}]`);\n }\n if (!productInfo.platform) {\n productInfo.platform = productInfo.origin === originType.WEB ? platformType.WEB : platformType.DESKTOP;\n } else {\n validatePlatform(productInfo);\n }\n this.logger = settings.logger || console;\n this._productInfo = _objectSpread(_objectSpread({}, productInfo), {}, {\n subproduct: this._createSubproductGetter(productInfo.subproduct),\n embeddedProduct: this._createEmbeddedProductGetter(productInfo.embeddedProduct)\n });\n this._tenantInfo = {};\n this._orgInfo = {};\n this._uiViewedAttributes = {};\n this._context = buildContext(this._productInfo);\n this._safeSessionStorage = new SafeSessionStorage();\n const _useStargate = this._useStargate(settings.useStargate);\n const apiHost = settings.apiHost || selectHost({\n useStargate: _useStargate,\n env: productInfo.env,\n useLegacyUrl: settings.useLegacyUrl,\n perimeter: productInfo.perimeter,\n envOverride: productInfo.envOverride\n });\n const apiHostProtocol = settings.apiHostProtocol || 'https';\n const minRetryDelay = settings.minRetryDelay || 1000;\n const retryQueueOptions = {\n maxRetryDelay: 60000,\n minRetryDelay,\n backoffFactor: 2,\n flushWaitMs: settings.flushWaitInterval,\n flushBeforeUnload: settings.flushBeforeUnload\n };\n const retryQueuePrefix = `awc-${productInfo.env}`;\n const xidPromiseGetter = () => XIDPromise(settings.xidConsent, settings.xidPromiseFn);\n const disableCookiePersistence = settings.disableCookiePersistence || false;\n this.eventProcessor = new EventProcessor({\n apiHost,\n apiHostProtocol,\n product: productInfo.product,\n retryQueuePrefix,\n retryQueueOptions,\n xidPromiseGetter,\n logger: this.logger,\n disableCookiePersistence\n });\n this._userInfo = {\n anonymousId: this.eventProcessor.getUser().getAnonymousId(settings === null || settings === void 0 ? void 0 : settings.customAnonymousIdGenerator)\n };\n this._pageVisibility = new PageVisibility();\n this._tabTracking = new TabTracking();\n this._sessionTracking = new SessionTracking({\n sessionExpiryTime: settings.sessionExpiryTime,\n onNewSessionStarted: settings.onNewSessionStarted\n });\n this.task = new TaskSessionStore();\n this.originTracing = new OriginTracing();\n\n // Init Apdex\n this._apdexEvent = new ApdexEvent(this.sendOperationalEvent, this._pageVisibility);\n this._historyReplaceFn = typeof settings.historyReplaceFn === 'function' ? settings.historyReplaceFn : defaultHistoryReplaceFn;\n this.eventDelayQueue = new EventDelayQueue(this._fireDelayedEvent, settings.delayQueueCompressors || []);\n this._testingCache = new TestingCache();\n this._pageLoadId = uuid();\n this._workspaceInfo = {};\n this._aliases = {};\n this._groups = {};\n }\n}","import { createTimeoutXid, createUnknownXid, XID_TIMEOUT } from './constants';\nexport const XIDPromise = (xidConsent, xidPromiseFn) => {\n if (xidConsent && xidPromiseFn && typeof xidPromiseFn === 'function') {\n const timeoutPromise = () => {\n return new Promise(resolve => {\n setTimeout(() => resolve(() => createTimeoutXid()), XID_TIMEOUT);\n });\n };\n const xidPromise = () => {\n return xidPromiseFn().catch(() => () => createUnknownXid());\n };\n return Promise.race([xidPromise(), timeoutPromise()]);\n }\n return undefined;\n};","import { XIDItemType } from './enums';\nexport const XID_TIMEOUT = 5000;\nexport const createTimeoutXid = () => [{\n type: XIDItemType.XC,\n state: 'TIMEOUT'\n}, {\n type: XIDItemType.UID,\n state: 'TIMEOUT'\n}];\nexport const createUnknownXid = () => [{\n type: XIDItemType.XC,\n state: 'UNKNOWN'\n}, {\n type: XIDItemType.UID,\n state: 'UNKNOWN'\n}];","// These types have been converted from frozen objects to enums.\n// We cannot change their name, or even capitalise them without breaking API.\nexport let envType = /*#__PURE__*/function (envType) {\n envType[\"LOCAL\"] = \"local\";\n envType[\"DEV\"] = \"dev\";\n envType[\"STAGING\"] = \"staging\";\n envType[\"PROD\"] = \"prod\";\n return envType;\n}({});\nexport let eventType = /*#__PURE__*/function (eventType) {\n eventType[\"TRACK\"] = \"track\";\n eventType[\"UI\"] = \"ui\";\n eventType[\"OPERATIONAL\"] = \"operational\";\n eventType[\"SCREEN\"] = \"screen\";\n eventType[\"IDENTIFY\"] = \"identify\";\n return eventType;\n}({});\nexport let platformType = /*#__PURE__*/function (platformType) {\n platformType[\"MAC\"] = \"mac\";\n platformType[\"LINUX\"] = \"linux\";\n platformType[\"WINDOWS\"] = \"windows\";\n platformType[\"DESKTOP\"] = \"desktop\";\n platformType[\"WEB\"] = \"web\";\n platformType[\"MOBILE_WEB\"] = \"mobileWeb\";\n return platformType;\n}({});\nexport let originType = /*#__PURE__*/function (originType) {\n originType[\"DESKTOP\"] = \"desktop\";\n originType[\"WEB\"] = \"web\";\n return originType;\n}({});\nexport let tenantType = /*#__PURE__*/function (tenantType) {\n tenantType[\"CLOUD_ID\"] = \"cloudId\";\n tenantType[\"ORG_ID\"] = \"orgId\";\n tenantType[\"OPSGENIE_CUSTOMER_ID\"] = \"opsgenieCustomerId\";\n tenantType[\"HALP_TEAM_ID\"] = \"halpTeamId\";\n tenantType[\"TRANSACTION_ACCOUNT_ID\"] = \"transactionAccountId\";\n tenantType[\"TRELLO_WORKSPACE_ID\"] = \"trelloWorkspaceId\";\n tenantType[\"NONE\"] = \"none\";\n return tenantType;\n}({});\nexport let userType = /*#__PURE__*/function (userType) {\n userType[\"ATLASSIAN_ACCOUNT\"] = \"atlassianAccount\";\n userType[\"HASHED_EMAIL\"] = \"hashedEmail\";\n userType[\"TRELLO\"] = \"trello\";\n userType[\"OPSGENIE\"] = \"opsgenie\";\n userType[\"HALP\"] = \"halp\";\n return userType;\n}({});\nexport let apdexType = /*#__PURE__*/function (apdexType) {\n apdexType[\"TRANSITION\"] = \"transition\";\n apdexType[\"INITIAL_LOAD\"] = \"initialLoad\";\n return apdexType;\n}({});\nexport const desktopPlatforms = Object.freeze([platformType.DESKTOP, platformType.MAC, platformType.LINUX, platformType.WINDOWS]);\nexport const webPlatforms = Object.freeze([platformType.WEB, platformType.MOBILE_WEB]);\nexport let originTracingType = /*#__PURE__*/function (originTracingType) {\n originTracingType[\"ATL_ORIGIN\"] = \"atlOrigin\";\n return originTracingType;\n}({});\nexport function objectValues(object) {\n return Object.values(object);\n}\nexport function isType(type, value) {\n return Object.values(type).indexOf(value) > -1;\n}\nexport let perimeterType = /*#__PURE__*/function (perimeterType) {\n perimeterType[\"C5\"] = \"c5\";\n perimeterType[\"COMMERCIAL\"] = \"commercial\";\n perimeterType[\"FEDRAMP_MODERATE\"] = \"fedramp-moderate\";\n perimeterType[\"FEDRAMP_HIGH\"] = \"fedramp-high\";\n return perimeterType;\n}({});\nexport let aliasType = /*#__PURE__*/function (aliasType) {\n return aliasType;\n}({});\nexport let groupType = /*#__PURE__*/function (groupType) {\n groupType[\"TRANSACTION_ACCOUNT_ID\"] = \"transactionAccountId\";\n return groupType;\n}({});\nexport let envOverrides = /*#__PURE__*/function (envOverrides) {\n envOverrides[\"FEDRAMP_MODERATE_SANDBOX\"] = \"fedramp-moderate-sandbox\";\n return envOverrides;\n}({});","import { desktopPlatforms, eventType, isType, objectValues, originType, platformType, userType, webPlatforms } from './analyticsWebTypes';\nimport { isPlainObject } from './util/object-utils';\nconst actionEventTypes = Object.freeze([eventType.OPERATIONAL, eventType.TRACK, eventType.UI]);\nexport function validateContainersObject(container) {\n if (!isPlainObject(container)) {\n throw new Error('properties.containers must be an Object');\n }\n if (!('id' in container)) {\n throw new Error(\"properties.containers is missing field 'id'\");\n }\n if (typeof container.id !== 'string') {\n throw new Error('properties.containers.id must be of type String');\n }\n if ('type' in container && typeof container.type !== 'string') {\n throw new Error('properties.containers.type must be of type String');\n }\n}\n\n// the validation logic is documented here\n// https://hello.atlassian.net/wiki/spaces/MEASURE/pages/545900273/Validating+containers+object\nexport function validateContainers(containers) {\n if (!containers) {\n return;\n }\n if (containers && containers.constructor !== Object) {\n throw new Error('properties.containers must be an Object');\n }\n Object.values(containers).forEach(container => validateContainersObject(container));\n}\nexport function isActionEventType(type) {\n switch (type) {\n case eventType.OPERATIONAL:\n case eventType.TRACK:\n case eventType.UI:\n return true;\n default:\n return false;\n }\n}\nexport function validateActionEventType(type) {\n if (!isActionEventType(type)) {\n throw new Error(`Invalid action event type: ${type}, must be one of: [${actionEventTypes}]`);\n }\n return true;\n}\nexport function validateActionEvent(event) {\n if (!event) {\n throw new Error('Missing event');\n }\n if (!event.source) {\n throw new Error('Missing event.source');\n }\n if (!event.actionSubject) {\n throw new Error('Missing event.actionSubject');\n }\n if (!event.action) {\n throw new Error('Missing event.action');\n }\n validateContainers(event.containers);\n}\nexport function validateScreenEvent(name) {\n if (!name) {\n throw new Error('Missing name');\n }\n}\nexport function validateTrackEvent(event) {\n validateActionEvent(event);\n}\nexport function validateDwellBaseEvent(event) {\n if (!event) {\n throw new Error('Missing event');\n }\n if (!event.source) {\n throw new Error('Missing event.source');\n }\n if (!event.actionSubject) {\n throw new Error('Missing event.actionSubject');\n }\n}\nexport function validateUIEvent(event) {\n validateActionEvent(event);\n}\nexport function validateOperationalEvent(event) {\n validateActionEvent(event);\n}\nexport function validateIdentifyEvent(userIdType, userId) {\n if (!userIdType) {\n throw new Error('Missing userIdType');\n }\n if (!userId) {\n throw new Error('Missing userId');\n }\n if (!isType(userType, userIdType)) {\n throw new Error(`Invalid userIdType '${userIdType}', ` + `must be an userType: [${objectValues(userType)}]`);\n }\n}\nexport function validatePlatform(productInfo) {\n if (!isType(platformType, productInfo.platform)) {\n throw new Error(`Invalid productInfo.platform '${productInfo.platform}', ` + `must be a platformType: [${objectValues(platformType)}]`);\n }\n if (productInfo.origin === originType.DESKTOP && !isType(desktopPlatforms, productInfo.platform)) {\n throw new Error(`Invalid productInfo.platform '${productInfo.platform}', ` + 'must be one of [mac, linux, windows]');\n }\n if (productInfo.origin === originType.WEB && !isType(webPlatforms, productInfo.platform)) {\n throw new Error(`Invalid productInfo.platform '${productInfo.platform}', must be one of [web, mobileWeb]`);\n }\n}","// Modified from https://github.com/jonschlinkert/is-plain-object/blob/master/index.js\n\nfunction isObject(val) {\n return val !== null && typeof val === 'object' && Array.isArray(val) === false;\n}\nfunction isObjectObject(o) {\n return isObject(o) === true && Object.prototype.toString.call(o) === '[object Object]';\n}\nfunction isPlainObject(o) {\n if (isObjectObject(o) === false) {\n return false;\n }\n\n // If has modified constructor\n const ctor = o.constructor;\n if (typeof ctor !== 'function') {\n return false;\n }\n\n // If has modified prototype\n const prot = ctor.prototype;\n if (isObjectObject(prot) === false) {\n return false;\n }\n\n // If constructor does not have an Object-specific method\n if (!('isPrototypeOf' in prot)) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n}\nexport {\n// eslint-disable-next-line import/prefer-default-export\nisPlainObject };","'use strict';\n\nmodule.exports = (string, separator) => {\n\tif (!(typeof string === 'string' && typeof separator === 'string')) {\n\t\tthrow new TypeError('Expected the arguments to be of type `string`');\n\t}\n\n\tif (separator === '') {\n\t\treturn [string];\n\t}\n\n\tconst separatorIndex = string.indexOf(separator);\n\n\tif (separatorIndex === -1) {\n\t\treturn [string];\n\t}\n\n\treturn [\n\t\tstring.slice(0, separatorIndex),\n\t\tstring.slice(separatorIndex + separator.length)\n\t];\n};\n","'use strict';\nmodule.exports = str => encodeURIComponent(str).replace(/[!'()*]/g, x => `%${x.charCodeAt(0).toString(16).toUpperCase()}`);\n","export let ExperienceTypes = /*#__PURE__*/function (ExperienceTypes) {\n ExperienceTypes[\"Load\"] = \"load\";\n ExperienceTypes[\"Experience\"] = \"experience\";\n ExperienceTypes[\"Operation\"] = \"operation\";\n return ExperienceTypes;\n}({});\nexport let ExperiencePerformanceTypes = /*#__PURE__*/function (ExperiencePerformanceTypes) {\n ExperiencePerformanceTypes[\"PageLoad\"] = \"page-load\";\n ExperiencePerformanceTypes[\"PageSegmentLoad\"] = \"page-segment-load\";\n ExperiencePerformanceTypes[\"InlineResult\"] = \"inline-result\";\n ExperiencePerformanceTypes[\"Custom\"] = \"custom\";\n return ExperiencePerformanceTypes;\n}({});","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { isWindowObjectAvailable } from '../common/utils/windowHelper';\nclass VisibilityChangeObserver {\n constructor() {\n _defineProperty(this, \"started\", false);\n _defineProperty(this, \"observers\", []);\n _defineProperty(this, \"broadcast\", () => {\n this.observers.forEach(fn => fn());\n this.observers = [];\n });\n }\n start() {\n if (this.started) {\n return;\n }\n this.started = true;\n document.addEventListener('visibilitychange', this.broadcast);\n /**\n * According to https://developer.mozilla.org/en-US/docs/Web/API/Document/visibilitychange_event\n * Safari doesn’t fire visibilitychange as expected when the value of the visibilityState property transitions to hidden;\n * so for that case, you need to also include code to listen for the pagehide event.\n */\n if (isWindowObjectAvailable()) {\n window.addEventListener('pagehide', this.broadcast);\n }\n }\n subscribe(callback) {\n this.observers.push(callback);\n }\n unsubscribe(callback) {\n this.observers = this.observers.filter(fn => fn !== callback);\n }\n}\nexport const visibilityChangeObserver = new VisibilityChangeObserver();","export const isWindowObjectAvailable = () => {\n return typeof window !== 'undefined';\n};","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nclass UFOLogger {\n constructor() {\n _defineProperty(this, \"enabled\", false);\n }\n log(...args) {\n // eslint-disable-next-line no-console\n this.enabled && console.log(UFOLogger.UFOprefix, ...args);\n }\n warn(...args) {\n // eslint-disable-next-line no-console\n this.enabled && console.warn(UFOLogger.UFOprefix, ...args);\n }\n enable() {\n this.enabled = true;\n }\n disable() {\n this.enabled = false;\n }\n}\n_defineProperty(UFOLogger, \"UFOprefix\", '[ufo🛸]');\nexport const ufologger = new UFOLogger();\nexport const ufolog = (...args) => {\n ufologger.log(...args);\n};\nexport const ufowarn = (...args) => {\n ufologger.warn(...args);\n};","import { ExperiencePerformanceTypes } from './platform-client/core/experience/experience-types';\nexport let UFOGlobalEventStreamEventType = /*#__PURE__*/function (UFOGlobalEventStreamEventType) {\n UFOGlobalEventStreamEventType[UFOGlobalEventStreamEventType[\"EXPERIENCE_PAYLOAD\"] = 0] = \"EXPERIENCE_PAYLOAD\";\n UFOGlobalEventStreamEventType[UFOGlobalEventStreamEventType[\"SUBSCRIBE\"] = 1] = \"SUBSCRIBE\";\n UFOGlobalEventStreamEventType[UFOGlobalEventStreamEventType[\"UNSUBSCRIBE\"] = 2] = \"UNSUBSCRIBE\";\n return UFOGlobalEventStreamEventType;\n}({});\nexport let PageVisibleState = /*#__PURE__*/function (PageVisibleState) {\n PageVisibleState[\"VISIBLE\"] = \"visible\";\n PageVisibleState[\"HIDDEN\"] = \"hidden\";\n PageVisibleState[\"MIXED\"] = \"mixed\";\n return PageVisibleState;\n}({});\nexport let PageLoadMetrics = /*#__PURE__*/function (PageLoadMetrics) {\n PageLoadMetrics[\"fmp\"] = \"fmp\";\n PageLoadMetrics[\"tti\"] = \"tti\";\n return PageLoadMetrics;\n}({});\nexport let PageSegmentLoadMetrics = /*#__PURE__*/function (PageSegmentLoadMetrics) {\n PageSegmentLoadMetrics[\"fmp\"] = \"fmp\";\n PageSegmentLoadMetrics[\"tti\"] = \"tti\";\n return PageSegmentLoadMetrics;\n}({});\nexport let InteractionMetrics = /*#__PURE__*/function (InteractionMetrics) {\n InteractionMetrics[\"response\"] = \"response\";\n InteractionMetrics[\"result\"] = \"result\";\n return InteractionMetrics;\n}({});\nexport let CustomMetrics = /*#__PURE__*/function (CustomMetrics) {\n CustomMetrics[\"duration\"] = \"duration\";\n return CustomMetrics;\n}({});\nexport const SUBSCRIBE_ALL = '__SUBSCRIBE_ALL__';\nexport const FMP_MARK = 'fmp';\nexport const INLINE_RESPONSE_MARK = 'inline-response';","export { SUBSCRIBE_ALL, UFOGlobalEventStreamEventType } from '@atlassian/ufo-experimental/types';\nexport let TenantType = /*#__PURE__*/function (TenantType) {\n TenantType[\"RealUser\"] = \"real-user\";\n TenantType[\"Synthetic\"] = \"synthetic\";\n return TenantType;\n}({});","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { ufolog } from '@atlassian/ufo-experimental/logger';\nimport { SUBSCRIBE_ALL, UFOGlobalEventStreamEventType } from '@atlassian/ufo-experimental/types';\nexport class UFOGlobalEventStream {\n constructor() {\n _defineProperty(this, \"__buffer_only__\", false);\n _defineProperty(this, \"subscribers\", {});\n }\n push(event) {\n ufolog('EVENT STREAM push', event.type, event.payload);\n if (event.type === UFOGlobalEventStreamEventType.EXPERIENCE_PAYLOAD) {\n this.publish(event.payload);\n }\n if (event.type === UFOGlobalEventStreamEventType.SUBSCRIBE) {\n this.subscribe(event.payload.experienceId, event.payload.callback);\n }\n if (event.type === UFOGlobalEventStreamEventType.UNSUBSCRIBE) {\n this.unsubscribe(event.payload.experienceId, event.payload.callback);\n }\n }\n publish(eventPayload) {\n var _this$subscribers$eve;\n if (this.subscribers[SUBSCRIBE_ALL]) {\n this.subscribers[SUBSCRIBE_ALL].forEach(fn => {\n fn(eventPayload);\n });\n }\n (_this$subscribers$eve = this.subscribers[eventPayload.id]) === null || _this$subscribers$eve === void 0 ? void 0 : _this$subscribers$eve.forEach(fn => {\n fn(eventPayload);\n });\n }\n subscribe(experienceId, fn) {\n ufolog('EVENT STREAM subscribe', experienceId);\n if (!this.subscribers[experienceId]) {\n this.subscribers[experienceId] = [];\n }\n this.subscribers[experienceId].push(fn);\n }\n unsubscribe(experienceId, fn) {\n const index = this.subscribers[experienceId].findIndex(entry => entry === fn);\n if (index !== -1) {\n this.subscribers[experienceId].splice(index, 1);\n }\n }\n}","import { ExperiencePerformanceTypes } from '@atlassian/ufo-experimental';\nexport const isInitialPageLoad = data => {\n return data.performanceType === ExperiencePerformanceTypes.PageLoad && data.initial === true;\n};","export const navigationMetrics = () => {\n const entries = performance.getEntriesByType('navigation');\n if (entries.length === 0) {\n return null;\n }\n const navigation = entries[0];\n const metrics = {\n // From https://www.w3.org/TR/resource-timing/\n redirectStart: Math.round(navigation.redirectStart),\n redirectEnd: Math.round(navigation.redirectEnd),\n fetchStart: Math.round(navigation.fetchStart),\n domainLookupStart: Math.round(navigation.domainLookupStart),\n domainLookupEnd: Math.round(navigation.domainLookupEnd),\n connectStart: Math.round(navigation.connectStart),\n connectEnd: Math.round(navigation.connectEnd),\n secureConnectionStart: Math.round(navigation.secureConnectionStart),\n requestStart: Math.round(navigation.requestStart),\n responseStart: Math.round(navigation.responseStart),\n responseEnd: Math.round(navigation.responseEnd),\n encodedBodySize: Math.round(navigation.encodedBodySize),\n decodedBodySize: Math.round(navigation.decodedBodySize),\n transferSize: Math.round(navigation.transferSize),\n // From https://www.w3.org/TR/navigation-timing-2/\n redirectCount: navigation.redirectCount,\n type: navigation.type,\n unloadEventEnd: Math.round(navigation.unloadEventEnd),\n unloadEventStart: Math.round(navigation.unloadEventStart),\n workerStart: Math.round(navigation.workerStart)\n\n // The following properties are ignored because they provided limited value on a modern stack (e.g. the content\n // is usually rendered and interactive before the dom is fully parsed, dont't play well with streamed content...)\n // * domComplete\n // * domContentLoadedEventEnd\n // * domContentLoadedEventStart\n // * domInteractive\n // * loadEventEnd\n // * loadEventStart\n };\n return {\n 'metrics:navigation': metrics\n };\n};","import { ExperiencePerformanceTypes } from '@atlassian/ufo-experimental';\nimport { isInitialPageLoad } from '../../../../utils/is-initial-page-load';\nimport { customTimings } from './custom';\nimport { ssrTimings } from './ssr';\nexport const appTimings = (data, ssrConfig) => {\n const explicitTimings = data.performanceType === ExperiencePerformanceTypes.PageLoad && data.explicitTimings || null;\n const timings = customTimings(data);\n const ssr = isInitialPageLoad(data) ? ssrTimings(ssrConfig) : null;\n const timingsApp = (explicitTimings || timings || ssr) && {\n ...explicitTimings,\n ...timings,\n ...ssr\n };\n if (!timingsApp || Object.keys(timingsApp).length === 0) {\n return null;\n }\n return {\n 'timings:app': timingsApp\n };\n};","const retrieveTimings = data => {\n const configTimings = data.timings || [];\n const timings = configTimings.reduce((entries, timing) => {\n const startMark = data.metrics.marks.find(mark => mark.name === timing.startMark);\n if (timing.startMark && !startMark) {\n return entries;\n }\n const endMark = data.metrics.marks.find(mark => mark.name === timing.endMark);\n if (timing.endMark && !endMark) {\n return entries;\n }\n if (data.metrics.startTime === null || data.metrics.endTime === null) {\n return null;\n }\n const startTime = Math.round((startMark ? startMark.time : data.metrics.startTime) - data.metrics.startTime);\n const duration = Math.round((endMark ? endMark.time : data.metrics.endTime) - data.metrics.startTime - startTime);\n entries[`${timing.key}`] = {\n startTime,\n duration\n };\n return entries;\n }, {});\n return timings;\n};\nexport const customTimings = data => {\n if (!data.timings) {\n return null;\n }\n const timings = retrieveTimings(data);\n if (Object.keys(timings).length === 0) {\n return null;\n }\n return timings;\n};","import { NESTED_METRIC_SEPARATOR } from './constants';\nconst filterEntry = entry => {\n return !(!entry || typeof entry !== 'object' || entry.startTime < 0 || entry.duration < 0);\n};\nconst mapEntry = entry => {\n return {\n startTime: Math.round(entry.startTime),\n duration: Math.round(entry.duration)\n };\n};\nconst SSR_PREFIX = 'ssr';\nconst mapKey = key => {\n if (key === 'total') {\n return SSR_PREFIX;\n }\n return `${SSR_PREFIX}${NESTED_METRIC_SEPARATOR}${key}`;\n};\nexport const ssrTimings = ssr => {\n if (!(ssr !== null && ssr !== void 0 && ssr.getTimings)) {\n return null;\n }\n const timings = ssr.getTimings();\n if (!timings) {\n return null;\n }\n const ssrTimings = Object.entries(timings).reduce((acc, entry) => {\n if (filterEntry(entry[1])) {\n acc[mapKey(entry[0])] = mapEntry(entry[1]);\n }\n return acc;\n }, {});\n if (!ssrTimings || Object.keys(ssrTimings).length === 0) {\n return null;\n }\n return ssrTimings;\n};","export const getWindowObject = () => {\n return typeof window !== 'undefined' && !!window ? window : undefined;\n};\nexport const getPerformanceObject = () => {\n const {\n performance\n } = getWindowObject() || {};\n return performance;\n};\nexport const getPerformanceObserverObject = () => {\n const {\n PerformanceObserver\n } = getWindowObject() || {};\n return PerformanceObserver;\n};","import { getPerformanceObject } from '../../../utils/window-helper';\nexport const bundleEvalTimings = (data, bundleEvalTimings, performance = getPerformanceObject() || undefined) => {\n if (!bundleEvalTimings) {\n return null;\n }\n const started = {};\n const timings = {};\n performance === null || performance === void 0 ? void 0 : performance.getEntriesByType('mark').forEach(mark => {\n const result = bundleEvalTimings.mapPerformanceMark(mark.name);\n if (!result || data.result.startTime === null) {\n return;\n }\n const {\n type,\n name\n } = result;\n if (type === 'start' && mark.startTime >= data.result.startTime) {\n started[name] = mark;\n return;\n }\n if (type === 'end' && started[name]) {\n timings[name] = {\n startTime: Math.round(started[name].startTime - data.result.startTime),\n duration: Math.round(mark.startTime - started[name].startTime)\n };\n delete started[name];\n }\n });\n if (bundleEvalTimings !== null && bundleEvalTimings !== void 0 && bundleEvalTimings.additionalTimings && data.result.startTime !== null) {\n const result = bundleEvalTimings.additionalTimings(data.result.startTime);\n if (result) {\n Object.entries(result).forEach(([key, value]) => {\n timings[key] = value;\n });\n }\n }\n if (Object.keys(timings).length === 0) {\n return null;\n }\n return {\n 'timings:bundleEval': timings\n };\n};","import { ufologger } from '@atlassian/ufo-experimental';\nimport { getPerformanceObject, getPerformanceObserverObject } from '../../utils/window-helper';\nexport const resourceTimingBuffer = {\n timings: [],\n maxSize: 1000,\n observer: null,\n transformResource: entry => ({\n name: entry.name,\n initiatorType: entry.initiatorType,\n transferSize: entry.transferSize,\n startTime: Math.round(entry.startTime),\n duration: Math.round(entry.duration),\n fetchStart: Math.round(entry.fetchStart || 0),\n workerStart: Math.round(entry.workerStart || 0),\n responseStart: Math.round(entry.responseStart || 0)\n }),\n start: (performance = getPerformanceObject(), PerformanceObserver = getPerformanceObserverObject()) => {\n var _performance$getEntri;\n if (!PerformanceObserver || !performance || typeof PerformanceObserver === 'undefined') {\n return;\n }\n if (resourceTimingBuffer.observer) {\n ufologger.warn('Observer is already running');\n return;\n }\n const resources = (_performance$getEntri = performance.getEntriesByType) === null || _performance$getEntri === void 0 ? void 0 : _performance$getEntri.call(performance, 'resource');\n if (resources) {\n resourceTimingBuffer.timings = resources.map(resource => resourceTimingBuffer.transformResource(resource));\n }\n resourceTimingBuffer.observer = new PerformanceObserver(resourceTimingBuffer.addTimings);\n resourceTimingBuffer.observer.observe({\n entryTypes: ['resource']\n });\n },\n stop: () => {\n if (resourceTimingBuffer.observer) {\n resourceTimingBuffer.observer.disconnect();\n resourceTimingBuffer.observer = null;\n }\n resourceTimingBuffer.timings = [];\n },\n addTimings: list => {\n const entries = list.getEntries().map(entry => resourceTimingBuffer.transformResource(entry));\n const overflow = resourceTimingBuffer.timings.length + entries.length;\n if (overflow > resourceTimingBuffer.maxSize) {\n const fieldsToRemove = overflow - resourceTimingBuffer.maxSize;\n resourceTimingBuffer.timings.splice(0, fieldsToRemove);\n }\n resourceTimingBuffer.timings.push(...entries);\n }\n};\nexport const getResourceTimings = (startTime, performance = getPerformanceObject()) => {\n if (!PerformanceObserver || !resourceTimingBuffer.observer) {\n const resources = performance === null || performance === void 0 ? void 0 : performance.getEntriesByType('resource');\n if (resources) {\n return resources.filter(timing => timing.startTime >= startTime);\n }\n return null;\n }\n return resourceTimingBuffer.timings.filter(timing => timing.startTime >= startTime);\n};","import { getPerformanceObject, getWindowObject } from '../../../utils/window-helper';\nimport { getResourceTimings } from '../../resource-timings-buffer';\nconst cacheableTypes = ['script', 'link'];\nconst resourceTypes = ['fetch', 'xmlhttprequest'];\nconst CACHE_NETWORK = 'network';\nconst CACHE_MEMORY = 'memory';\nconst CACHE_DISK = 'disk';\nconst calculateTransferType = (type, duration, size) => {\n if (!cacheableTypes.includes(type)) {\n return CACHE_NETWORK;\n }\n if ((size === undefined || size === 0) && duration === 0) {\n return CACHE_MEMORY;\n }\n if (size === 0 && duration > 0) {\n return CACHE_DISK;\n }\n if (size === undefined) {\n return null;\n }\n return CACHE_NETWORK;\n};\nconst hasAccessToResourceSize = (url, type, entry, hasTimingHeaders) => {\n return !cacheableTypes.includes(type) || url.includes('localhost') || !!getWindowObject() && url.includes(window.location.hostname) || hasTimingHeaders(url, entry);\n};\nconst getReportedInitiatorTypes = xhrEnabled => {\n if (xhrEnabled) {\n return ['script', 'link', 'fetch', 'xmlhttprequest'];\n }\n return ['script', 'link', 'fetch'];\n};\nconst evaluateAccessToResourceTimings = (_url, entry) => {\n return !(entry.responseStart === 0 && entry.startTime > entry.responseStart);\n};\nconst getSizeObject = size => size !== undefined ? {\n size\n} : null;\nconst getNetworkData = (item, eventStart, hasTimingHeaders = evaluateAccessToResourceTimings) => {\n const {\n name,\n duration,\n transferSize,\n initiatorType,\n responseStart\n } = item;\n const ttfb = Math.round(responseStart - eventStart);\n if (!hasAccessToResourceSize(name, initiatorType, item, hasTimingHeaders)) {\n return {};\n }\n if (cacheableTypes.includes(initiatorType)) {\n const transferType = calculateTransferType(initiatorType, duration, transferSize);\n if (!transferType) {\n return {\n ttfb,\n ...getSizeObject(transferSize)\n };\n }\n if (transferType !== CACHE_NETWORK) {\n return {\n transferType\n };\n }\n return {\n ttfb,\n transferType,\n ...getSizeObject(transferSize)\n };\n }\n return {\n ttfb,\n ...getSizeObject(transferSize)\n };\n};\nexport const resourceTimings = (data, resourceTimings, performance = getPerformanceObject() || undefined) => {\n if (data.result.startTime === null || !(resourceTimings !== null && resourceTimings !== void 0 && resourceTimings.sanitiseEndpoints)) {\n return null;\n }\n const resources = getResourceTimings(data.result.startTime, performance);\n if (!(resources !== null && resources !== void 0 && resources.length)) {\n return null;\n }\n const resourceTiming = {};\n const {\n xhrFilter\n } = resourceTimings;\n const reportedInitiatorTypes = getReportedInitiatorTypes(!!xhrFilter);\n resources.forEach(item => {\n if (!reportedInitiatorTypes.includes(item.initiatorType)) {\n return;\n }\n const {\n name,\n startTime,\n duration,\n workerStart,\n fetchStart,\n initiatorType\n } = item;\n if (!name || data.result.startTime === null) {\n return;\n }\n if (initiatorType === 'xmlhttprequest' && (xhrFilter === undefined || xhrFilter(name) === false)) {\n return;\n }\n const url = resourceTypes.includes(initiatorType) ? resourceTimings.sanitiseEndpoints(name) : resourceTimings.mapResources(name);\n if (!url || resourceTiming[url]) {\n return;\n }\n resourceTiming[url] = {\n startTime: Math.round(startTime - data.result.startTime),\n duration: Math.round(duration),\n workerStart: Math.max(Math.round(workerStart - data.result.startTime), 0),\n fetchStart: Math.max(Math.round(fetchStart - data.result.startTime), 0),\n type: initiatorType,\n ...getNetworkData(item, data.result.startTime, resourceTimings.hasTimingHeaders)\n };\n });\n return {\n 'timings:resource': resourceTiming\n };\n};","import { ExperiencePerformanceTypes } from '@atlassian/ufo-experimental';\nimport { FMP_MARK, INLINE_RESPONSE_MARK } from '@atlassian/ufo-experimental/types';\nimport { isInitialPageLoad } from '../utils/is-initial-page-load';\nimport { navigationMetrics } from './plugins/navigation-metrics';\nimport { appTimings } from './plugins/timings/app';\nimport { bundleEvalTimings } from './plugins/timings/bundle-eval';\nimport { resourceTimings } from './plugins/timings/resource';\nconst LoadMetricKeys = {\n tti: 'metric:tti',\n fmp: 'metric:fmp',\n ttiHistograms: 'metric:tti:histogramBuckets',\n fmpHistograms: 'metric:fmp:histogramBuckets'\n};\nconst InlineResultMetricKeys = {\n result: 'metric:result',\n response: 'metric:response',\n resultHistograms: 'metric:result:histogramBuckets',\n responseHistograms: 'metric:response:histogramBuckets'\n};\nconst CustomMetricKeys = {\n duration: 'metric:duration',\n durationHistograms: 'metric:duration:histogramBuckets'\n};\nconst getHistogram = (data, performanceConfig, isInitial) => {\n var _data$performanceConf;\n let histogram = {};\n if ((_data$performanceConf = data.performanceConfig) !== null && _data$performanceConf !== void 0 && _data$performanceConf.histogram) {\n histogram = data.performanceConfig.histogram;\n } else if (performanceConfig !== null && performanceConfig !== void 0 && performanceConfig.histogram) {\n histogram = performanceConfig.histogram;\n }\n if (histogram) {\n const histograms = histogram[data.performanceType];\n switch (data.performanceType) {\n case ExperiencePerformanceTypes.PageLoad:\n case ExperiencePerformanceTypes.PageSegmentLoad:\n const histogramType = isInitial !== undefined && isInitial === true ? 'initial' : 'transition';\n return histograms ? {\n [LoadMetricKeys.ttiHistograms]: histograms[histogramType].tti,\n [LoadMetricKeys.fmpHistograms]: histograms[histogramType].fmp\n } : {};\n case ExperiencePerformanceTypes.InlineResult:\n return histograms ? {\n [InlineResultMetricKeys.resultHistograms]: histograms.result,\n [InlineResultMetricKeys.responseHistograms]: histograms.response\n } : {};\n case ExperiencePerformanceTypes.Custom:\n return histograms ? {\n [CustomMetricKeys.durationHistograms]: histograms.duration\n } : {};\n }\n }\n};\nexport const getLoadMetrics = (data, ssr, performanceConfig) => {\n var _data$metrics$marks$f;\n if (data.metrics.endTime === null || data.metrics.startTime === null) {\n return null;\n }\n const fmpMark = ((_data$metrics$marks$f = data.metrics.marks.find(mark => mark.name === FMP_MARK)) === null || _data$metrics$marks$f === void 0 ? void 0 : _data$metrics$marks$f.time) || isInitialPageLoad(data) && (ssr === null || ssr === void 0 ? void 0 : ssr.getDoneMark());\n const tti = data.metrics.endTime - data.metrics.startTime;\n const fmp = typeof fmpMark === 'number' ? fmpMark - data.metrics.startTime : tti;\n return {\n [LoadMetricKeys.tti]: Math.round(tti),\n [LoadMetricKeys.fmp]: Math.round(fmp),\n ...getHistogram(data, performanceConfig)\n };\n};\nexport const getInlineResultMetrics = (data, performanceConfig) => {\n if (data.metrics.endTime === null || data.metrics.startTime === null) {\n return null;\n }\n const responseMark = data.metrics.marks.find(mark => mark.name === INLINE_RESPONSE_MARK);\n const result = data.metrics.endTime - data.metrics.startTime;\n const response = responseMark ? responseMark.time - data.metrics.startTime : result;\n return {\n [InlineResultMetricKeys.result]: Math.round(result),\n [InlineResultMetricKeys.response]: Math.round(response),\n ...getHistogram(data, performanceConfig)\n };\n};\nexport const getCustomMetrics = (data, performanceConfig) => {\n if (data.metrics.endTime === null || data.metrics.startTime === null) {\n return null;\n }\n const duration = data.metrics.endTime - data.metrics.startTime;\n return {\n [CustomMetricKeys.duration]: Math.round(duration),\n ...getHistogram(data, performanceConfig)\n };\n};\nconst getPerformanceMetrics = (data, ssr, performanceConfig) => {\n switch (data.performanceType) {\n case ExperiencePerformanceTypes.PageLoad:\n case ExperiencePerformanceTypes.PageSegmentLoad:\n return getLoadMetrics(data, ssr, performanceConfig);\n case ExperiencePerformanceTypes.InlineResult:\n return getInlineResultMetrics(data, performanceConfig);\n case ExperiencePerformanceTypes.Custom:\n return getCustomMetrics(data, performanceConfig);\n }\n};\nexport const getPerformancePayload = (data, ssr, bundleEvalConfig, resourceConfig, performanceConfig) => {\n return {\n ...getPerformanceMetrics(data, ssr, performanceConfig),\n ...resourceTimings(data, resourceConfig),\n ...bundleEvalTimings(data, bundleEvalConfig),\n ...appTimings(data, ssr),\n ...(isInitialPageLoad(data) ? navigationMetrics() : null)\n };\n};","import { PageVisibleState } from '@atlassian/ufo-experimental/types';\nexport const pageVisibleState = data => {\n var _data$pageVisibleStat;\n return {\n 'experience:pageVisible': (_data$pageVisibleStat = data.pageVisibleState) !== null && _data$pageVisibleStat !== void 0 ? _data$pageVisibleStat : document.hidden ? PageVisibleState.HIDDEN : PageVisibleState.VISIBLE\n };\n};","export const appVersion = config => {\n const pluginData = {\n 'app:web:version': config.version.web\n };\n if (config.version.ssr) {\n pluginData['app:ssr:version'] = config.version.ssr;\n }\n return pluginData;\n};","import Bowser from 'bowser-ultralight';\nimport memoizeOne from 'memoize-one';\nimport { getWindowObject } from '../utils/window-helper';\nexport const eventBrowserPlugin = memoizeOne(() => {\n var _getWindowObject, _getWindowObject$navi;\n if (!Bowser.getParser) {\n return null;\n }\n const browser = Bowser.getParser(((_getWindowObject = getWindowObject()) === null || _getWindowObject === void 0 ? void 0 : (_getWindowObject$navi = _getWindowObject.navigator) === null || _getWindowObject$navi === void 0 ? void 0 : _getWindowObject$navi.userAgent) || '');\n return {\n 'event:browser:name': browser.getBrowserName(),\n 'event:browser:version': browser.getBrowserVersion()\n };\n});","import memoizeOne from 'memoize-one';\nexport const eventCpusPlugin = memoizeOne(() => {\n if (!navigator.hardwareConcurrency) {\n return null;\n }\n return {\n 'event:cpus': navigator.hardwareConcurrency\n };\n});","export const featureFlags = (featureFlagClient, featureFlags, data) => {\n const allFeatureFlags = [...featureFlags, ...(data.featureFlags || [])];\n if (allFeatureFlags.length === 0) {\n return null;\n }\n const initialMemo = [];\n allFeatureFlags.reduce((memo, featureFlagKey) => {\n const ffVal = featureFlagClient.getValue(featureFlagKey);\n if (ffVal !== undefined && ffVal !== null) {\n memo.push([featureFlagKey, ffVal]);\n }\n return memo;\n }, initialMemo);\n const mappedFeatureFlags = Object.fromEntries(initialMemo);\n return {\n featureFlags: mappedFeatureFlags\n };\n};","import memoizeOne from 'memoize-one';\nexport const eventMemoryPlugin = memoizeOne(() => {\n // @ts-ignore: deviceMemory is exposed in some browsers\n if (!navigator.deviceMemory) {\n return null;\n }\n return {\n // @ts-ignore\n 'event:memory': navigator.deviceMemory\n };\n});","export const ssrFeatureFlags = ssr => {\n if (!(ssr !== null && ssr !== void 0 && ssr.getFeatureFlags)) {\n return null;\n }\n try {\n const featureFlags = ssr.getFeatureFlags();\n if (featureFlags) {\n return {\n 'ssr:featureFlags': featureFlags\n };\n }\n } catch (e) {}\n return null;\n};","export const Route = {\n route: '',\n setRoute(newRoute) {\n this.route = newRoute;\n },\n getRoute() {\n return this.route;\n }\n};","import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nimport { ExperiencePerformanceTypes, ExperienceTypes, visibilityChangeObserver } from '@atlassian/ufo-experimental';\nimport { getGlobalEventStream, setGlobalEventStream } from '@atlassian/ufo-experimental/global-stream-buffer';\nimport { ufolog, ufowarn } from '@atlassian/ufo-experimental/logger';\nimport { PageVisibleState, UFOGlobalEventStreamEventType } from '@atlassian/ufo-experimental/types';\nimport { UFO_BUILD_VERSION } from '../../buildVersion';\nimport { TenantType } from '../../types';\nimport { UFOGlobalEventStream } from '../event-stream/event-stream';\nimport { getPerformancePayload } from './performance';\nimport { pageVisibleState } from './performance/plugins/page-visible-state';\nimport { resourceTimingBuffer } from './performance/resource-timings-buffer';\nimport { appFramework } from './plugins/app/framework';\nimport { appVersion } from './plugins/app/version';\nimport { eventBrowserPlugin } from './plugins/browser';\nimport { eventCpusPlugin } from './plugins/cpus';\nimport { featureFlags } from './plugins/feature-flags';\nimport { eventMemoryPlugin } from './plugins/memory';\nimport { eventNetworkPlugin } from './plugins/network';\nimport { ssrFeatureFlags } from './plugins/ssr/feature-flags';\nimport { ssrSuccess } from './plugins/ssr/success';\nimport { Route } from './route';\nimport { isInitialPageLoad } from './utils/is-initial-page-load';\nimport { getPerformanceObject, getWindowObject } from './utils/window-helper';\nconst UNKNOWN_VALUE = 'unknown';\nconst DEFAULT_PAYLOAD_DATA = {\n schemaVersion: UNKNOWN_VALUE,\n id: UNKNOWN_VALUE,\n uuid: UNKNOWN_VALUE,\n state: {\n id: UNKNOWN_VALUE\n },\n result: {\n startTime: 0,\n duration: 0,\n success: false\n },\n type: ExperienceTypes.Experience,\n category: UNKNOWN_VALUE,\n performanceType: ExperiencePerformanceTypes.Custom,\n metadata: {},\n explicitTimings: {},\n metrics: {\n startTime: 0,\n endTime: 0,\n marks: []\n },\n platform: null,\n children: [],\n pageVisibleState: PageVisibleState.MIXED,\n isSSROutputAsFMP: false,\n timings: [],\n featureFlags: []\n};\nclass Publisher {\n constructor() {\n var _getWindowObject, _getWindowObject$loca;\n _defineProperty(this, \"gasv3\", null);\n _defineProperty(this, \"product\", '');\n _defineProperty(this, \"region\", UNKNOWN_VALUE);\n _defineProperty(this, \"hostname\", ((_getWindowObject = getWindowObject()) === null || _getWindowObject === void 0 ? void 0 : (_getWindowObject$loca = _getWindowObject.location) === null || _getWindowObject$loca === void 0 ? void 0 : _getWindowObject$loca.hostname) || '');\n _defineProperty(this, \"tenantType\", TenantType.RealUser);\n _defineProperty(this, \"app\", {\n version: {\n web: UNKNOWN_VALUE\n }\n });\n _defineProperty(this, \"performanceConfig\", {});\n _defineProperty(this, \"buffer\", []);\n _defineProperty(this, \"featureFlagClient\", null);\n _defineProperty(this, \"featureFlags\", []);\n _defineProperty(this, \"ssr\", null);\n _defineProperty(this, \"resourceTimings\", null);\n _defineProperty(this, \"bundleEvalTimings\", null);\n _defineProperty(this, \"route\", Route);\n _defineProperty(this, \"plugins\", null);\n _defineProperty(this, \"allowlist\", () => true);\n _defineProperty(this, \"getPluginsMetrics\", data => {\n const result = {};\n if (this.plugins) {\n this.plugins.forEach(plugin => {\n const pluginOutput = plugin({\n ...data\n });\n if (pluginOutput === null || typeof pluginOutput !== 'object') {\n return;\n }\n Object.entries(pluginOutput).forEach(([key, value]) => {\n result[`${this.product}:${key}`] = value;\n });\n });\n }\n return result;\n });\n }\n publish(data) {\n var _getPerformanceObject, _getPerformanceObject2;\n const payloadStart = ((_getPerformanceObject = getPerformanceObject()) === null || _getPerformanceObject === void 0 ? void 0 : _getPerformanceObject.now()) || 0;\n const experienceKey = this.getExperienceKey(data);\n if (!this.allowlist(experienceKey, data)) {\n ufowarn(`experience ${experienceKey} does not meet requirements of allowlist`);\n return;\n }\n\n // it is used to setup default properties on the data to prevent errors\n const supportedData = {\n ...DEFAULT_PAYLOAD_DATA,\n ...data\n };\n const payload = {\n actionSubject: 'experience',\n action: 'measured',\n source: 'measured',\n tags: ['observability'],\n attributes: {\n properties: {\n 'event:source': {\n name: 'ufo/web',\n version: supportedData.schemaVersion\n },\n 'event:schema': UFO_BUILD_VERSION || UNKNOWN_VALUE,\n 'event:product': this.product,\n 'event:region': this.region,\n 'event:hostname': this.hostname,\n 'event:route': this.route.getRoute(),\n ...eventBrowserPlugin(),\n ...eventCpusPlugin(),\n ...eventMemoryPlugin(),\n ...eventNetworkPlugin(),\n ...appFramework(this.app),\n ...appVersion(this.app),\n 'experience:name': supportedData.id,\n // platform.fe.page-load|interaction|custom|page-segment.editor\n 'experience:key': experienceKey,\n 'experience:status': supportedData.state.id,\n 'experience:duration': supportedData.result.duration,\n ...(supportedData.result.startTime !== null ? {\n 'experience:startTime': supportedData.result.startTime\n } : null),\n ...(supportedData.uuid ? {\n 'experience:spanId': supportedData.uuid\n } : null),\n ...(this.tenantType !== TenantType.RealUser ? {\n 'event:tenantType': this.tenantType\n } : null),\n ...this.mapMetadataToPayload(supportedData.metadata),\n ...this.extractPageLoadData(supportedData),\n ...pageVisibleState(supportedData),\n ...(isInitialPageLoad(supportedData) && ssrSuccess(this.ssr)),\n ...(isInitialPageLoad(supportedData) && ssrFeatureFlags(this.ssr)),\n ...(this.featureFlagClient && featureFlags(this.featureFlagClient, this.featureFlags, supportedData))\n },\n performance: this.getPerformanceMetrics(supportedData),\n task: supportedData.id\n }\n };\n const payloadEnd = ((_getPerformanceObject2 = getPerformanceObject()) === null || _getPerformanceObject2 === void 0 ? void 0 : _getPerformanceObject2.now()) || 0;\n payload.attributes.performance.payloadTime = payloadEnd - payloadStart;\n if (this.gasv3) {\n this.gasv3.sendOperationalEvent(payload);\n } else {\n this.buffer.push(payload);\n }\n ufolog('PAYLOAD:', JSON.stringify(payload, null, 2));\n }\n setGlobalEventStream() {\n if (!(getGlobalEventStream() instanceof UFOGlobalEventStream)) {\n const eventStream = new UFOGlobalEventStream();\n eventStream.push({\n type: UFOGlobalEventStreamEventType.SUBSCRIBE,\n payload: {\n experienceId: '__SUBSCRIBE_ALL__',\n callback: this.publish.bind(this)\n }\n });\n setGlobalEventStream(eventStream);\n }\n }\n setRoute(newRoute) {\n this.route.setRoute(newRoute);\n }\n setup(config) {\n visibilityChangeObserver.start();\n resourceTimingBuffer.start();\n if (!this.product) {\n this.product = config.product || '';\n }\n if (config.allowlist) {\n this.allowlist = config.allowlist;\n }\n if (config.tenantType) {\n this.tenantType = config.tenantType;\n }\n if (config.hostname) {\n this.hostname = config.hostname;\n }\n if (config.region) {\n this.region = config.region;\n }\n if (config.app) {\n this.app = config.app;\n }\n if (config.featureFlagClient) {\n this.featureFlagClient = config.featureFlagClient;\n }\n if (config.featureFlags) {\n this.featureFlags = config.featureFlags;\n }\n if (config.ssr) {\n this.ssr = config.ssr;\n }\n if (config.bundleEvalTimings) {\n this.bundleEvalTimings = config.bundleEvalTimings;\n }\n if (config.resourceTimings) {\n this.resourceTimings = config.resourceTimings;\n }\n if (config.performanceConfig) {\n this.performanceConfig = config.performanceConfig;\n }\n if (config.plugins) {\n this.plugins = config.plugins;\n }\n this.setGlobalEventStream();\n if (!this.gasv3) {\n this.gasv3 = config.gasv3;\n this.buffer.forEach(this.gasv3.sendOperationalEvent);\n }\n }\n mapMetadataToPayload(metadata) {\n const payload = {};\n Object.entries(metadata).forEach(([key, value]) => {\n if (value !== undefined) {\n payload[`custom:${key}`] = value;\n }\n });\n return payload;\n }\n extractPageLoadData(data) {\n if ('initial' in data) {\n return {\n 'experience:pageLoadType': data.initial ? 'initial' : 'transition'\n };\n }\n return {};\n }\n getPrefix(data) {\n if (data.platform !== null) {\n return 'platform';\n }\n return this.product;\n }\n getExperienceKey(data) {\n const keyParts = [this.getPrefix(data), 'fe', data.type];\n if (data.platform) {\n keyParts.push(data.platform.component);\n }\n keyParts.push(data.id);\n return keyParts.join('.');\n }\n getExperiencePerformanceKey(data) {\n const keyParts = [this.getPrefix(data), 'fe', data.performanceType];\n if (data.platform) {\n keyParts.push(data.platform.component);\n }\n keyParts.push(data.id);\n return keyParts.join('.');\n }\n getExperiencePerformanceType(data) {\n return data.performanceType;\n }\n getPerformanceMetrics(data) {\n return {\n 'event:key': this.getExperiencePerformanceKey(data),\n 'event:type': this.getExperiencePerformanceType(data),\n ...getPerformancePayload(data, this.ssr, this.bundleEvalTimings, this.resourceTimings, this.performanceConfig),\n ...this.getPluginsMetrics(data)\n };\n }\n}\nexport const payloadPublisher = new Publisher();","// temp solution until a proper versioning\nexport const UFO_BUILD_VERSION = '0.1.7';","export const eventNetworkPlugin = () => {\n // @ts-ignore: connection is available in some browsers\n // eslint-disable-next-line compat/compat\n if (!navigator.connection) {\n return null;\n }\n return {\n // @ts-ignore: connection is available in some browsers\n // eslint-disable-next-line compat/compat\n 'event:network:effectiveType': navigator.connection.effectiveType,\n // @ts-ignore: connection is available in some browsers\n // eslint-disable-next-line compat/compat\n 'event:network:rtt': navigator.connection.rtt,\n // @ts-ignore: connection is available in some browsers\n // eslint-disable-next-line compat/compat\n 'event:network:downlink': navigator.connection.downlink\n };\n};","export const appFramework = config => {\n if (!config.framework) {\n return null;\n }\n return {\n 'app:framework:name': config.framework.name,\n 'app:framework:version': config.framework.version\n };\n};","export const ssrSuccess = ssr => {\n if (ssr !== null && ssr !== void 0 && ssr.getDoneMark()) {\n return {\n 'ssr:success': true\n };\n }\n return null;\n};","import { ufowarn } from '../logger';\nimport { UFOGlobalEventStreamEventType } from '../types';\nconst MAX_EARLY_QUEUE_LENGTH = 250;\nexport const getGlobalEventStream = () => {\n if (!globalThis.__UFO_GLOBAL_EVENT_STREAM__) {\n const earlyStream = (() => {\n const stream = [];\n return {\n __buffer_only__: true,\n push: event => {\n if (stream.length < MAX_EARLY_QUEUE_LENGTH) {\n stream.push(event);\n }\n },\n getStream: () => stream\n };\n })();\n globalThis.__UFO_GLOBAL_EVENT_STREAM__ = earlyStream;\n }\n return globalThis.__UFO_GLOBAL_EVENT_STREAM__;\n};\nexport const setGlobalEventStream = eventStream => {\n var _globalThis$__UFO_GLO, _globalThis$__UFO_GLO2;\n if (globalThis.__UFO_GLOBAL_EVENT_STREAM__ && !((_globalThis$__UFO_GLO = globalThis.__UFO_GLOBAL_EVENT_STREAM__) !== null && _globalThis$__UFO_GLO !== void 0 && _globalThis$__UFO_GLO.__buffer_only__)) {\n ufowarn('Global Event Stream already initialised. Ignoring new event stream setup');\n return;\n }\n if ((_globalThis$__UFO_GLO2 = globalThis.__UFO_GLOBAL_EVENT_STREAM__) !== null && _globalThis$__UFO_GLO2 !== void 0 && _globalThis$__UFO_GLO2.__buffer_only__) {\n globalThis.__UFO_GLOBAL_EVENT_STREAM__.getStream().forEach(eventStream.push.bind(eventStream));\n }\n globalThis.__UFO_GLOBAL_EVENT_STREAM__ = eventStream;\n};\nexport const subscribeEvent = (experienceId, callback) => {\n return {\n type: UFOGlobalEventStreamEventType.SUBSCRIBE,\n payload: {\n experienceId,\n callback\n }\n };\n};\nexport const unsubscribeEvent = (experienceId, callback) => {\n return {\n type: UFOGlobalEventStreamEventType.UNSUBSCRIBE,\n payload: {\n experienceId,\n callback\n }\n };\n};\nexport const experiencePayloadEvent = data => {\n return {\n type: UFOGlobalEventStreamEventType.EXPERIENCE_PAYLOAD,\n payload: data\n };\n};","import { unstable_IdlePriority as idlePriority, unstable_scheduleCallback as scheduleCallback } from 'scheduler';\nimport { startLighthouseObserver } from '@atlassian/ufo-additional-payload';\nimport { setUFOConfig } from '@atlassian/ufo-config';\nimport { initTTVC } from '@atlassian/ufo-dropbox-ttvc';\nimport { setupHiddenTimingCapture } from '@atlassian/ufo-hidden-timing';\nimport { sinkInteractionHandler } from '@atlassian/ufo-interaction-metrics';\nimport { getVCObserver } from '@atlassian/ufo-vc';\nlet initialized = false;\nfunction sinkInteraction(instance, payloadPackage) {\n sinkInteractionHandler((interactionId, interaction) => {\n scheduleCallback(idlePriority, () => {\n const payloads = payloadPackage.createPayloads(interactionId, interaction);\n payloads === null || payloads === void 0 ? void 0 : payloads.forEach(payload => {\n instance.sendOperationalEvent(payload);\n });\n });\n });\n}\nexport const init = (analyticsWebClientAsync, config) => {\n var _config$vc;\n if (initialized) {\n return;\n }\n setUFOConfig(config);\n if (config.enableTTVC) {\n initTTVC();\n }\n if ((_config$vc = config.vc) !== null && _config$vc !== void 0 && _config$vc.enabled) {\n getVCObserver({\n heatmapSize: config.vc.heatmapSize,\n oldDomUpdates: config.vc.oldDomUpdates,\n devToolsEnabled: config.vc.devToolsEnabled,\n selectorConfig: config.vc.selectorConfig\n }).start({\n startTime: 0\n });\n }\n setupHiddenTimingCapture();\n startLighthouseObserver();\n initialized = true;\n Promise.all([analyticsWebClientAsync,\n // eslint-disable-next-line import/dynamic-import-chunkname\n import( /* webpackChunkName: \"create-payloads\" */'@atlassian/ufo-create-payload')]).then(([awc, payloadPackage]) => {\n if (awc.getAnalyticsWebClientPromise) {\n awc.getAnalyticsWebClientPromise().then(client => {\n const instance = client.getInstance();\n sinkInteraction(instance, payloadPackage);\n });\n } else if (awc.sendOperationalEvent) {\n sinkInteraction(awc, payloadPackage);\n }\n });\n};","import { v4 as createUUID } from 'uuid';\nimport coinflip from '@atlassian/ufo-coinflip';\nimport { getInteractionRate } from '@atlassian/ufo-config';\nimport { getActiveTrace } from '@atlassian/ufo-experience-trace-id-context';\nimport { DefaultInteractionID } from '@atlassian/ufo-interaction-id-context';\nimport { abort, addHoldByID, addNewInteraction, getActiveInteraction, removeHoldByID, updatePageLoadInteractionName } from '@atlassian/ufo-interaction-metrics';\nimport UFORouteName from '@atlassian/ufo-route-name-context';\nconst AWAITING_PAGELOAD_NAME = 'awaiting_pageload_name';\nexport default function traceUFOPageLoad(ufoName, routeName = ufoName) {\n const activeInteraction = getActiveInteraction();\n if (activeInteraction && !ufoName) {\n return;\n }\n UFORouteName.current = routeName || null;\n const rate = ufoName ? getInteractionRate(ufoName, 'page_load') : 1;\n const enabledBySamplingRate = coinflip(rate);\n if (enabledBySamplingRate && !activeInteraction) {\n const newId = createUUID();\n DefaultInteractionID.current = newId;\n addNewInteraction(newId, ufoName || '', 'page_load', 0, rate, null, routeName, getActiveTrace());\n if (!ufoName) {\n // if no name is provided we add a hold to the interaction, it is removed if the name is provided while the interaction is holding\n addHoldByID(newId, [], AWAITING_PAGELOAD_NAME, AWAITING_PAGELOAD_NAME, true);\n }\n } else if (!enabledBySamplingRate && activeInteraction && activeInteraction.type === 'page_load') {\n // if there is an active interaction it will be aborted without initialising a new one because the coinflip returned false\n abort(activeInteraction.id, 'excluded_by_sampling');\n } else if (ufoName && activeInteraction && !activeInteraction.ufoName && activeInteraction.type === 'page_load') {\n updatePageLoadInteractionName(ufoName, routeName);\n removeHoldByID(activeInteraction.id, AWAITING_PAGELOAD_NAME);\n }\n}\nexport function updatePageloadName(ufoName, routeName = ufoName) {\n const interaction = getActiveInteraction();\n if (!interaction || interaction.type !== 'page_load' && interaction.type !== 'transition') {\n return;\n }\n if (ufoName) {\n const rate = getInteractionRate(ufoName, 'page_load');\n updatePageLoadInteractionName(ufoName, routeName);\n if (coinflip(rate)) {\n UFORouteName.current = ufoName;\n } else {\n abort(interaction.id, 'excluded_by_sampling');\n }\n }\n removeHoldByID(interaction.id, AWAITING_PAGELOAD_NAME);\n}","import AnalyticsWebClient, {userType} from \"@atlassiansox/analytics-web-client\";\nimport {getEnvironment, shouldUseStargate} from \"./utils\";\nimport storage from \"../utils/storage\";\n\nlet globalAnalyticsClient: AnalyticsWebClient;\n\nconst atlassianAccountId = (storage.getCookie(\"__aid_user_id\") ?? \"\").replace(\n /\"/g,\n \"\"\n);\n\nexport const createAnalyticsClient = (): AnalyticsWebClient => {\n const analyticsEnv = getEnvironment();\n const client = new AnalyticsWebClient(\n {\n env: analyticsEnv,\n product: \"marketing\",\n version: \"1.0.0\",\n locale: \"en-us\"\n },\n {\n useStargate: shouldUseStargate(),\n enableNewEventSender: true,\n });\n\n\n if (atlassianAccountId) {\n client.setUserInfo(userType.ATLASSIAN_ACCOUNT, atlassianAccountId);\n } else {\n client.clearUserInfo();\n }\n\n return client;\n}\nexport const analyticsClient = (): AnalyticsWebClient => {\n if (!globalAnalyticsClient) {\n globalAnalyticsClient = createAnalyticsClient();\n }\n return globalAnalyticsClient;\n}","import Environment from \"../common/environment\";\nimport { envType } from \"@atlassiansox/analytics-web-client\";\n\nexport const shouldUseStargate = (): boolean => {\n switch (Environment.getEnvironment()) {\n case \"production\":\n case \"staging\":\n return true;\n case \"dev\":\n default:\n return false;\n }\n}\n\nexport const getEnvironment = (): string => {\n switch (Environment.getEnvironment()) {\n case \"staging\": {\n return envType.STAGING;\n }\n case \"dev\": {\n return envType.DEV;\n }\n case \"production\":\n default: {\n return envType.PROD;\n }\n }\n}","import {payloadPublisher, ExperiencePerformanceTypes, TenantType} from \"@atlassian/ufo\";\nimport {Config} from \"@atlassian/ufo-config\";\nimport { init as initReactUFO } from '@atlassian/ufo-interaction-metrics-init';\nimport getUFORouteName from '@atlassian/ufo-route-name';\nimport traceUFOPageLoad from '@atlassian/ufo-trace-pageload';\n\nimport { analyticsClient } from '../analytics';\nimport { version } from \"react\";\n\nlet isInitialized = false;\n\nexport function initUFO(): void {\n\n payloadPublisher.setup({\n featureFlagClient: { getValue: () => true },\n product: \"marketing\",\n gasv3: analyticsClient(),\n app: {\n version: { web: \"1.0.0\" },\n framework: { name: \"react\", version }\n },\n tenantType: TenantType.RealUser,\n resourceTimings: {\n mapResources: (url) => url,\n sanitiseEndpoints: (url) => url\n },\n performanceConfig: {\n histogram: {\n [ExperiencePerformanceTypes.PageLoad]: {\n initial: {\n fmp: \"1000_2000_3000_4000\",\n tti: \"1000_2000_3000_4000\"\n },\n transition: {\n fmp: \"1000_2000\",\n tti: \"1000_2000\"\n }\n },\n [ExperiencePerformanceTypes.PageSegmentLoad]: {\n initial: {\n fmp: \"1000_2000\",\n tti: \"1000_2000\"\n },\n transition: {\n fmp: \"1000_2000\",\n tti: \"1000_2000\"\n }\n },\n [ExperiencePerformanceTypes.InlineResult]: {\n result: \"1000_2000\",\n response: \"1000_2000\"\n },\n [ExperiencePerformanceTypes.Custom]: {\n duration: \"1000_2000\"\n }\n }\n }\n });\n if (!isInitialized) {\n const config: Config = {\n product: 'marketing',\n region: 'unknown',\n enableCompleteUsingDoubleRAF: true,\n enableBetterPageVisibilityApi: true,\n kind: {\n page_load: 1,\n transition: 0,\n hover: 0,\n legacy: 0,\n typing: 0,\n press: 0,\n },\n namePrefix: \"magnolia-\",\n segmentPrefix: \"magnolia-\",\n }\n\n initReactUFO(Promise.resolve(analyticsClient()), config);\n // for omlet, author, proof, truth (with /wac/ prefix)\n let route = window.location.pathname.replace(/^\\/wac(\\/)?/, '');\n // for globaledge\n if (route.startsWith('/')) {\n route = route.replace('/', '');\n }\n // special case for home page\n if (['', '/'].includes(route)) {\n route = 'home';\n }\n const ufoRouteName = route.replace(/\\//g, '-');\n const ufoName = getUFORouteName({\n ufoName: ufoRouteName,\n name: route\n }).toLowerCase();\n traceUFOPageLoad(ufoName);\n }\n isInitialized = true;\n}\n\nif (document.readyState !== \"loading\") {\n initUFO();\n} else {\n window.addEventListener(\"DOMContentLoaded\", () => initUFO);\n}\n","export default function getUFORouteName(route) {\n if (route.ufoName != null) {\n return route.ufoName;\n }\n return route.name;\n}","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]]\n ]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/uuidjs/uuid for API details\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n if (node == null || clockseq == null) {\n var seedBytes = rng();\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [\n seedBytes[0] | 0x01,\n seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n ];\n }\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n }\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import objectWithoutPropertiesLoose from \"./objectWithoutPropertiesLoose.js\";\nexport default function _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","export default function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}"],"names":["__assign","this","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","defineProperty","exports","value","bindAll","bind_1","toOptions","capture","target","bindings","sharedOptions","unbinds","map","original","binding","options","getBinding","bind","forEach","unbind","_a","type","listener","addEventListener","removeEventListener","enumerable","get","f","g","h","k","l","window","MessageChannel","q","a","unstable_now","b","setTimeout","u","Date","now","clearTimeout","unstable_forceFrameRate","w","performance","x","y","z","console","A","cancelAnimationFrame","requestAnimationFrame","error","B","C","D","E","F","G","Math","floor","H","I","port2","port1","onmessage","postMessage","J","c","push","d","e","K","L","M","pop","m","v","r","sortIndex","id","N","O","P","Q","R","S","T","U","V","callback","startTime","expirationTime","W","X","priorityLevel","Y","Z","unstable_IdlePriority","unstable_ImmediatePriority","unstable_LowPriority","unstable_NormalPriority","unstable_Profiling","unstable_UserBlockingPriority","unstable_cancelCallback","unstable_continueExecution","unstable_getCurrentPriorityLevel","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","unstable_requestPaint","unstable_runWithPriority","unstable_scheduleCallback","delay","timeout","unstable_shouldYield","unstable_wrapCallback","module","isodate","traverse","input","strict","undefined","obj","keys","key","traverseObject","Array","isArray","arr","index","traverseArray","is","parse","matcher","iso","numericKeys","exec","offset","val","parseInt","substring","getTimezoneOffset","millis","UTC","string","test","o","Symbol","toStringTag","__esModule","create","default","getParser","Error","getResult","_ua","parsedResult","getUA","parseBrowser","browser","find","some","describe","isMobile","getBrowser","getBrowserName","String","name","toLowerCase","getBrowserVersion","version","iterator","next","toString","slice","constructor","from","done","TypeError","match","search","getTimezoneOffsetInMilliseconds","date","utcDate","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","setUTCFullYear","getTime","requiredArgs","required","args","startOfDay","dirtyDate","toDate","setHours","MILLISECONDS_IN_DAY","compareLocalAsc","dateLeft","dateRight","diff","differenceInDays","dirtyDateLeft","dirtyDateRight","sign","difference","abs","startOfDayLeft","startOfDayRight","timestampLeft","timestampRight","round","differenceInCalendarDays","setDate","result","Number","argument","argStr","warn","stack","NaN","token","singleMatcher","RegExp","multiMatcher","decodeComponents","components","split","decodeURIComponent","join","err","left","right","concat","decode","tokens","encodedURI","replace","replaceMap","entries","customDecodeURIComponent","predicate","ret","isArr","indexOf","factory","extend","attributes","init","converter","api","set","document","path","defaults","expires","toUTCString","JSON","stringify","write","encodeURIComponent","escape","stringifiedAttributes","attributeName","cookie","json","jar","cookies","parts","charAt","read","getJSON","remove","withConverter","safeIsNaN","isNaN","areInputsEqual","newInputs","lastInputs","first","second","memoizeOne","resultFn","isEqual","cache","memoized","newArgs","_i","lastThis","lastArgs","lastResult","clear","strictUriEncode","decodeComponent","splitOnFirst","filterObject","encodeFragmentIdentifier","validateArrayFormatSeparator","encode","keysSorter","sort","removeHash","hashStart","extract","queryStart","parseValue","parseNumbers","trim","parseBooleans","query","arrayFormat","arrayFormatSeparator","formatter","accumulator","includes","isEncodedArray","newValue","item","arrayValue","parserForArrayFormat","param","reduce","Boolean","object","shouldFilter","skipNull","skipEmptyString","keyValueSep","encoderForArrayFormat","objectCopy","filter","parseUrl","url","url_","hash","parseFragmentIdentifier","fragmentIdentifier","stringifyUrl","queryFromUrl","parsedQueryFromUrl","queryString","getHash","pick","exclude","exclusionFilter","PerformanceObserverEntryTypes","BufferWithMaxLength","maxLength","full","buffer","shift","getAll","EntriesBuffer","pe","getObserver","PerformanceObserver","list","getEntries","entry","entryType","startLSObserver","observe","buffered","startLTObserver","startLighthouseObserver","getLighthouseMetrics","start","stop","tbt","duration","longTaskStop","intersectStart","max","intersectStop","min","longTaskIncluded","observed","total","getTBT","cls","layoutShifts","sessionWindows","currentWindow","endTime","score","maxScore","sessionWindow","getCLS","coinflip","rate","random","config","setUFOConfig","newConfig","getConfig","getInteractionRate","interactionKind","killswitch","rates","rules","kind","autoGeneratedRate","rule","startsWith","getCapabilityRate","capability","capabilityRate","getAwaitBM3TTIList","awaitBM3TTI","getUfoNameOverrides","ufoNameOverrides","CONFIG","DEBUG","IDLE_TIMEOUT","NETWORK_TIMEOUT","Logger","static","messages","debug","format","info","unbindFunctions","InViewportImageObserver","Map","img","timestamp","imageLoadTimes","isIntersecting","intersectionObserver","unobserve","delete","event","HTMLImageElement","HTMLIFrameElement","timeStamp","IntersectionObserver","intersectionObserverCallback","loadUnbindFn","handleLoadOrErrorEvent","errorUnbindFn","disconnect","lastImageLoadTimestamp","InViewportMutationObserver","attributeFilter","attributeOldValue","childList","subtree","mutations","mutation","Element","Text","parentElement","addedNodes","node","HTMLElement","mutationObserver","MutationObserver","mutationObserverCallback","mutationObserverConfig","getNavigationType","_window$performance$g","getEntriesByType","navigation","getDeprecatedNavigationType","getActivationStart","_window$performance$g2","activationStart","AjaxIdleObservable","Set","message","subscribers","subscriber","abortCleanupTimeout","cleanupTimeout","pendingRequests","didNetworkTimeOut","startCleanupTimeout","add","ResourceLoadingIdleObservable","_window","pendingResources","element","src","complete","HTMLLinkElement","href","HTMLScriptElement","size","hasChildNodes","querySelectorAll","documentElement","eventType","NetworkIdleObservable","source","wasIdle","ajaxIdle","scriptLoadingIdle","isIdle","ajaxIdleObservable","increment","decrement","resourceLoadingIdleObservable","subscribe","handleUpdate","networkIdleObservable","requestAllIdleCallback","networkIdle","handleNetworkChange","_window$requestIdleCa","requestIdleCallback","handleCpuIdle","handleAllIdle","resetDidNetworkTimeOut","unsubscribe","CancellationReason","VisuallyCompleteCalculator","_window$performance","timing","successSubscriber","errorSubscriber","successSubscribers","errorSubscribers","isSupportedEnvironment","inViewportMutationObserver","_mutation$timestamp","_this$lastMutation$ti","_this$lastMutation","lastMutation","inViewportImageObserver","lastImageLoadTarget","cancel","activeMeasurementIndex","end","cancellationReason","navigationType","lastVisibleChange","getLastVisibleChange","async","isBfCacheRestore","navigationIndex","navigationCount","eventTarget","cancelOnInteraction","pageHideUnbind","visibilityChangeUnbind","clickUnbind","keydownUnbind","readyState","Promise","resolve","_this$lastMutation$ti2","_this$lastMutation2","detail","measurement","_this$lastMutation$ti3","_this$lastMutation3","MAX_SAFE_INTEGER","_this$lastMutation$ti4","_this$lastMutation4","getLastVisibleChangeTimestamp","_this$lastMutation$ti5","_this$lastMutation5","_this$lastMutation$ti6","_this$lastMutation6","calculator","initTTVC","idleTimeout","networkTimeout","setConfig","persisted","prerendering","_calculator3","cancelTTVC","_calculator4","state","context","getActiveTrace","clearActiveTrace","timings","wasHiddenFlag","setupFlag","isPageHidden","visibilityState","hidden","SIZE","insertIndex","pushHidden","isPageHiddenFlag","time","handleChange","setupHiddenTimingCapture","getPageVisibilityState","currentSize","hiddenState","startIdx","endIdx","tmpIdx","DefaultInteractionID","current","createContext","getInteractionId","allFeatureFlagsAccessed","currentFeatureFlagsAccessed","PreviousInteractionLog","isAborted","interactionQueue","segmentCache","CLEANUP_TIMEOUT","CLEANUP_TIMEOUT_AFTER_APDEX","segmentObservers","getActiveInteraction","interactionId","updatePageLoadInteractionName","ufoName","routeName","interaction","addCustomData","labelStack","data","customData","addCustomTiming","customTimings","addMark","marks","addSpan","spans","addHold","holdActive","currentInteraction","currentHold","holdInfo","addHoldByID","ignoreOnSubmit","removeHoldByID","addProfilerTimings","actualDuration","baseDuration","commitTime","reactProfilerTimings","pushToQueue","handleInteraction","finishInteraction","measure","featureFlags","during","fromEntries","cleanupCallbacks","reverse","cleanUpCallback","abortReason","sinkInteractionHandler","sinkFn","tryComplete","callCancelCallbacks","cancelCallbacks","cancelCallback","abort","abortByNewInteraction","interactionName","abortedByInteractionName","addNewInteraction","trace","previousTime","timeoutTime","timerID","addFeatureFlagsToInteraction","metrics","previousInteractionName","isPreviousInteractionAborted","requestInfo","measureStart","metaData","errors","apdex","prior","knownSegments","awaitReactProfilerCount","redirects","changeTimeout","newTime","currentTime","newTimerID","segmentObserver","onAdd","segment","onRemove","observer","segmentInfo","values","addSegmentObserver","findIndex","obs","splice","removeSegmentObserver","addApdex","apdexInfo","_apdexInfo$startTime","stopTime","addRequestInfo","getSegmentCacheKey","segmentId","addSegment","removeSegment","Observers","opts","reactRootElement","renderStart","renderStop","testId","role","className","cb","callbacks","_type","ignored","_this$intersectionObs","observedMutations","selectorConfig","getIntersectionObserver","getMutationObserver","totalTime","ssr","body","elementsInView","getTotalTime","setReactRootElement","setReactRootRenderStart","setReactRootRenderStop","observeElement","removedNodes","_this$intersectionObs2","measureStop","getElementName","tagName","localName","getAttribute","classList","attrs","idString","intersectionRect","ir","width","height","elementName","_startMeasureTimestamp","getViewportWidth","documentWidth","clientWidth","innerWidth","getViewportHeight","documentHeight","clientHeight","innerHeight","VCObserver","reason","blocking","reactRendered","tti","prefix","active","fullPrefix","getAbortReason","VC","VCBox","VCEntries","totalPainted","calculateVC","ssrInclusiveHeatmap","ssrVC","heatmap","outOfBoundary","outOfBoundaryInfo","oldDomUpdates","oldDomUpdatesEnabled","devToolsEnabled","__vc","rel","log","componentsLog","ttai","viewport","observers","rawTime","targetName","mappedValues","mapPixelsToHeatmap","top","applyChangesToHeatMap","arraySize","ceil","detachAbortListeners","wheelUnbind","setAbortReason","passive","once","keyDownUnbind","resizeUnbind","_this$unbind$resize","_this$unbind","resize","wheel","keyDown","heatmapSize","getCleanHeatmap","VCDevTools","then","startVCDevTools","setViewportSize","resetState","attachAbortListeners","subscribeResults","addToPerformance","lastUpdate","line","rounded","makeVCReturnObj","acc","VCRatio","VCParts","_this$componentsLog$t","entryPainted","_acc$abs","_this$componentsLog$t2","currentlyPainted","currentlyPaintedRatio","logEntry","vc","elements","setSSRElement","fill","localHeatmap","row","col","unbindFns","fn","instance","getVCObserver","PageVisibility","_visibilityChange","_handleVisibilityChange","isHidden","_hidden","_isHidden","_callbacks","callbackFn","msHidden","webkitHidden","_bindEventListeners","addCallback","removeCallback","has","getIsHidden","Performance","_performance","clearMarks","mark","getEntriesByName","getTimeOrigin","timeOrigin","navigationStart","isAvailable","ownKeys","getOwnPropertySymbols","getOwnPropertyDescriptor","_objectSpread","getOwnPropertyDescriptors","defineProperties","ApdexEvent","onEvent","pageVisibility","task","taskId","eventTimings","apdexTimings","_getApdexTimings","apdexScore","_calculateApdex","threshold","eventKey","_getEventKey","eventStartName","_getStartTime","_getStopTime","_cleanApdexState","eventName","_getEventTimingByName","_startedEvents","isActiveTab","_wasPreviouslyHidden","_isActiveEvents","_pageVisibility","_threshold","_shouldSendEvent","_onEvent","action","actionSubject","additionalAttributes","onVisibilityChange","_validateStartEvent","getStart","_validateStopEvent","apdexFields","_getApdexFields","visibilityFields","_getVisibilityFields","_sendEvent","isActive","possibleFn","errorMessage","isFunction","buildTenantFields","tenantInfo","tenantIdType","tenantId","buildUserFields","userInfo","userIdType","buildOrgFields","orgInfo","orgId","buildWorkspaceFields","workspaceInfo","workspaceId","buildAliases","aliases","isNotEmptyObject","buildGroups","groups","buildEventOverrides","anonymousId","getProductField","field","override","buildProductFields","productInfo","productOverrides","overrides","env","product","subproduct","origin","platform","buildAttributesWithName","attrObject","buildContainersWithName","containers","validContainers","filterAndBuildContainers","buildActionFields","actionEventType","containerType","containerId","objectType","objectId","actionSubjectId","nonPrivacySafeAttributes","tags","highPriority","buildActionName","buildActionEvent","tabId","sessionId","taskSessions","pageLoadId","productFields","extractProductOverrides","tenantFields","orgFields","workspaceFields","userFields","actionFields","mapKeys","omit","equals","every","partition","CompressionRule","compressFn","events","compatibleEvents","incompatibleEvents","canCompress","compressedEvents","EventCompressor","compressionRules","compressionRule","createGroups","allCompressedEvents","group","groupCompressedEvents","compressGroup","matchingCompressor","compressor","contextFields","matchingGroup","compress","EventDelayQueue","processFn","identifier","builtEvent","eventArgs","compressEventArgs","flushNextBatch","flushBatchTimeout","compressibleEventArgs","incompressibleEventArgs","allCompressedEventArgs","compressedEventArgs","compressedEvent","StopLowPriorityEventDelayReason","EventDelayCoordinator","fireDelayedEvent","compressors","delayQueue","delayTimeout","delayTimeoutPeriod","delayCallback","stopLowPriorityEventDelay","TIMEOUT","cancelFlush","isDelaying","MANUAL","_this$delayCallback","startFlush","LocalStorageKeySuffix","Timers","createLocalStorageKeys","queuePrefix","queueId","ACK","QUEUE","IN_PROGRESS","RECLAIM_START","RECLAIM_END","validSuffixs","promisedSetTimeout","msToWait","clearLocalStorageKeys","localStorage","removeItem","queue","inProgress","reclaimEnd","reclaimStart","ack","fullReclaims","partialReclaims","failedReclaims","reclaimProcessId","queuesToReclaim","ackTimestamp","getItem","ackTimestampNumber","RECLAIM_TIMEOUT","_error","findOtherQueues","claims","storageKeys","setItem","RECLAIM_WAIT","RECLAIM_WAIT_THRESHOLD","eventsInQueue","eventsInProgress","eventsToProcess","attemptNumber","status","leftover","acceptedItemIds","fullReclaim","reclaim","tryReclaim","settledClaims","allSettled","claim","successfulClaims","settledValue","NAMESPACE_AND_TIME_ADDED_INDEX","RESILIENCE_STORE_NAME","TIME_TO_PROCESS_AFTER_INDEX","TIME_ADDED_INDEX","RETRY_INDEX","StoreType","GuardPolicy","NoIndexedDbError","super","setPrototypeOf","AbandonWriteErrorName","AbandonWriteError","CallbackProcessingErrorName","CallbackProcessingError","InvalidPolicyErrorName","InvalidPolicyError","policy","method","shouldIgnoreResilienceDbError","errorWithName","convertToItemWrapper","namespace","retryAttempts","timeToProcessOffset","timeToBeProcessedAfter","timeAdded","createOptionsWithDefaults","logger","useMemory","maxAttempts","maxEventLimit","requestToPromise","request","reject","onsuccess","onerror","commitTransaction","transaction","commit","oncomplete","onabort","transactionToPromise","monitorErrorsOnRequest","IndexedDbEventCountGuard","eventLimit","deleteItemHandler","objectStore","count","_target","productTimeAddedIndex","keyRangeValues","IDBKeyRange","bound","getAllRequest","getAllKeys","deletePromises","all","items","ABANDON","itemsToAdd","numberOfEvictedItems","throwIfNotEnoughSpace","EVICT","evictIfNotEnoughSpace","IGNORE","calculateHowManyEventsWeCanAdd","promises","requiredSpace","freeSpace","calculateFreeSpace","extraSpace","deleteOldestNEvents","numberOfItemsToRemove","numberOfEventsInDb","getCountofEventsInObjectStore","_excluded","_excluded2","IndexedDbConnector","_namespace","_options","dbTimeout","indexedDB","open","onupgradeneeded","oldVersion","store","createObjectStore","keyPath","createIndex","unique","getObjectStoreAndTransaction","bulkAddResult","globalEventLimitGuard","insertItems","itemOptions","_ref","fixedCount","timeIndex","upperBoundOpenKeyRange","upperBound","openCursor","numberOfDeletedItems","cursor","updatedValue","update","continue","itemIds","deleteItem","_await$this$getItems","getItems","partialResult","deleteItems","db","mode","startDB","catch","storeType","INDEXEDDB","MemoryDbEventCountGuard","memoryItemHandlers","handleAbandonIfLimitWillExceedPolicy","handleEvictOldestIfLimitExceededPolicy","handleAddAsManyAsPossible","getItemCount","MEMORY","addItems","evictEventsIfNeeded","partialEventsToAdd","MemoryDb","memoryStore","storedValue","bulkAddItemsResult","insertItemsToMemoryStore","bulkAddItem","addOptions","bulkAddItemWrapperType","synchronousGetItems","wrappedItems","itemsToRemove","wrappedItem","_this$synchronousGetI","partialGetResult","ResilienceMechanism","NetworkStatusEnum","MetricsCollector","addToItemsDiscardedByRetryCounter","numberOfDeletedEvents","itemsDiscardedByRetry","addToEventCount","eventCount","addToItemsDiscardedByOverflowCounter","itemsDiscardedByOverflow","setResilienceMechanism","mechanism","resilienceMechanism","addToReclaimMetrics","reclaimMetrics","localstorageNumberOfFullReclaims","localstorageNumberOfPartialReclaims","localstorageNumberOfFailedReclaims","addToPurgedQueuesMetrics","numberOfQueuesPurged","localstorageNumberOfQueuesPurged","subtractFromMetrics","sentMetrics","subtractFromCount","localstorageQueuesPurged","subtract","getMetricsPayload","cachedMetricsClient","NetworkStatus","networkChangeCallback","OFFLINE","ONLINE","getNetworkStatus","navigator","onLine","CallbackStatus","CallbackEvent","CallbackWithTimeout","timeoutPeriod","IDLE","transitionCallbackStatus","currentStatus","TIMED_OUT","COMPLETED","EXECUTE","callbackStatus","RUNNING","COMPLETE","executeCallbackWithTimeout","onDone","onTimeout","timeoutHandle","cancelTimeout","getCallbackStatus","DoneState","QueuedScheduleTypes","Scheduler","retryOptions","immediate","operationInFlight","queuedSchedule","IMMEDIATE","WAIT","waitInterval","failureCount","run","scheduledTimeout","calculateBackoff","NONE","callbackTimer","ERROR","SUCCESS","processQueuedSchedule","schedule","minRetryDelay","maxRetryDelay","backoffFactor","backoffJitterPercentage","ms","rand","deviation","toPrecision","callbackTimeoutPeriod","ONE_MINUTE","LONG_POLLING_OPTIONS","flushWaitMs","PullBatchableQueue","resilience","getResilienceMechanism","_options$logger","addItem","runOrFailOver","processItems","runnable","failOver","oldResilience","newResilience","addedItemIds","maxItems","buildOptions","scheduler","flushBeforeUnload","scheduleCallback","longPollingScheduler","scheduleLongCallBack","metricsCollector","networkStatus","checkEventCountAndReschedule","flushCallback","batchFlushCallback","jsonStringifiedAndParsedItem","getGlobalRetryCount","getFailureCount","flush","batchFlushSize","NOOP","eventWaitingCount","queueStates","splitKeys","currentKeys","suffix","queuesToPurge","purgeOrphanedQueues","reclaimEvents","localStorageItems","localStorageItem","addedEvents","otherMetadata","msg","_metadata","failedAttempts","SegmentEventTypes","createOrGetAbortController","abortController","AbortController","getCorsForUrl","URL","location","credentials","AWCCookiesKeys","CookieSchema","getAttributes","getKey","AllAnalyticsCookies","AWC_TLD_TEST","secure","protocol","AWC_ANALYTICS_DEBUG","AJS_ANONYMOUS_ID","_data","GLOBAL_IN_MEMORY_NAME","isSupported","TEST_VALUE","SafeStorage","storageToUse","_store","createKey","quotaExceeded","code","number","isQuotaExceeded","swapToInMemory","InMemoryStorage","inMemoryStorage","getPrefix","_prefix","prefixes","useStoragePrefix","envPrefix","LocalStorageAlt","safeStorage","SafeLocalStorage","COOKIE_NAME","COOKIE_VALUE","getTld","hostname","splitHostname","domain","CookieWrapper","disableCookiePersistence","cookieLike","canUseCookie","SAFE","UNSAFE","LOCAL_STORAGE","User","getUserId","userId","setUserId","getAnonymousId","customAnonymousIdGenerator","getAnonymousIdFromLocalStorageAndUpdateCookieIfStale","getAnonymousIdFromCookieAndUpdateLocalStorage","generateNewAnonymousId","setAnonymousId","stringifyAnonymosId","lastAnonymousIdCookieUpdate","getAnonymousIdFromStorage","rawStorageAnonidValue","unsafeValue","parsedAnonId","localStorageValue","shouldUpdateCookie","cookieValue","newAnonId","prepareEventProperties","properties","propertiesWithoutUndefined","nestedRemoveUndefinedValues","clone","getValueOfObject","EventProcessor","_this$options","httpRetryCount","resilienceQueue","metricsPayload","metadata","eventsWithXID","attachXIDs","sentAt","toISOString","batchBody","batch","response","_createOrGetAbortCont","signal","corsOptions","fetch","headers","statusText","sendEvents","gasv3BatchUrl","requestTimeout","retryQueueOptions","user","xidPromiseCallback","xidPromiseGetter","apiHostProtocol","apiHost","retryQueuePrefix","getUser","eventWithoutMessageId","buildBaseEvent","TRACK","messageId","createMessageId","packagedEvent","packageEvent","PAGE","_identifier","IDENTIFY","traits","segmentContext","userAgent","xidItemPromiseCallback","xidCallback","Function","xid","attachXidToSingleEvent","attachXidToMultipleEvents","defaultHistoryReplaceFn","newUrl","history","replaceState","isCaptureParam","historyReplaceFn","originalUrl","fragmentHash","removedFragmentURL","captureParams","queryWithoutCaptureParams","omitBy","OriginTracing","originParamHandlerMapping","originParamLabelList","invalidParams","capturedURLParams","_","currentValue","_originStore","STARGATE_PROXY_PATH","selectHost","useStargate","useLegacyUrl","perimeter","envOverride","handleFedRampStagingSandboxStargate","host","handleFedRampStagingSandboxDirect","handleFedRampModerate","handleCommercial","SESSION_ID_STORAGE_KEY","SESSION_EXPIRY_STORAGE_KEY","ONLY_NUMBERS_REGEX","SessionTracking","newSessionId","_safeLocalStorage","_onNewSessionStarted","expiry","_sessionExpiryTime","currentExpiry","_updateSessionExpiry","_sessionExpiryDebounceThresholdPercentage","_sessionExpiryDebounceTimer","_sessionExpiryDebounce","sessionExpiryTime","sessionExpiryDebounce","sessionExpiryDebounceThresholdPercentage","onNewSessionStarted","getCurrentSessionId","sessionExpiry","_debouncedUpdateSessionExpiry","_generateNewSessionId","sessionStorage","STORAGE_KEY","TabTracking","newTabId","_safeSessionStorage","SafeSessionStorage","getCurrentTabId","_generateNewTabId","INIT_KEY","AWC_PARAM_PREFIX","TaskSessionStore","currentTimestamp","taskSessionName","newTaskSessions","currentState","getAllTaskSessions","newState","_writeToSessionStorage","taskSessionId","_appendTaskSessions","updatedState","_safelyRemoveKey","uri","includedTaskSessions","filteredTaskSessions","curr","queryWithTaskSessions","extractedTaskSessions","_isTaskSessionQueryParam","_removeTaskSessionPrefix","_currentTimestamp","_taskSessionsNotRecentlyInitialised","DEBUG_TAG","UIViewedEvent","getContext","settings","_startInterval","_stopInterval","_unbindEventListeners","_intervalId","_focusListener","_blurListener","clearInterval","setInterval","_handleInterval","_delay","productKey","_parseLocalStorageData","_storageKey","hasFocus","_getLastSentTimestamp","_throttle","_this$_getContext","_getContext","embeddedProduct","_product","isEmbeddedProduct","lastScreenEvent","_getProductKey","_setLastSentTimestamp","_createEvent","extraAttributes","embeddedInEnv","_productInfo","embeddedInProduct","embeddedInSubproduct","embeddedInVersion","embeddedInOrigin","embeddedInPlatform","throttle","storageKey","wrapCallback","XIDItemType","LAST_SCREEN_EVENT_STORAGE_KEY","AnalyticsWebClient","str","eventProcessor","createGetter","isEventHighPriority","eventDelayQueue","isDelayingLowPriorityEvents","track","page","identify","_changeInternalUserId","_fireEvent","_userInfo","_testingCache","saveEvent","_shouldEventBeDelayed","_delayEvent","_createEmbeddedProductGetter","resetUIViewedTimers","_createSubproductGetter","capturedOriginTraces","originTracing","handleOriginParameters","_historyReplaceFn","createTaskSessionWithProvidedId","originAttributes","originTracingAttributes","sendOperationalEvent","originTracesLanded","_tenantInfo","_orgInfo","_workspaceInfo","aliasKeyType","alias","_aliases","groupsKeyType","_groups","uiViewedAttributes","_uiViewedAttributes","setUserInfo","_processEvent","_context","sendScreenEvent","screenName","screenAttributes","screenContainers","screenTags","builtEventWithName","title","referrer","buildAttributes","buildNonPrivacySafeAttributes","buildScreenEvent","_tabTracking","_sessionTracking","_pageLoadId","_setLastScreenEvent","stopUIViewedEvent","_uiViewedEvent","_getLastScreenEvent","sendUIEvent","resetTimers","apdexEvent","_apdexEvent","startLowPriorityEventDelay","_analyticsId","analyticsData","sendTrackEvent","sendIdentifyEvent","screen","locale","density","devicePixelRatio","library","buildContext","_useStargate","flushWaitInterval","xidConsent","xidPromiseFn","timeoutPromise","XC","UID","xidPromise","race","XIDPromise","_fireDelayedEvent","delayQueueCompressors","testAnalytics","eventCache","_isDebugCookieEnabled","_shouldCacheEvent","_bind","_cache","getDebugCookie","envType","platformType","originType","tenantType","userType","apdexType","desktopPlatforms","freeze","DESKTOP","MAC","LINUX","WINDOWS","webPlatforms","WEB","MOBILE_WEB","originTracingType","objectValues","isType","perimeterType","aliasType","groupType","envOverrides","actionEventTypes","validateContainers","container","validateContainersObject","isActionEventType","validateActionEventType","validateActionEvent","validateScreenEvent","validateTrackEvent","validateDwellBaseEvent","validateUIEvent","validateOperationalEvent","validateIdentifyEvent","validatePlatform","isObjectObject","isPlainObject","ctor","prot","separator","separatorIndex","charCodeAt","toUpperCase","ExperienceTypes","ExperiencePerformanceTypes","visibilityChangeObserver","started","broadcast","UFOLogger","enabled","UFOprefix","enable","disable","ufologger","ufolog","ufowarn","UFOGlobalEventStreamEventType","PageVisibleState","SUBSCRIBE_ALL","TenantType","UFOGlobalEventStream","payload","publish","experienceId","eventPayload","_this$subscribers$eve","isInitialPageLoad","performanceType","PageLoad","initial","navigationMetrics","redirectStart","redirectEnd","fetchStart","domainLookupStart","domainLookupEnd","connectStart","connectEnd","secureConnectionStart","requestStart","responseStart","responseEnd","encodedBodySize","decodedBodySize","transferSize","redirectCount","unloadEventEnd","unloadEventStart","workerStart","appTimings","ssrConfig","explicitTimings","startMark","endMark","retrieveTimings","getTimings","ssrTimings","filterEntry","mapEntry","timingsApp","getWindowObject","getPerformanceObject","bundleEvalTimings","mapPerformanceMark","additionalTimings","resourceTimingBuffer","maxSize","transformResource","initiatorType","getPerformanceObserverObject","_performance$getEntri","resources","resource","addTimings","entryTypes","overflow","fieldsToRemove","cacheableTypes","resourceTypes","CACHE_NETWORK","evaluateAccessToResourceTimings","_url","getSizeObject","getNetworkData","eventStart","hasTimingHeaders","ttfb","hasAccessToResourceSize","transferType","calculateTransferType","resourceTimings","sanitiseEndpoints","getResourceTimings","resourceTiming","xhrFilter","reportedInitiatorTypes","mapResources","getHistogram","performanceConfig","isInitial","_data$performanceConf","histogram","histograms","PageSegmentLoad","histogramType","fmp","InlineResult","Custom","getPerformanceMetrics","_data$metrics$marks$f","fmpMark","getDoneMark","getLoadMetrics","responseMark","getInlineResultMetrics","getCustomMetrics","getPerformancePayload","bundleEvalConfig","resourceConfig","pageVisibleState","_data$pageVisibleStat","HIDDEN","VISIBLE","appVersion","pluginData","web","eventBrowserPlugin","_getWindowObject","_getWindowObject$navi","eventCpusPlugin","hardwareConcurrency","featureFlagClient","allFeatureFlags","initialMemo","memo","featureFlagKey","ffVal","getValue","eventMemoryPlugin","deviceMemory","ssrFeatureFlags","getFeatureFlags","Route","route","setRoute","newRoute","getRoute","UNKNOWN_VALUE","DEFAULT_PAYLOAD_DATA","schemaVersion","uuid","success","Experience","category","children","MIXED","isSSROutputAsFMP","payloadPublisher","_getWindowObject$loca","RealUser","plugins","plugin","pluginOutput","_getPerformanceObject","_getPerformanceObject2","payloadStart","experienceKey","getExperienceKey","allowlist","supportedData","region","connection","effectiveType","rtt","downlink","app","framework","mapMetadataToPayload","extractPageLoadData","payloadEnd","payloadTime","gasv3","setGlobalEventStream","globalThis","__UFO_GLOBAL_EVENT_STREAM__","earlyStream","stream","__buffer_only__","getStream","getGlobalEventStream","eventStream","_globalThis$__UFO_GLO","_globalThis$__UFO_GLO2","setup","keyParts","component","getExperiencePerformanceKey","getExperiencePerformanceType","getPluginsMetrics","initialized","sinkInteraction","payloadPackage","payloads","createPayloads","analyticsWebClientAsync","_config$vc","enableTTVC","awc","getAnalyticsWebClientPromise","client","getInstance","AWAITING_PAGELOAD_NAME","globalAnalyticsClient","shouldUseStargate","Environment","atlassianAccountId","_storage$getCookie","storage","analyticsClient","analyticsEnv","getEnvironment","enableNewEventSender","clearUserInfo","isInitialized","initUFO","_histogram","_defineProperty","transition","initReactUFO","enableCompleteUsingDoubleRAF","enableBetterPageVisibilityApi","page_load","hover","legacy","typing","press","namePrefix","segmentPrefix","pathname","activeInteraction","enabledBySamplingRate","newId","traceUFOPageLoad","getUFORouteName","v1","v4","byteToHex","substr","buf","bth","getRandomValues","crypto","msCrypto","rnds8","Uint8Array","rnds","_nodeId","_clockseq","rng","bytesToUuid","_lastMSecs","_lastNSecs","clockseq","seedBytes","msecs","nsecs","dt","tl","tmh","ii","configurable","writable","_objectWithoutProperties","excluded","sourceSymbolKeys","propertyIsEnumerable","_objectWithoutPropertiesLoose","sourceKeys","_toPropertyKey","arg","hint","prim","toPrimitive","res","_typeof"],"sourceRoot":""}