{"version":3,"file":"chunks/cf540b63b1567b.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/querystringify/index.js","webpack:///./node_modules/requires-port/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-resource-timing/dist/es2019/common/utils/config.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/utils/get-resource-config.ts","webpack:///./resources/js/react-ufo/utils/sanitise-asset-name.ts","webpack:///./node_modules/@atlassian/ufo-additional-payload/dist/es2019/utils/cache-hit-ratio/index.js","webpack:///./resources/js/react-ufo/utils/get-custom-data.ts","webpack:///./resources/js/react-ufo/init-ufo.ts","webpack:///./node_modules/url-parse/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","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?#&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encode(key);\n value = encode(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\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}","import { getConfig as getConfigUFO } from '@atlassian/ufo-config';\nconst defaultAllowedParams = ['operationName', 'operation', 'q'];\nconst getAllowedParams = () => {\n const config = getConfigUFO();\n return (config === null || config === void 0 ? void 0 : config.allowedResourcesParams) || defaultAllowedParams;\n};\nconst handleQueryParams = urlString => {\n try {\n if (typeof urlString !== 'string') {\n return urlString;\n }\n const url = new URL(urlString);\n const params = new URLSearchParams(url.search);\n const allowedParams = getAllowedParams();\n for (const [key] of params) {\n if (!allowedParams.includes(key)) {\n url.searchParams.delete(key);\n }\n }\n return url.toString();\n } catch (e) {\n return urlString;\n }\n};\nlet config = {\n mapResources: url => url,\n sanitiseEndpoints: url => {\n return handleQueryParams(url);\n }\n};\nexport function configure(resourceTimingConfig) {\n const newConfig = {\n mapResources: resourceTimingConfig.mapResources,\n sanitiseEndpoints: url => {\n const sanitised = resourceTimingConfig.sanitiseEndpoints(url);\n if (sanitised) {\n return handleQueryParams(sanitised);\n }\n return sanitised;\n }\n };\n config = newConfig;\n}\nexport const getConfig = () => config;","// 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 parse from \"url-parse\";\n\nimport { sanitiseAssetName } from \"./sanitise-asset-name\";\nimport { getEnvironment } from \"../../analytics/utils\";\n\nconst isDevelopment = getEnvironment() !== \"prod\";\n\n// Web Resource Manager (WRM)\n// https://developer.atlassian.com/server/framework/atlassian-sdk/WRM-resource-loading-phases/\nconst isWRMResource = (url: string) =>\n url.includes(\"/batch.js\") || url.includes(\"/batch.css\");\n\nconst getWRMAssetName = (url: string) => {\n const [, resources] = /\\/([\\w.\\-,:]*?)(?:,-|\\/batch\\.)/.exec(url) || [];\n const assetName = sanitiseAssetName(isDevelopment)(url);\n\n if (!resources) {\n return assetName;\n }\n\n return `wrm/${resources}/${assetName}`;\n};\n\nconst getFileName = (url: string) =>\n isWRMResource(url)\n ? getWRMAssetName(url) ?? null\n : sanitiseAssetName(isDevelopment)(url) ?? null;\n\nconst sanitiseEndpoints = (url: string) => {\n const parsedUrl = parse(url, true);\n return parsedUrl.pathname.replace(/\\/\\d+$/i, \"/\");\n};\n\nexport const resourceTimingsConfig = {\n sanitiseEndpoints,\n mapResources: getFileName,\n hasTimingHeaders: (url: string) => isWRMResource(url)\n};\n","const getBaseName = (assetPathOrURL: string) =>\n assetPathOrURL.split(\"#\")[0]?.split(\"?\")[0]?.split(\"/\").pop() ?? \"\";\n\n/**\n * Given an asset path or URL isolate the basename and remove the chunk hash and cache-bust integer.\n */\nexport const sanitiseAssetName =\n (isDevelopment: boolean) => (assetPathOrURL: string) => {\n const baseName = getBaseName(assetPathOrURL);\n\n // we desire \"[name.with.dots].[ext]\"\n // in debug we expect \"[name.with.dots].[ext]\"\n // in production we expect \"[name.with.dots].[hash].[cache-bust].[ext]\"\n const split = baseName.split(\".\");\n\n // CHANGED: Need to add to process.env.BUNDLER\n const BUNDLER = \"parcel\";\n if (BUNDLER === \"parcel\") {\n if (split.length === 1) {\n // Inline bundles are only an id\n return split[0];\n }\n // return the first part and extension - this should always be valid for Parcel bundles.\n // In the case of shared bundles (e.g. shared.hash.js) this will return 'shared.js'.\n // This will cause only the first shared bundle loaded to be tracked.\n // In the short term this is desired to prevent too much noise.\n return [split[0], split[split.length - 1]].join(\".\");\n }\n\n if (isDevelopment || split.length < 2) {\n return baseName;\n }\n // CHANGED\n const file = split.slice(0, 1);\n const extension = split.slice(-1);\n return `${file}.${extension}`;\n };\n","/* Borrowed from https://bitbucket.org/atlassian/atlassian-frontend/src/master/packages/performance/browser-metrics/src/plugins/timings/resource.ts */\nconst cacheableTypes = ['script', 'link'];\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};\nexport const getCacheHitRatio = ({\n start\n}) => {\n let fromCache = 0;\n let preloadFromCache = 0;\n let total = 0;\n let totalPreload = 0;\n\n // initial load only\n if (start !== 0) {\n return {};\n }\n try {\n for (const entry of performance.getEntriesByType('resource')) {\n // The BM3 resource timing collector checks for whether the timing information is available,\n // but we can make the assumption that it is for this Jira specific collector.\n const transferType = calculateTransferType(entry.initiatorType, entry.duration, entry.transferSize);\n const isPreload = entry.initiatorType === 'link';\n if (transferType === 'disk' || transferType === 'memory') {\n fromCache += 1;\n if (isPreload) {\n preloadFromCache += 1;\n }\n }\n if (transferType !== null) {\n total += 1;\n if (isPreload) {\n totalPreload += 1;\n }\n }\n }\n const result = {};\n if (total > 0) {\n result.cacheHitRatio = fromCache / total;\n }\n if (totalPreload > 0) {\n result.preloadCacheHitRatio = preloadFromCache / totalPreload;\n }\n return result;\n } catch (e) {\n return {};\n }\n};","import { version } from \"react\";\n\nimport { getCacheHitRatio } from \"@atlassian/ufo-additional-payload\";\nimport { AdditionalData } from \"@atlassian/ufo-config\";\nimport type { InteractionMetrics } from \"@atlassian/ufo-interaction-metrics\";\n\nexport function getCustomData(interaction: InteractionMetrics) {\n let customData: AdditionalData = {};\n const nextHopProtocol = performance\n .getEntriesByType(\"resource\")\n // @ts-expect-error - TS2339 - Property 'nextHopProtocol' does not exist on type 'PerformanceEntry'.\n .find(({ nextHopProtocol }) => !!nextHopProtocol);\n // @ts-expect-error - TS2339 - Property 'nextHopProtocol' does not exist on type 'PerformanceEntry'.\n customData.httpProtocol = nextHopProtocol?.nextHopProtocol ?? \"unknown\";\n\n const { start } = interaction;\n\n if (interaction.type === \"page_load\") {\n customData = {\n ...customData,\n ...getCacheHitRatio({ start }),\n \"app:framework:name\": \"react\",\n \"app:framework:version\": version\n };\n }\n return customData;\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 { configure as configureResourceTimings } from \"@atlassian/ufo-resource-timing\";\nimport traceUFOPageLoad from '@atlassian/ufo-trace-pageload';\n\nimport { analyticsClient } from '../analytics';\nimport { version } from \"react\";\nimport { resourceTimingsConfig } from \"./utils/get-resource-config\";\nimport { getCustomData } from \"./utils/get-custom-data\";\nimport { InteractionMetrics } from \"@atlassian/ufo-interaction-metrics\";\n\nlet isInitialized = false;\n\n\nfunction getAdditionalFields(interaction: InteractionMetrics) {\n try {\n return { custom: getCustomData(interaction) };\n } catch (error) {\n return {};\n }\n}\n\nexport function initUFO(): void {\n const globalAnalyticsClient = analyticsClient();\n payloadPublisher.setup({\n featureFlagClient: { getValue: () => true },\n product: \"marketing\",\n gasv3: globalAnalyticsClient,\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 && globalAnalyticsClient) {\n configureResourceTimings(resourceTimingsConfig);\n\n const config: Config = {\n product: 'marketing',\n region: 'unknown',\n enableCompleteUsingDoubleRAF: true,\n enableBetterPageVisibilityApi: true,\n additionalPayloadData: getAdditionalFields,\n kind: {\n page_load: 1,\n transition: 1,\n hover: 0,\n legacy: 1,\n typing: 0,\n press: 1,\n },\n namePrefix: \"magnolia.\",\n segmentPrefix: \"magnolia.\",\n vc: {\n enabled: true,\n heatmapSize: 200,\n oldDomUpdates: false,\n devToolsEnabled: true,\n selectorConfig: {\n id: false,\n role: true,\n className: true,\n testId: true\n }\n }\n }\n\n initReactUFO(Promise.resolve(analyticsClient()), config);\n // @ts-ignore\n const status = window.performance.getEntriesByType('navigation')[0]?.responseStatus;\n\n if (status === 200) {\n traceUFOPageLoad('all');\n }\n\n }\n isInitialized = true;\n}\n\nif (document.readyState !== \"loading\") {\n initUFO();\n} else {\n window.addEventListener(\"DOMContentLoaded\", () => initUFO);\n}\n","'use strict';\n\nvar required = require('requires-port')\n , qs = require('querystringify')\n , controlOrWhitespace = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n , CRHTLF = /[\\n\\r\\t]/g\n , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n , port = /:\\d+$/\n , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i\n , windowsDriveLetter = /^[a-zA-Z]:/;\n\n/**\n * Remove control characters and whitespace from the beginning of a string.\n *\n * @param {Object|String} str String to trim.\n * @returns {String} A new string representing `str` stripped of control\n * characters and whitespace from its beginning.\n * @public\n */\nfunction trimLeft(str) {\n return (str ? str : '').toString().replace(controlOrWhitespace, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n * indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n * the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n ['#', 'hash'], // Extract from the back.\n ['?', 'query'], // Extract from the back.\n function sanitize(address, url) { // Sanitize what is left of the address\n return isSpecial(url.protocol) ? address.replace(/\\\\/g, '/') : address;\n },\n ['/', 'pathname'], // Extract from the back.\n ['@', 'auth', 1], // Extract from the front.\n [NaN, 'host', undefined, 1, 1], // Set left over value.\n [/:(\\d*)$/, 'port', undefined, 1], // RegExp the back.\n [NaN, 'hostname', undefined, 1, 1] // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n var globalVar;\n\n if (typeof window !== 'undefined') globalVar = window;\n else if (typeof global !== 'undefined') globalVar = global;\n else if (typeof self !== 'undefined') globalVar = self;\n else globalVar = {};\n\n var location = globalVar.location || {};\n loc = loc || location;\n\n var finaldestination = {}\n , type = typeof loc\n , key;\n\n if ('blob:' === loc.protocol) {\n finaldestination = new Url(unescape(loc.pathname), {});\n } else if ('string' === type) {\n finaldestination = new Url(loc, {});\n for (key in ignore) delete finaldestination[key];\n } else if ('object' === type) {\n for (key in loc) {\n if (key in ignore) continue;\n finaldestination[key] = loc[key];\n }\n\n if (finaldestination.slashes === undefined) {\n finaldestination.slashes = slashes.test(loc.href);\n }\n }\n\n return finaldestination;\n}\n\n/**\n * Check whether a protocol scheme is special.\n *\n * @param {String} The protocol scheme of the URL\n * @return {Boolean} `true` if the protocol scheme is special, else `false`\n * @private\n */\nfunction isSpecial(scheme) {\n return (\n scheme === 'file:' ||\n scheme === 'ftp:' ||\n scheme === 'http:' ||\n scheme === 'https:' ||\n scheme === 'ws:' ||\n scheme === 'wss:'\n );\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @param {Object} location\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address, location) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n location = location || {};\n\n var match = protocolre.exec(address);\n var protocol = match[1] ? match[1].toLowerCase() : '';\n var forwardSlashes = !!match[2];\n var otherSlashes = !!match[3];\n var slashesCount = 0;\n var rest;\n\n if (forwardSlashes) {\n if (otherSlashes) {\n rest = match[2] + match[3] + match[4];\n slashesCount = match[2].length + match[3].length;\n } else {\n rest = match[2] + match[4];\n slashesCount = match[2].length;\n }\n } else {\n if (otherSlashes) {\n rest = match[3] + match[4];\n slashesCount = match[3].length;\n } else {\n rest = match[4]\n }\n }\n\n if (protocol === 'file:') {\n if (slashesCount >= 2) {\n rest = rest.slice(2);\n }\n } else if (isSpecial(protocol)) {\n rest = match[4];\n } else if (protocol) {\n if (forwardSlashes) {\n rest = rest.slice(2);\n }\n } else if (slashesCount >= 2 && isSpecial(location.protocol)) {\n rest = match[4];\n }\n\n return {\n protocol: protocol,\n slashes: forwardSlashes || isSpecial(protocol),\n slashesCount: slashesCount,\n rest: rest\n };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n if (relative === '') return base;\n\n var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n , i = path.length\n , last = path[i - 1]\n , unshift = false\n , up = 0;\n\n while (i--) {\n if (path[i] === '.') {\n path.splice(i, 1);\n } else if (path[i] === '..') {\n path.splice(i, 1);\n up++;\n } else if (up) {\n if (i === 0) unshift = true;\n path.splice(i, 1);\n up--;\n }\n }\n\n if (unshift) path.unshift('');\n if (last === '.' || last === '..') path.push('');\n\n return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n\n if (!(this instanceof Url)) {\n return new Url(address, location, parser);\n }\n\n var relative, extracted, parse, instruction, index, key\n , instructions = rules.slice()\n , type = typeof location\n , url = this\n , i = 0;\n\n //\n // The following if statements allows this module two have compatibility with\n // 2 different API:\n //\n // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n // where the boolean indicates that the query string should also be parsed.\n //\n // 2. The `URL` interface of the browser which accepts a URL, object as\n // arguments. The supplied object will be used as default values / fall-back\n // for relative paths.\n //\n if ('object' !== type && 'string' !== type) {\n parser = location;\n location = null;\n }\n\n if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n location = lolcation(location);\n\n //\n // Extract protocol information before running the instructions.\n //\n extracted = extractProtocol(address || '', location);\n relative = !extracted.protocol && !extracted.slashes;\n url.slashes = extracted.slashes || relative && location.slashes;\n url.protocol = extracted.protocol || location.protocol || '';\n address = extracted.rest;\n\n //\n // When the authority component is absent the URL starts with a path\n // component.\n //\n if (\n extracted.protocol === 'file:' && (\n extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||\n (!extracted.slashes &&\n (extracted.protocol ||\n extracted.slashesCount < 2 ||\n !isSpecial(url.protocol)))\n ) {\n instructions[3] = [/(.*)/, 'pathname'];\n }\n\n for (; i < instructions.length; i++) {\n instruction = instructions[i];\n\n if (typeof instruction === 'function') {\n address = instruction(address, url);\n continue;\n }\n\n parse = instruction[0];\n key = instruction[1];\n\n if (parse !== parse) {\n url[key] = address;\n } else if ('string' === typeof parse) {\n index = parse === '@'\n ? address.lastIndexOf(parse)\n : address.indexOf(parse);\n\n if (~index) {\n if ('number' === typeof instruction[2]) {\n url[key] = address.slice(0, index);\n address = address.slice(index + instruction[2]);\n } else {\n url[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else if ((index = parse.exec(address))) {\n url[key] = index[1];\n address = address.slice(0, index.index);\n }\n\n url[key] = url[key] || (\n relative && instruction[3] ? location[key] || '' : ''\n );\n\n //\n // Hostname, host and protocol should be lowercased so they can be used to\n // create a proper `origin`.\n //\n if (instruction[4]) url[key] = url[key].toLowerCase();\n }\n\n //\n // Also parse the supplied query string in to an object. If we're supplied\n // with a custom parser as function use that instead of the default build-in\n // parser.\n //\n if (parser) url.query = parser(url.query);\n\n //\n // If the URL is relative, resolve the pathname against the base URL.\n //\n if (\n relative\n && location.slashes\n && url.pathname.charAt(0) !== '/'\n && (url.pathname !== '' || location.pathname !== '')\n ) {\n url.pathname = resolve(url.pathname, location.pathname);\n }\n\n //\n // Default to a / for pathname if none exists. This normalizes the URL\n // to always have a /\n //\n if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {\n url.pathname = '/' + url.pathname;\n }\n\n //\n // We should not add port numbers if they are already the default port number\n // for a given protocol. As the host also contains the port number we're going\n // override it with the hostname which contains no port number.\n //\n if (!required(url.port, url.protocol)) {\n url.host = url.hostname;\n url.port = '';\n }\n\n //\n // Parse down the `auth` for the username and password.\n //\n url.username = url.password = '';\n\n if (url.auth) {\n index = url.auth.indexOf(':');\n\n if (~index) {\n url.username = url.auth.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = url.auth.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password))\n } else {\n url.username = encodeURIComponent(decodeURIComponent(url.auth));\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n }\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n //\n // The href is just the compiled result.\n //\n url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part Property we need to adjust.\n * @param {Mixed} value The newly assigned value.\n * @param {Boolean|Function} fn When setting the query, it will be the function\n * used to parse the query.\n * When setting the protocol, double slash will be\n * removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n var url = this;\n\n switch (part) {\n case 'query':\n if ('string' === typeof value && value.length) {\n value = (fn || qs.parse)(value);\n }\n\n url[part] = value;\n break;\n\n case 'port':\n url[part] = value;\n\n if (!required(value, url.protocol)) {\n url.host = url.hostname;\n url[part] = '';\n } else if (value) {\n url.host = url.hostname +':'+ value;\n }\n\n break;\n\n case 'hostname':\n url[part] = value;\n\n if (url.port) value += ':'+ url.port;\n url.host = value;\n break;\n\n case 'host':\n url[part] = value;\n\n if (port.test(value)) {\n value = value.split(':');\n url.port = value.pop();\n url.hostname = value.join(':');\n } else {\n url.hostname = value;\n url.port = '';\n }\n\n break;\n\n case 'protocol':\n url.protocol = value.toLowerCase();\n url.slashes = !fn;\n break;\n\n case 'pathname':\n case 'hash':\n if (value) {\n var char = part === 'pathname' ? '/' : '#';\n url[part] = value.charAt(0) !== char ? char + value : value;\n } else {\n url[part] = value;\n }\n break;\n\n case 'username':\n case 'password':\n url[part] = encodeURIComponent(value);\n break;\n\n case 'auth':\n var index = value.indexOf(':');\n\n if (~index) {\n url.username = value.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = value.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password));\n } else {\n url.username = encodeURIComponent(decodeURIComponent(value));\n }\n }\n\n for (var i = 0; i < rules.length; i++) {\n var ins = rules[i];\n\n if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n url.href = url.toString();\n\n return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n var query\n , url = this\n , host = url.host\n , protocol = url.protocol;\n\n if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n var result =\n protocol +\n ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');\n\n if (url.username) {\n result += url.username;\n if (url.password) result += ':'+ url.password;\n result += '@';\n } else if (url.password) {\n result += ':'+ url.password;\n result += '@';\n } else if (\n url.protocol !== 'file:' &&\n isSpecial(url.protocol) &&\n !host &&\n url.pathname !== '/'\n ) {\n //\n // Add back the empty userinfo, otherwise the original invalid URL\n // might be transformed into a valid one with `url.pathname` as host.\n //\n result += '@';\n }\n\n //\n // Trailing colon is removed from `url.host` when it is parsed. If it still\n // ends with a colon, then add back the trailing colon that was removed. This\n // prevents an invalid URL from being transformed into a valid one.\n //\n if (host[host.length - 1] === ':' || (port.test(url.hostname) && !url.port)) {\n host += ':';\n }\n\n result += host + url.pathname;\n\n query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n if (url.hash) result += url.hash;\n\n return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\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","has","prefix","pairs","part","parser","port","protocol","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","defaultAllowedParams","handleQueryParams","urlString","URL","params","URLSearchParams","allowedParams","allowedResourcesParams","getAllowedParams","searchParams","mapResources","sanitiseEndpoints","configure","resourceTimingConfig","sanitised","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","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","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","location","credentials","AWCCookiesKeys","CookieSchema","getAttributes","getKey","AllAnalyticsCookies","AWC_TLD_TEST","secure","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","getResourceTimings","resourceTiming","xhrFilter","reportedInitiatorTypes","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","getEnvironment","atlassianAccountId","_storage$getCookie","storage","analyticsClient","analyticsEnv","enableNewEventSender","clearUserInfo","isWRMResource","resourceTimingsConfig","pathname","_getWRMAssetName","_sanitiseAssetName","baseName","assetName","assetPathOrURL","_assetPathOrURL$split","_assetPathOrURL$split2","_assetPathOrURL$split3","getBaseName","getWRMAssetName","getCacheHitRatio","fromCache","preloadFromCache","totalPreload","isPreload","cacheHitRatio","preloadCacheHitRatio","getCustomData","_nextHopProtocol$next","nextHopProtocol","httpProtocol","isInitialized","getAdditionalFields","custom","initUFO","_histogram","_defineProperty","transition","configureResourceTimings","enableCompleteUsingDoubleRAF","enableBetterPageVisibilityApi","additionalPayloadData","page_load","hover","legacy","typing","press","namePrefix","segmentPrefix","initReactUFO","responseStatus","activeInteraction","enabledBySamplingRate","newId","traceUFOPageLoad","qs","controlOrWhitespace","CRHTLF","slashes","protocolre","windowsDriveLetter","trimLeft","address","isSpecial","ignore","lolcation","loc","self","finaldestination","Url","unescape","scheme","extractProtocol","rest","forwardSlashes","otherSlashes","slashesCount","relative","extracted","instruction","instructions","lastIndexOf","base","last","unshift","up","username","password","auth","char","ins","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":""}