dappros/ethora

View on GitHub
client-web/build/static/js/435.51d72b69.chunk.js.map

Summary

Maintainability
Test Coverage
{"version":3,"file":"static/js/435.51d72b69.chunk.js","mappings":"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","sources":["../node_modules/@firebase/util/src/crypt.ts","../node_modules/@firebase/util/src/environment.ts","../node_modules/@firebase/util/src/defaults.ts","../node_modules/@firebase/util/src/deferred.ts","../node_modules/@firebase/util/src/errors.ts","../node_modules/@firebase/util/src/obj.ts","../node_modules/@firebase/util/src/utf8.ts","../node_modules/@firebase/util/src/exponential_backoff.ts","../node_modules/@firebase/util/src/compat.ts","../node_modules/@mui/icons-material/ArrowDownward.js","../node_modules/@mui/icons-material/ArrowUpward.js","../node_modules/@mui/icons-material/QrCode.js","../node_modules/@mui/material/esm/Card/cardClasses.js","../node_modules/@mui/material/esm/Card/Card.js","../node_modules/@mui/material/esm/internal/svg-icons/Cancel.js","../node_modules/@mui/material/esm/Chip/chipClasses.js","../node_modules/@mui/material/esm/Chip/Chip.js","../node_modules/@mui/material/esm/ListItemText/ListItemText.js","../node_modules/@popperjs/core/lib/dom-utils/getWindow.js","../node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","../node_modules/@popperjs/core/lib/utils/math.js","../node_modules/@popperjs/core/lib/utils/userAgent.js","../node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","../node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","../node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","../node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","../node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","../node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","../node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","../node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","../node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","../node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","../node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","../node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","../node_modules/@popperjs/core/lib/enums.js","../node_modules/@popperjs/core/lib/utils/orderModifiers.js","../node_modules/@popperjs/core/lib/utils/debounce.js","../node_modules/@popperjs/core/lib/createPopper.js","../node_modules/@popperjs/core/lib/utils/mergeByName.js","../node_modules/@popperjs/core/lib/modifiers/eventListeners.js","../node_modules/@popperjs/core/lib/utils/getBasePlacement.js","../node_modules/@popperjs/core/lib/utils/getVariation.js","../node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","../node_modules/@popperjs/core/lib/utils/computeOffsets.js","../node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","../node_modules/@popperjs/core/lib/modifiers/computeStyles.js","../node_modules/@popperjs/core/lib/modifiers/offset.js","../node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","../node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","../node_modules/@popperjs/core/lib/dom-utils/contains.js","../node_modules/@popperjs/core/lib/utils/rectToClientRect.js","../node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","../node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","../node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","../node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","../node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","../node_modules/@popperjs/core/lib/utils/expandToHashMap.js","../node_modules/@popperjs/core/lib/utils/detectOverflow.js","../node_modules/@popperjs/core/lib/utils/within.js","../node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","../node_modules/@popperjs/core/lib/utils/getAltAxis.js","../node_modules/@popperjs/core/lib/modifiers/arrow.js","../node_modules/@popperjs/core/lib/modifiers/hide.js","../node_modules/@popperjs/core/lib/popper.js","../node_modules/@popperjs/core/lib/modifiers/applyStyles.js","../node_modules/@popperjs/core/lib/modifiers/flip.js","../node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","../node_modules/@mui/base/PopperUnstyled/popperUnstyledClasses.js","../node_modules/@mui/base/PopperUnstyled/PopperUnstyled.js","../node_modules/@mui/material/esm/Popper/Popper.js","../node_modules/@mui/material/esm/Tooltip/tooltipClasses.js","../node_modules/@mui/material/esm/Tooltip/Tooltip.js","../node_modules/@firebase/analytics/src/constants.ts","../node_modules/@firebase/analytics/src/logger.ts","../node_modules/@firebase/analytics/src/helpers.ts","../node_modules/@firebase/analytics/src/errors.ts","../node_modules/@firebase/analytics/src/get-config.ts","../node_modules/@firebase/analytics/src/functions.ts","../node_modules/@firebase/analytics/src/initialize-analytics.ts","../node_modules/@firebase/analytics/src/factory.ts","../node_modules/@firebase/analytics/src/api.ts","../node_modules/@firebase/analytics/src/index.ts","../node_modules/firebase/app/index.ts","../node_modules/@firebase/messaging/src/util/constants.ts","../node_modules/@firebase/messaging/src/interfaces/internal-message-payload.ts","../node_modules/@firebase/messaging/src/helpers/array-base64-translator.ts","../node_modules/@firebase/messaging/src/helpers/migrate-old-database.ts","../node_modules/@firebase/messaging/src/internals/idb-manager.ts","../node_modules/@firebase/messaging/src/util/errors.ts","../node_modules/@firebase/messaging/src/internals/requests.ts","../node_modules/@firebase/messaging/src/internals/token-manager.ts","../node_modules/@firebase/messaging/src/helpers/externalizePayload.ts","../node_modules/@firebase/messaging/src/helpers/is-console-message.ts","../node_modules/@firebase/messaging/src/helpers/logToFirelog.ts","../node_modules/@firebase/messaging/src/helpers/extract-app-config.ts","../node_modules/@firebase/messaging/src/messaging-service.ts","../node_modules/@firebase/messaging/src/helpers/registerDefaultSw.ts","../node_modules/@firebase/messaging/src/helpers/updateSwReg.ts","../node_modules/@firebase/messaging/src/helpers/updateVapidKey.ts","../node_modules/@firebase/messaging/src/api/getToken.ts","../node_modules/@firebase/messaging/src/helpers/logToScion.ts","../node_modules/@firebase/messaging/src/listeners/window-listener.ts","../node_modules/@firebase/messaging/src/helpers/register.ts","../node_modules/@firebase/messaging/src/api/isSupported.ts","../node_modules/@firebase/messaging/src/api/deleteToken.ts","../node_modules/@firebase/messaging/src/api.ts","../node_modules/react-image-crop/dist/ReactCrop.min.js","../node_modules/@firebase/app/src/platformLoggerService.ts","../node_modules/@firebase/app/src/logger.ts","../node_modules/@firebase/app/src/constants.ts","../node_modules/@firebase/app/src/internal.ts","../node_modules/@firebase/app/src/errors.ts","../node_modules/@firebase/app/src/firebaseApp.ts","../node_modules/@firebase/app/src/api.ts","../node_modules/@firebase/app/src/indexeddb.ts","../node_modules/@firebase/app/src/heartbeatService.ts","../node_modules/@firebase/app/src/registerCoreComponents.ts","../node_modules/@firebase/app/src/index.ts","../node_modules/@firebase/component/src/component.ts","../node_modules/@firebase/component/src/constants.ts","../node_modules/@firebase/component/src/provider.ts","../node_modules/@firebase/component/src/component_container.ts","../node_modules/@firebase/installations/src/util/constants.ts","../node_modules/@firebase/installations/src/util/errors.ts","../node_modules/@firebase/installations/src/functions/common.ts","../node_modules/@firebase/installations/src/functions/create-installation-request.ts","../node_modules/@firebase/installations/src/util/sleep.ts","../node_modules/@firebase/installations/src/helpers/generate-fid.ts","../node_modules/@firebase/installations/src/helpers/buffer-to-base64-url-safe.ts","../node_modules/@firebase/installations/src/util/get-key.ts","../node_modules/@firebase/installations/src/helpers/fid-changed.ts","../node_modules/@firebase/installations/src/helpers/idb-manager.ts","../node_modules/@firebase/installations/src/helpers/get-installation-entry.ts","../node_modules/@firebase/installations/src/functions/generate-auth-token-request.ts","../node_modules/@firebase/installations/src/helpers/refresh-auth-token.ts","../node_modules/@firebase/installations/src/api/get-token.ts","../node_modules/@firebase/installations/src/api/get-id.ts","../node_modules/@firebase/installations/src/functions/delete-installation-request.ts","../node_modules/@firebase/installations/src/helpers/extract-app-config.ts","../node_modules/@firebase/installations/src/functions/config.ts","../node_modules/@firebase/installations/src/index.ts","../node_modules/@firebase/logger/src/logger.ts","../node_modules/idb/build/wrap-idb-value.js","../node_modules/idb/build/index.js"],"sourcesContent":["/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst stringToByteArray = function (str: string): number[] {\n  // TODO(user): Use native implementations if/when available\n  const out: number[] = [];\n  let p = 0;\n  for (let i = 0; i < str.length; i++) {\n    let c = str.charCodeAt(i);\n    if (c < 128) {\n      out[p++] = c;\n    } else if (c < 2048) {\n      out[p++] = (c >> 6) | 192;\n      out[p++] = (c & 63) | 128;\n    } else if (\n      (c & 0xfc00) === 0xd800 &&\n      i + 1 < str.length &&\n      (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00\n    ) {\n      // Surrogate Pair\n      c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\n      out[p++] = (c >> 18) | 240;\n      out[p++] = ((c >> 12) & 63) | 128;\n      out[p++] = ((c >> 6) & 63) | 128;\n      out[p++] = (c & 63) | 128;\n    } else {\n      out[p++] = (c >> 12) | 224;\n      out[p++] = ((c >> 6) & 63) | 128;\n      out[p++] = (c & 63) | 128;\n    }\n  }\n  return out;\n};\n\n/**\n * Turns an array of numbers into the string given by the concatenation of the\n * characters to which the numbers correspond.\n * @param bytes Array of numbers representing characters.\n * @return Stringification of the array.\n */\nconst byteArrayToString = function (bytes: number[]): string {\n  // TODO(user): Use native implementations if/when available\n  const out: string[] = [];\n  let pos = 0,\n    c = 0;\n  while (pos < bytes.length) {\n    const c1 = bytes[pos++];\n    if (c1 < 128) {\n      out[c++] = String.fromCharCode(c1);\n    } else if (c1 > 191 && c1 < 224) {\n      const c2 = bytes[pos++];\n      out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));\n    } else if (c1 > 239 && c1 < 365) {\n      // Surrogate Pair\n      const c2 = bytes[pos++];\n      const c3 = bytes[pos++];\n      const c4 = bytes[pos++];\n      const u =\n        (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -\n        0x10000;\n      out[c++] = String.fromCharCode(0xd800 + (u >> 10));\n      out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\n    } else {\n      const c2 = bytes[pos++];\n      const c3 = bytes[pos++];\n      out[c++] = String.fromCharCode(\n        ((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)\n      );\n    }\n  }\n  return out.join('');\n};\n\ninterface Base64 {\n  byteToCharMap_: { [key: number]: string } | null;\n  charToByteMap_: { [key: string]: number } | null;\n  byteToCharMapWebSafe_: { [key: number]: string } | null;\n  charToByteMapWebSafe_: { [key: string]: number } | null;\n  ENCODED_VALS_BASE: string;\n  readonly ENCODED_VALS: string;\n  readonly ENCODED_VALS_WEBSAFE: string;\n  HAS_NATIVE_SUPPORT: boolean;\n  encodeByteArray(input: number[] | Uint8Array, webSafe?: boolean): string;\n  encodeString(input: string, webSafe?: boolean): string;\n  decodeString(input: string, webSafe: boolean): string;\n  decodeStringToByteArray(input: string, webSafe: boolean): number[];\n  init_(): void;\n}\n\n// We define it as an object literal instead of a class because a class compiled down to es5 can't\n// be treeshaked. https://github.com/rollup/rollup/issues/1691\n// Static lookup maps, lazily populated by init_()\nexport const base64: Base64 = {\n  /**\n   * Maps bytes to characters.\n   */\n  byteToCharMap_: null,\n\n  /**\n   * Maps characters to bytes.\n   */\n  charToByteMap_: null,\n\n  /**\n   * Maps bytes to websafe characters.\n   * @private\n   */\n  byteToCharMapWebSafe_: null,\n\n  /**\n   * Maps websafe characters to bytes.\n   * @private\n   */\n  charToByteMapWebSafe_: null,\n\n  /**\n   * Our default alphabet, shared between\n   * ENCODED_VALS and ENCODED_VALS_WEBSAFE\n   */\n  ENCODED_VALS_BASE:\n    'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',\n\n  /**\n   * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\n   */\n  get ENCODED_VALS() {\n    return this.ENCODED_VALS_BASE + '+/=';\n  },\n\n  /**\n   * Our websafe alphabet.\n   */\n  get ENCODED_VALS_WEBSAFE() {\n    return this.ENCODED_VALS_BASE + '-_.';\n  },\n\n  /**\n   * Whether this browser supports the atob and btoa functions. This extension\n   * started at Mozilla but is now implemented by many browsers. We use the\n   * ASSUME_* variables to avoid pulling in the full useragent detection library\n   * but still allowing the standard per-browser compilations.\n   *\n   */\n  HAS_NATIVE_SUPPORT: typeof atob === 'function',\n\n  /**\n   * Base64-encode an array of bytes.\n   *\n   * @param input An array of bytes (numbers with\n   *     value in [0, 255]) to encode.\n   * @param webSafe Boolean indicating we should use the\n   *     alternative alphabet.\n   * @return The base64 encoded string.\n   */\n  encodeByteArray(input: number[] | Uint8Array, webSafe?: boolean): string {\n    if (!Array.isArray(input)) {\n      throw Error('encodeByteArray takes an array as a parameter');\n    }\n\n    this.init_();\n\n    const byteToCharMap = webSafe\n      ? this.byteToCharMapWebSafe_!\n      : this.byteToCharMap_!;\n\n    const output = [];\n\n    for (let i = 0; i < input.length; i += 3) {\n      const byte1 = input[i];\n      const haveByte2 = i + 1 < input.length;\n      const byte2 = haveByte2 ? input[i + 1] : 0;\n      const haveByte3 = i + 2 < input.length;\n      const byte3 = haveByte3 ? input[i + 2] : 0;\n\n      const outByte1 = byte1 >> 2;\n      const outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\n      let outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);\n      let outByte4 = byte3 & 0x3f;\n\n      if (!haveByte3) {\n        outByte4 = 64;\n\n        if (!haveByte2) {\n          outByte3 = 64;\n        }\n      }\n\n      output.push(\n        byteToCharMap[outByte1],\n        byteToCharMap[outByte2],\n        byteToCharMap[outByte3],\n        byteToCharMap[outByte4]\n      );\n    }\n\n    return output.join('');\n  },\n\n  /**\n   * Base64-encode a string.\n   *\n   * @param input A string to encode.\n   * @param webSafe If true, we should use the\n   *     alternative alphabet.\n   * @return The base64 encoded string.\n   */\n  encodeString(input: string, webSafe?: boolean): string {\n    // Shortcut for Mozilla browsers that implement\n    // a native base64 encoder in the form of \"btoa/atob\"\n    if (this.HAS_NATIVE_SUPPORT && !webSafe) {\n      return btoa(input);\n    }\n    return this.encodeByteArray(stringToByteArray(input), webSafe);\n  },\n\n  /**\n   * Base64-decode a string.\n   *\n   * @param input to decode.\n   * @param webSafe True if we should use the\n   *     alternative alphabet.\n   * @return string representing the decoded value.\n   */\n  decodeString(input: string, webSafe: boolean): string {\n    // Shortcut for Mozilla browsers that implement\n    // a native base64 encoder in the form of \"btoa/atob\"\n    if (this.HAS_NATIVE_SUPPORT && !webSafe) {\n      return atob(input);\n    }\n    return byteArrayToString(this.decodeStringToByteArray(input, webSafe));\n  },\n\n  /**\n   * Base64-decode a string.\n   *\n   * In base-64 decoding, groups of four characters are converted into three\n   * bytes.  If the encoder did not apply padding, the input length may not\n   * be a multiple of 4.\n   *\n   * In this case, the last group will have fewer than 4 characters, and\n   * padding will be inferred.  If the group has one or two characters, it decodes\n   * to one byte.  If the group has three characters, it decodes to two bytes.\n   *\n   * @param input Input to decode.\n   * @param webSafe True if we should use the web-safe alphabet.\n   * @return bytes representing the decoded value.\n   */\n  decodeStringToByteArray(input: string, webSafe: boolean): number[] {\n    this.init_();\n\n    const charToByteMap = webSafe\n      ? this.charToByteMapWebSafe_!\n      : this.charToByteMap_!;\n\n    const output: number[] = [];\n\n    for (let i = 0; i < input.length; ) {\n      const byte1 = charToByteMap[input.charAt(i++)];\n\n      const haveByte2 = i < input.length;\n      const byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\n      ++i;\n\n      const haveByte3 = i < input.length;\n      const byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;\n      ++i;\n\n      const haveByte4 = i < input.length;\n      const byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;\n      ++i;\n\n      if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {\n        throw Error();\n      }\n\n      const outByte1 = (byte1 << 2) | (byte2 >> 4);\n      output.push(outByte1);\n\n      if (byte3 !== 64) {\n        const outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);\n        output.push(outByte2);\n\n        if (byte4 !== 64) {\n          const outByte3 = ((byte3 << 6) & 0xc0) | byte4;\n          output.push(outByte3);\n        }\n      }\n    }\n\n    return output;\n  },\n\n  /**\n   * Lazy static initialization function. Called before\n   * accessing any of the static map variables.\n   * @private\n   */\n  init_() {\n    if (!this.byteToCharMap_) {\n      this.byteToCharMap_ = {};\n      this.charToByteMap_ = {};\n      this.byteToCharMapWebSafe_ = {};\n      this.charToByteMapWebSafe_ = {};\n\n      // We want quick mappings back and forth, so we precompute two maps.\n      for (let i = 0; i < this.ENCODED_VALS.length; i++) {\n        this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);\n        this.charToByteMap_[this.byteToCharMap_[i]] = i;\n        this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);\n        this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;\n\n        // Be forgiving when decoding and correctly decode both encodings.\n        if (i >= this.ENCODED_VALS_BASE.length) {\n          this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;\n          this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;\n        }\n      }\n    }\n  }\n};\n\n/**\n * URL-safe base64 encoding\n */\nexport const base64Encode = function (str: string): string {\n  const utf8Bytes = stringToByteArray(str);\n  return base64.encodeByteArray(utf8Bytes, true);\n};\n\n/**\n * URL-safe base64 encoding (without \".\" padding in the end).\n * e.g. Used in JSON Web Token (JWT) parts.\n */\nexport const base64urlEncodeWithoutPadding = function (str: string): string {\n  // Use base64url encoding and remove padding in the end (dot characters).\n  return base64Encode(str).replace(/\\./g, '');\n};\n\n/**\n * URL-safe base64 decoding\n *\n * NOTE: DO NOT use the global atob() function - it does NOT support the\n * base64Url variant encoding.\n *\n * @param str To be decoded\n * @return Decoded result, if possible\n */\nexport const base64Decode = function (str: string): string | null {\n  try {\n    return base64.decodeString(str, true);\n  } catch (e) {\n    console.error('base64Decode failed: ', e);\n  }\n  return null;\n};\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CONSTANTS } from './constants';\n\n/**\n * Returns navigator.userAgent string or '' if it's not defined.\n * @return user agent string\n */\nexport function getUA(): string {\n  if (\n    typeof navigator !== 'undefined' &&\n    typeof navigator['userAgent'] === 'string'\n  ) {\n    return navigator['userAgent'];\n  } else {\n    return '';\n  }\n}\n\n/**\n * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\n *\n * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap\n * in the Ripple emulator) nor Cordova `onDeviceReady`, which would normally\n * wait for a callback.\n */\nexport function isMobileCordova(): boolean {\n  return (\n    typeof window !== 'undefined' &&\n    // @ts-ignore Setting up an broadly applicable index signature for Window\n    // just to deal with this case would probably be a bad idea.\n    !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\n    /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA())\n  );\n}\n\n/**\n * Detect Node.js.\n *\n * @return true if Node.js environment is detected.\n */\n// Node detection logic from: https://github.com/iliakan/detect-node/\nexport function isNode(): boolean {\n  try {\n    return (\n      Object.prototype.toString.call(global.process) === '[object process]'\n    );\n  } catch (e) {\n    return false;\n  }\n}\n\n/**\n * Detect Browser Environment\n */\nexport function isBrowser(): boolean {\n  return typeof self === 'object' && self.self === self;\n}\n\n/**\n * Detect browser extensions (Chrome and Firefox at least).\n */\ninterface BrowserRuntime {\n  id?: unknown;\n}\ndeclare const chrome: { runtime?: BrowserRuntime };\ndeclare const browser: { runtime?: BrowserRuntime };\nexport function isBrowserExtension(): boolean {\n  const runtime =\n    typeof chrome === 'object'\n      ? chrome.runtime\n      : typeof browser === 'object'\n      ? browser.runtime\n      : undefined;\n  return typeof runtime === 'object' && runtime.id !== undefined;\n}\n\n/**\n * Detect React Native.\n *\n * @return true if ReactNative environment is detected.\n */\nexport function isReactNative(): boolean {\n  return (\n    typeof navigator === 'object' && navigator['product'] === 'ReactNative'\n  );\n}\n\n/** Detects Electron apps. */\nexport function isElectron(): boolean {\n  return getUA().indexOf('Electron/') >= 0;\n}\n\n/** Detects Internet Explorer. */\nexport function isIE(): boolean {\n  const ua = getUA();\n  return ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\n}\n\n/** Detects Universal Windows Platform apps. */\nexport function isUWP(): boolean {\n  return getUA().indexOf('MSAppHost/') >= 0;\n}\n\n/**\n * Detect whether the current SDK build is the Node version.\n *\n * @return true if it's the Node SDK build.\n */\nexport function isNodeSdk(): boolean {\n  return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;\n}\n\n/** Returns true if we are running in Safari. */\nexport function isSafari(): boolean {\n  return (\n    !isNode() &&\n    navigator.userAgent.includes('Safari') &&\n    !navigator.userAgent.includes('Chrome')\n  );\n}\n\n/**\n * This method checks if indexedDB is supported by current browser/service worker context\n * @return true if indexedDB is supported by current browser/service worker context\n */\nexport function isIndexedDBAvailable(): boolean {\n  return typeof indexedDB === 'object';\n}\n\n/**\n * This method validates browser/sw context for indexedDB by opening a dummy indexedDB database and reject\n * if errors occur during the database open operation.\n *\n * @throws exception if current browser/sw context can't run idb.open (ex: Safari iframe, Firefox\n * private browsing)\n */\nexport function validateIndexedDBOpenable(): Promise<boolean> {\n  return new Promise((resolve, reject) => {\n    try {\n      let preExist: boolean = true;\n      const DB_CHECK_NAME =\n        'validate-browser-context-for-indexeddb-analytics-module';\n      const request = self.indexedDB.open(DB_CHECK_NAME);\n      request.onsuccess = () => {\n        request.result.close();\n        // delete database only when it doesn't pre-exist\n        if (!preExist) {\n          self.indexedDB.deleteDatabase(DB_CHECK_NAME);\n        }\n        resolve(true);\n      };\n      request.onupgradeneeded = () => {\n        preExist = false;\n      };\n\n      request.onerror = () => {\n        reject(request.error?.message || '');\n      };\n    } catch (error) {\n      reject(error);\n    }\n  });\n}\n\n/**\n *\n * This method checks whether cookie is enabled within current browser\n * @return true if cookie is enabled within current browser\n */\nexport function areCookiesEnabled(): boolean {\n  if (typeof navigator === 'undefined' || !navigator.cookieEnabled) {\n    return false;\n  }\n  return true;\n}\n\n/**\n * Polyfill for `globalThis` object.\n * @returns the `globalThis` object for the given environment.\n */\nexport function getGlobal(): typeof globalThis {\n  if (typeof self !== 'undefined') {\n    return self;\n  }\n  if (typeof window !== 'undefined') {\n    return window;\n  }\n  if (typeof global !== 'undefined') {\n    return global;\n  }\n  throw new Error('Unable to locate global object.');\n}\n","/**\n * @license\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { base64Decode } from './crypt';\nimport { getGlobal } from './environment';\n\n/**\n * Keys for experimental properties on the `FirebaseDefaults` object.\n * @public\n */\nexport type ExperimentalKey = 'authTokenSyncURL' | 'authIdTokenMaxAge';\n\n/**\n * An object that can be injected into the environment as __FIREBASE_DEFAULTS__,\n * either as a property of globalThis, a shell environment variable, or a\n * cookie.\n *\n * This object can be used to automatically configure and initialize\n * a Firebase app as well as any emulators.\n *\n * @public\n */\nexport interface FirebaseDefaults {\n  config?: Record<string, string>;\n  emulatorHosts?: Record<string, string>;\n  _authTokenSyncURL?: string;\n  _authIdTokenMaxAge?: number;\n  [key: string]: unknown;\n}\n\ndeclare global {\n  // Need `var` for this to work.\n  // eslint-disable-next-line no-var\n  var __FIREBASE_DEFAULTS__: FirebaseDefaults | undefined;\n}\n\nconst getDefaultsFromGlobal = (): FirebaseDefaults | undefined =>\n  getGlobal().__FIREBASE_DEFAULTS__;\n\n/**\n * Attempt to read defaults from a JSON string provided to\n * process.env.__FIREBASE_DEFAULTS__ or a JSON file whose path is in\n * process.env.__FIREBASE_DEFAULTS_PATH__\n */\nconst getDefaultsFromEnvVariable = (): FirebaseDefaults | undefined => {\n  if (typeof process === 'undefined' || typeof process.env === 'undefined') {\n    return;\n  }\n  const defaultsJsonString = process.env.__FIREBASE_DEFAULTS__;\n  if (defaultsJsonString) {\n    return JSON.parse(defaultsJsonString);\n  }\n};\n\nconst getDefaultsFromCookie = (): FirebaseDefaults | undefined => {\n  if (typeof document === 'undefined') {\n    return;\n  }\n  let match;\n  try {\n    match = document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/);\n  } catch (e) {\n    // Some environments such as Angular Universal SSR have a\n    // `document` object but error on accessing `document.cookie`.\n    return;\n  }\n  const decoded = match && base64Decode(match[1]);\n  return decoded && JSON.parse(decoded);\n};\n\n/**\n * Get the __FIREBASE_DEFAULTS__ object. It checks in order:\n * (1) if such an object exists as a property of `globalThis`\n * (2) if such an object was provided on a shell environment variable\n * (3) if such an object exists in a cookie\n */\nconst getDefaults = (): FirebaseDefaults | undefined => {\n  try {\n    return (\n      getDefaultsFromGlobal() ||\n      getDefaultsFromEnvVariable() ||\n      getDefaultsFromCookie()\n    );\n  } catch (e) {\n    /**\n     * Catch-all for being unable to get __FIREBASE_DEFAULTS__ due\n     * to any environment case we have not accounted for. Log to\n     * info instead of swallowing so we can find these unknown cases\n     * and add paths for them if needed.\n     */\n    console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`);\n    return;\n  }\n};\n\n/**\n * Returns emulator host stored in the __FIREBASE_DEFAULTS__ object\n * for the given product.\n * @returns a URL host formatted like `127.0.0.1:9999` or `[::1]:4000` if available\n * @public\n */\nexport const getDefaultEmulatorHost = (\n  productName: string\n): string | undefined => getDefaults()?.emulatorHosts?.[productName];\n\n/**\n * Returns emulator hostname and port stored in the __FIREBASE_DEFAULTS__ object\n * for the given product.\n * @returns a pair of hostname and port like `[\"::1\", 4000]` if available\n * @public\n */\nexport const getDefaultEmulatorHostnameAndPort = (\n  productName: string\n): [hostname: string, port: number] | undefined => {\n  const host = getDefaultEmulatorHost(productName);\n  if (!host) {\n    return undefined;\n  }\n  const separatorIndex = host.lastIndexOf(':'); // Finding the last since IPv6 addr also has colons.\n  if (separatorIndex <= 0 || separatorIndex + 1 === host.length) {\n    throw new Error(`Invalid host ${host} with no separate hostname and port!`);\n  }\n  // eslint-disable-next-line no-restricted-globals\n  const port = parseInt(host.substring(separatorIndex + 1), 10);\n  if (host[0] === '[') {\n    // Bracket-quoted `[ipv6addr]:port` => return \"ipv6addr\" (without brackets).\n    return [host.substring(1, separatorIndex - 1), port];\n  } else {\n    return [host.substring(0, separatorIndex), port];\n  }\n};\n\n/**\n * Returns Firebase app config stored in the __FIREBASE_DEFAULTS__ object.\n * @public\n */\nexport const getDefaultAppConfig = (): Record<string, string> | undefined =>\n  getDefaults()?.config;\n\n/**\n * Returns an experimental setting on the __FIREBASE_DEFAULTS__ object (properties\n * prefixed by \"_\")\n * @public\n */\nexport const getExperimentalSetting = <T extends ExperimentalKey>(\n  name: T\n): FirebaseDefaults[`_${T}`] =>\n  getDefaults()?.[`_${name}`] as FirebaseDefaults[`_${T}`];\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class Deferred<R> {\n  promise: Promise<R>;\n  reject: (value?: unknown) => void = () => {};\n  resolve: (value?: unknown) => void = () => {};\n  constructor() {\n    this.promise = new Promise((resolve, reject) => {\n      this.resolve = resolve as (value?: unknown) => void;\n      this.reject = reject as (value?: unknown) => void;\n    });\n  }\n\n  /**\n   * Our API internals are not promiseified and cannot because our callback APIs have subtle expectations around\n   * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\n   * and returns a node-style callback which will resolve or reject the Deferred's promise.\n   */\n  wrapCallback(\n    callback?: (error?: unknown, value?: unknown) => void\n  ): (error: unknown, value?: unknown) => void {\n    return (error, value?) => {\n      if (error) {\n        this.reject(error);\n      } else {\n        this.resolve(value);\n      }\n      if (typeof callback === 'function') {\n        // Attaching noop handler just in case developer wasn't expecting\n        // promises\n        this.promise.catch(() => {});\n\n        // Some of our callbacks don't expect a value and our own tests\n        // assert that the parameter length is 1\n        if (callback.length === 1) {\n          callback(error);\n        } else {\n          callback(error, value);\n        }\n      }\n    };\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Standardized Firebase Error.\n *\n * Usage:\n *\n *   // Typescript string literals for type-safe codes\n *   type Err =\n *     'unknown' |\n *     'object-not-found'\n *     ;\n *\n *   // Closure enum for type-safe error codes\n *   // at-enum {string}\n *   var Err = {\n *     UNKNOWN: 'unknown',\n *     OBJECT_NOT_FOUND: 'object-not-found',\n *   }\n *\n *   let errors: Map<Err, string> = {\n *     'generic-error': \"Unknown error\",\n *     'file-not-found': \"Could not find file: {$file}\",\n *   };\n *\n *   // Type-safe function - must pass a valid error code as param.\n *   let error = new ErrorFactory<Err>('service', 'Service', errors);\n *\n *   ...\n *   throw error.create(Err.GENERIC);\n *   ...\n *   throw error.create(Err.FILE_NOT_FOUND, {'file': fileName});\n *   ...\n *   // Service: Could not file file: foo.txt (service/file-not-found).\n *\n *   catch (e) {\n *     assert(e.message === \"Could not find file: foo.txt.\");\n *     if ((e as FirebaseError)?.code === 'service/file-not-found') {\n *       console.log(\"Could not read file: \" + e['file']);\n *     }\n *   }\n */\n\nexport type ErrorMap<ErrorCode extends string> = {\n  readonly [K in ErrorCode]: string;\n};\n\nconst ERROR_NAME = 'FirebaseError';\n\nexport interface StringLike {\n  toString(): string;\n}\n\nexport interface ErrorData {\n  [key: string]: unknown;\n}\n\n// Based on code from:\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types\nexport class FirebaseError extends Error {\n  /** The custom name for all FirebaseErrors. */\n  readonly name: string = ERROR_NAME;\n\n  constructor(\n    /** The error code for this error. */\n    readonly code: string,\n    message: string,\n    /** Custom data for this error. */\n    public customData?: Record<string, unknown>\n  ) {\n    super(message);\n\n    // Fix For ES5\n    // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n    Object.setPrototypeOf(this, FirebaseError.prototype);\n\n    // Maintains proper stack trace for where our error was thrown.\n    // Only available on V8.\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, ErrorFactory.prototype.create);\n    }\n  }\n}\n\nexport class ErrorFactory<\n  ErrorCode extends string,\n  ErrorParams extends { readonly [K in ErrorCode]?: ErrorData } = {}\n> {\n  constructor(\n    private readonly service: string,\n    private readonly serviceName: string,\n    private readonly errors: ErrorMap<ErrorCode>\n  ) {}\n\n  create<K extends ErrorCode>(\n    code: K,\n    ...data: K extends keyof ErrorParams ? [ErrorParams[K]] : []\n  ): FirebaseError {\n    const customData = (data[0] as ErrorData) || {};\n    const fullCode = `${this.service}/${code}`;\n    const template = this.errors[code];\n\n    const message = template ? replaceTemplate(template, customData) : 'Error';\n    // Service Name: Error message (service/code).\n    const fullMessage = `${this.serviceName}: ${message} (${fullCode}).`;\n\n    const error = new FirebaseError(fullCode, fullMessage, customData);\n\n    return error;\n  }\n}\n\nfunction replaceTemplate(template: string, data: ErrorData): string {\n  return template.replace(PATTERN, (_, key) => {\n    const value = data[key];\n    return value != null ? String(value) : `<${key}?>`;\n  });\n}\n\nconst PATTERN = /\\{\\$([^}]+)}/g;\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function contains<T extends object>(obj: T, key: string): boolean {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexport function safeGet<T extends object, K extends keyof T>(\n  obj: T,\n  key: K\n): T[K] | undefined {\n  if (Object.prototype.hasOwnProperty.call(obj, key)) {\n    return obj[key];\n  } else {\n    return undefined;\n  }\n}\n\nexport function isEmpty(obj: object): obj is {} {\n  for (const key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function map<K extends string, V, U>(\n  obj: { [key in K]: V },\n  fn: (value: V, key: K, obj: { [key in K]: V }) => U,\n  contextObj?: unknown\n): { [key in K]: U } {\n  const res: Partial<{ [key in K]: U }> = {};\n  for (const key in obj) {\n    if (Object.prototype.hasOwnProperty.call(obj, key)) {\n      res[key] = fn.call(contextObj, obj[key], key, obj);\n    }\n  }\n  return res as { [key in K]: U };\n}\n\n/**\n * Deep equal two objects. Support Arrays and Objects.\n */\nexport function deepEqual(a: object, b: object): boolean {\n  if (a === b) {\n    return true;\n  }\n\n  const aKeys = Object.keys(a);\n  const bKeys = Object.keys(b);\n  for (const k of aKeys) {\n    if (!bKeys.includes(k)) {\n      return false;\n    }\n\n    const aProp = (a as Record<string, unknown>)[k];\n    const bProp = (b as Record<string, unknown>)[k];\n    if (isObject(aProp) && isObject(bProp)) {\n      if (!deepEqual(aProp, bProp)) {\n        return false;\n      }\n    } else if (aProp !== bProp) {\n      return false;\n    }\n  }\n\n  for (const k of bKeys) {\n    if (!aKeys.includes(k)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction isObject(thing: unknown): thing is object {\n  return thing !== null && typeof thing === 'object';\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { assert } from './assert';\n\n// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they\n// automatically replaced '\\r\\n' with '\\n', and they didn't handle surrogate pairs,\n// so it's been modified.\n\n// Note that not all Unicode characters appear as single characters in JavaScript strings.\n// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters\n// use 2 characters in Javascript.  All 4-byte UTF-8 characters begin with a first\n// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate\n// pair).\n// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3\n\n/**\n * @param {string} str\n * @return {Array}\n */\nexport const stringToByteArray = function (str: string): number[] {\n  const out: number[] = [];\n  let p = 0;\n  for (let i = 0; i < str.length; i++) {\n    let c = str.charCodeAt(i);\n\n    // Is this the lead surrogate in a surrogate pair?\n    if (c >= 0xd800 && c <= 0xdbff) {\n      const high = c - 0xd800; // the high 10 bits.\n      i++;\n      assert(i < str.length, 'Surrogate pair missing trail surrogate.');\n      const low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.\n      c = 0x10000 + (high << 10) + low;\n    }\n\n    if (c < 128) {\n      out[p++] = c;\n    } else if (c < 2048) {\n      out[p++] = (c >> 6) | 192;\n      out[p++] = (c & 63) | 128;\n    } else if (c < 65536) {\n      out[p++] = (c >> 12) | 224;\n      out[p++] = ((c >> 6) & 63) | 128;\n      out[p++] = (c & 63) | 128;\n    } else {\n      out[p++] = (c >> 18) | 240;\n      out[p++] = ((c >> 12) & 63) | 128;\n      out[p++] = ((c >> 6) & 63) | 128;\n      out[p++] = (c & 63) | 128;\n    }\n  }\n  return out;\n};\n\n/**\n * Calculate length without actually converting; useful for doing cheaper validation.\n * @param {string} str\n * @return {number}\n */\nexport const stringLength = function (str: string): number {\n  let p = 0;\n  for (let i = 0; i < str.length; i++) {\n    const c = str.charCodeAt(i);\n    if (c < 128) {\n      p++;\n    } else if (c < 2048) {\n      p += 2;\n    } else if (c >= 0xd800 && c <= 0xdbff) {\n      // Lead surrogate of a surrogate pair.  The pair together will take 4 bytes to represent.\n      p += 4;\n      i++; // skip trail surrogate.\n    } else {\n      p += 3;\n    }\n  }\n  return p;\n};\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * The amount of milliseconds to exponentially increase.\n */\nconst DEFAULT_INTERVAL_MILLIS = 1000;\n\n/**\n * The factor to backoff by.\n * Should be a number greater than 1.\n */\nconst DEFAULT_BACKOFF_FACTOR = 2;\n\n/**\n * The maximum milliseconds to increase to.\n *\n * <p>Visible for testing\n */\nexport const MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android.\n\n/**\n * The percentage of backoff time to randomize by.\n * See\n * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic\n * for context.\n *\n * <p>Visible for testing\n */\nexport const RANDOM_FACTOR = 0.5;\n\n/**\n * Based on the backoff method from\n * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.\n * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.\n */\nexport function calculateBackoffMillis(\n  backoffCount: number,\n  intervalMillis: number = DEFAULT_INTERVAL_MILLIS,\n  backoffFactor: number = DEFAULT_BACKOFF_FACTOR\n): number {\n  // Calculates an exponentially increasing value.\n  // Deviation: calculates value from count and a constant interval, so we only need to save value\n  // and count to restore state.\n  const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount);\n\n  // A random \"fuzz\" to avoid waves of retries.\n  // Deviation: randomFactor is required.\n  const randomWait = Math.round(\n    // A fraction of the backoff value to add/subtract.\n    // Deviation: changes multiplication order to improve readability.\n    RANDOM_FACTOR *\n      currBaseValue *\n      // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines\n      // if we add or subtract.\n      (Math.random() - 0.5) *\n      2\n  );\n\n  // Limits backoff to max to avoid effectively permanent backoff.\n  return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);\n}\n","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport interface Compat<T> {\n  _delegate: T;\n}\n\nexport function getModularInstance<ExpService>(\n  service: Compat<ExpService> | ExpService\n): ExpService {\n  if (service && (service as Compat<ExpService>)._delegate) {\n    return (service as Compat<ExpService>)._delegate;\n  } else {\n    return service as ExpService;\n  }\n}\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _jsxRuntime = require(\"react/jsx-runtime\");\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n  d: \"m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z\"\n}), 'ArrowDownward');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _jsxRuntime = require(\"react/jsx-runtime\");\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n  d: \"m4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z\"\n}), 'ArrowUpward');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _jsxRuntime = require(\"react/jsx-runtime\");\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/(0, _jsxRuntime.jsx)(\"path\", {\n  d: \"M3 11h8V3H3v8zm2-6h4v4H5V5zM3 21h8v-8H3v8zm2-6h4v4H5v-4zm8-12v8h8V3h-8zm6 6h-4V5h4v4zm0 10h2v2h-2zm-6-6h2v2h-2zm2 2h2v2h-2zm-2 2h2v2h-2zm2 2h2v2h-2zm2-2h2v2h-2zm0-4h2v2h-2zm2 2h2v2h-2z\"\n}), 'QrCode');\n\nexports.default = _default;","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getCardUtilityClass(slot) {\n  return generateUtilityClass('MuiCard', slot);\n}\nconst cardClasses = generateUtilityClasses('MuiCard', ['root']);\nexport default cardClasses;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"className\", \"raised\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { chainPropTypes } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport styled from '../styles/styled';\nimport useThemeProps from '../styles/useThemeProps';\nimport Paper from '../Paper';\nimport { getCardUtilityClass } from './cardClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root']\n  };\n  return composeClasses(slots, getCardUtilityClass, classes);\n};\nconst CardRoot = styled(Paper, {\n  name: 'MuiCard',\n  slot: 'Root',\n  overridesResolver: (props, styles) => styles.root\n})(() => {\n  return {\n    overflow: 'hidden'\n  };\n});\nconst Card = /*#__PURE__*/React.forwardRef(function Card(inProps, ref) {\n  const props = useThemeProps({\n    props: inProps,\n    name: 'MuiCard'\n  });\n  const {\n      className,\n      raised = false\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const ownerState = _extends({}, props, {\n    raised\n  });\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(CardRoot, _extends({\n    className: clsx(classes.root, className),\n    elevation: raised ? 8 : undefined,\n    ref: ref,\n    ownerState: ownerState\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Card.propTypes /* remove-proptypes */ = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, the card will use raised styling.\n   * @default false\n   */\n  raised: chainPropTypes(PropTypes.bool, props => {\n    if (props.raised && props.variant === 'outlined') {\n      return new Error('MUI: Combining `raised={true}` with `variant=\"outlined\"` has no effect.');\n    }\n    return null;\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default Card;","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon( /*#__PURE__*/_jsx(\"path\", {\n  d: \"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z\"\n}), 'Cancel');","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getChipUtilityClass(slot) {\n  return generateUtilityClass('MuiChip', slot);\n}\nconst chipClasses = generateUtilityClasses('MuiChip', ['root', 'sizeSmall', 'sizeMedium', 'colorError', 'colorInfo', 'colorPrimary', 'colorSecondary', 'colorSuccess', 'colorWarning', 'disabled', 'clickable', 'clickableColorPrimary', 'clickableColorSecondary', 'deletable', 'deletableColorPrimary', 'deletableColorSecondary', 'outlined', 'filled', 'outlinedPrimary', 'outlinedSecondary', 'filledPrimary', 'filledSecondary', 'avatar', 'avatarSmall', 'avatarMedium', 'avatarColorPrimary', 'avatarColorSecondary', 'icon', 'iconSmall', 'iconMedium', 'iconColorPrimary', 'iconColorSecondary', 'label', 'labelSmall', 'labelMedium', 'deleteIcon', 'deleteIconSmall', 'deleteIconMedium', 'deleteIconColorPrimary', 'deleteIconColorSecondary', 'deleteIconOutlinedColorPrimary', 'deleteIconOutlinedColorSecondary', 'deleteIconFilledColorPrimary', 'deleteIconFilledColorSecondary', 'focusVisible']);\nexport default chipClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"avatar\", \"className\", \"clickable\", \"color\", \"component\", \"deleteIcon\", \"disabled\", \"icon\", \"label\", \"onClick\", \"onDelete\", \"onKeyDown\", \"onKeyUp\", \"size\", \"variant\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport { alpha } from '@mui/system';\nimport CancelIcon from '../internal/svg-icons/Cancel';\nimport useForkRef from '../utils/useForkRef';\nimport unsupportedProp from '../utils/unsupportedProp';\nimport capitalize from '../utils/capitalize';\nimport ButtonBase from '../ButtonBase';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled from '../styles/styled';\nimport chipClasses, { getChipUtilityClass } from './chipClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    disabled,\n    size,\n    color,\n    iconColor,\n    onDelete,\n    clickable,\n    variant\n  } = ownerState;\n  const slots = {\n    root: ['root', variant, disabled && 'disabled', `size${capitalize(size)}`, `color${capitalize(color)}`, clickable && 'clickable', clickable && `clickableColor${capitalize(color)}`, onDelete && 'deletable', onDelete && `deletableColor${capitalize(color)}`, `${variant}${capitalize(color)}`],\n    label: ['label', `label${capitalize(size)}`],\n    avatar: ['avatar', `avatar${capitalize(size)}`, `avatarColor${capitalize(color)}`],\n    icon: ['icon', `icon${capitalize(size)}`, `iconColor${capitalize(iconColor)}`],\n    deleteIcon: ['deleteIcon', `deleteIcon${capitalize(size)}`, `deleteIconColor${capitalize(color)}`, `deleteIcon${capitalize(variant)}Color${capitalize(color)}`]\n  };\n  return composeClasses(slots, getChipUtilityClass, classes);\n};\nconst ChipRoot = styled('div', {\n  name: 'MuiChip',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    const {\n      color,\n      iconColor,\n      clickable,\n      onDelete,\n      size,\n      variant\n    } = ownerState;\n    return [{\n      [`& .${chipClasses.avatar}`]: styles.avatar\n    }, {\n      [`& .${chipClasses.avatar}`]: styles[`avatar${capitalize(size)}`]\n    }, {\n      [`& .${chipClasses.avatar}`]: styles[`avatarColor${capitalize(color)}`]\n    }, {\n      [`& .${chipClasses.icon}`]: styles.icon\n    }, {\n      [`& .${chipClasses.icon}`]: styles[`icon${capitalize(size)}`]\n    }, {\n      [`& .${chipClasses.icon}`]: styles[`iconColor${capitalize(iconColor)}`]\n    }, {\n      [`& .${chipClasses.deleteIcon}`]: styles.deleteIcon\n    }, {\n      [`& .${chipClasses.deleteIcon}`]: styles[`deleteIcon${capitalize(size)}`]\n    }, {\n      [`& .${chipClasses.deleteIcon}`]: styles[`deleteIconColor${capitalize(color)}`]\n    }, {\n      [`& .${chipClasses.deleteIcon}`]: styles[`deleteIcon${capitalize(variant)}Color${capitalize(color)}`]\n    }, styles.root, styles[`size${capitalize(size)}`], styles[`color${capitalize(color)}`], clickable && styles.clickable, clickable && color !== 'default' && styles[`clickableColor${capitalize(color)})`], onDelete && styles.deletable, onDelete && color !== 'default' && styles[`deletableColor${capitalize(color)}`], styles[variant], styles[`${variant}${capitalize(color)}`]];\n  }\n})(({\n  theme,\n  ownerState\n}) => {\n  const deleteIconColor = alpha(theme.palette.text.primary, 0.26);\n  const textColor = theme.palette.mode === 'light' ? theme.palette.grey[700] : theme.palette.grey[300];\n  return _extends({\n    maxWidth: '100%',\n    fontFamily: theme.typography.fontFamily,\n    fontSize: theme.typography.pxToRem(13),\n    display: 'inline-flex',\n    alignItems: 'center',\n    justifyContent: 'center',\n    height: 32,\n    color: (theme.vars || theme).palette.text.primary,\n    backgroundColor: (theme.vars || theme).palette.action.selected,\n    borderRadius: 32 / 2,\n    whiteSpace: 'nowrap',\n    transition: theme.transitions.create(['background-color', 'box-shadow']),\n    // label will inherit this from root, then `clickable` class overrides this for both\n    cursor: 'default',\n    // We disable the focus ring for mouse, touch and keyboard users.\n    outline: 0,\n    textDecoration: 'none',\n    border: 0,\n    // Remove `button` border\n    padding: 0,\n    // Remove `button` padding\n    verticalAlign: 'middle',\n    boxSizing: 'border-box',\n    [`&.${chipClasses.disabled}`]: {\n      opacity: (theme.vars || theme).palette.action.disabledOpacity,\n      pointerEvents: 'none'\n    },\n    [`& .${chipClasses.avatar}`]: {\n      marginLeft: 5,\n      marginRight: -6,\n      width: 24,\n      height: 24,\n      color: theme.vars ? theme.vars.palette.Chip.defaultAvatarColor : textColor,\n      fontSize: theme.typography.pxToRem(12)\n    },\n    [`& .${chipClasses.avatarColorPrimary}`]: {\n      color: (theme.vars || theme).palette.primary.contrastText,\n      backgroundColor: (theme.vars || theme).palette.primary.dark\n    },\n    [`& .${chipClasses.avatarColorSecondary}`]: {\n      color: (theme.vars || theme).palette.secondary.contrastText,\n      backgroundColor: (theme.vars || theme).palette.secondary.dark\n    },\n    [`& .${chipClasses.avatarSmall}`]: {\n      marginLeft: 4,\n      marginRight: -4,\n      width: 18,\n      height: 18,\n      fontSize: theme.typography.pxToRem(10)\n    },\n    [`& .${chipClasses.icon}`]: _extends({\n      marginLeft: 5,\n      marginRight: -6\n    }, ownerState.size === 'small' && {\n      fontSize: 18,\n      marginLeft: 4,\n      marginRight: -4\n    }, ownerState.iconColor === ownerState.color && _extends({\n      color: theme.vars ? theme.vars.palette.Chip.defaultIconColor : textColor\n    }, ownerState.color !== 'default' && {\n      color: 'inherit'\n    })),\n    [`& .${chipClasses.deleteIcon}`]: _extends({\n      WebkitTapHighlightColor: 'transparent',\n      color: theme.vars ? `rgba(${theme.vars.palette.text.primaryChannel} / 0.26)` : deleteIconColor,\n      fontSize: 22,\n      cursor: 'pointer',\n      margin: '0 5px 0 -6px',\n      '&:hover': {\n        color: theme.vars ? `rgba(${theme.vars.palette.text.primaryChannel} / 0.4)` : alpha(deleteIconColor, 0.4)\n      }\n    }, ownerState.size === 'small' && {\n      fontSize: 16,\n      marginRight: 4,\n      marginLeft: -4\n    }, ownerState.color !== 'default' && {\n      color: theme.vars ? `rgba(${theme.vars.palette[ownerState.color].contrastTextChannel} / 0.7)` : alpha(theme.palette[ownerState.color].contrastText, 0.7),\n      '&:hover, &:active': {\n        color: (theme.vars || theme).palette[ownerState.color].contrastText\n      }\n    })\n  }, ownerState.size === 'small' && {\n    height: 24\n  }, ownerState.color !== 'default' && {\n    backgroundColor: (theme.vars || theme).palette[ownerState.color].main,\n    color: (theme.vars || theme).palette[ownerState.color].contrastText\n  }, ownerState.onDelete && {\n    [`&.${chipClasses.focusVisible}`]: {\n      backgroundColor: theme.vars ? `rgba(${theme.vars.palette.action.selectedChannel} / calc(${theme.vars.palette.action.selectedOpacity + theme.vars.palette.action.focusOpacity}))` : alpha(theme.palette.action.selected, theme.palette.action.selectedOpacity + theme.palette.action.focusOpacity)\n    }\n  }, ownerState.onDelete && ownerState.color !== 'default' && {\n    [`&.${chipClasses.focusVisible}`]: {\n      backgroundColor: (theme.vars || theme).palette[ownerState.color].dark\n    }\n  });\n}, ({\n  theme,\n  ownerState\n}) => _extends({}, ownerState.clickable && {\n  userSelect: 'none',\n  WebkitTapHighlightColor: 'transparent',\n  cursor: 'pointer',\n  '&:hover': {\n    backgroundColor: theme.vars ? `rgba(${theme.vars.palette.action.selectedChannel} / calc(${theme.vars.palette.action.selectedOpacity + theme.vars.palette.action.hoverOpacity}))` : alpha(theme.palette.action.selected, theme.palette.action.selectedOpacity + theme.palette.action.hoverOpacity)\n  },\n  [`&.${chipClasses.focusVisible}`]: {\n    backgroundColor: theme.vars ? `rgba(${theme.vars.palette.action.selectedChannel} / calc(${theme.vars.palette.action.selectedOpacity + theme.vars.palette.action.focusOpacity}))` : alpha(theme.palette.action.selected, theme.palette.action.selectedOpacity + theme.palette.action.focusOpacity)\n  },\n  '&:active': {\n    boxShadow: (theme.vars || theme).shadows[1]\n  }\n}, ownerState.clickable && ownerState.color !== 'default' && {\n  [`&:hover, &.${chipClasses.focusVisible}`]: {\n    backgroundColor: (theme.vars || theme).palette[ownerState.color].dark\n  }\n}), ({\n  theme,\n  ownerState\n}) => _extends({}, ownerState.variant === 'outlined' && {\n  backgroundColor: 'transparent',\n  border: theme.vars ? `1px solid ${theme.vars.palette.Chip.defaultBorder}` : `1px solid ${theme.palette.mode === 'light' ? theme.palette.grey[400] : theme.palette.grey[700]}`,\n  [`&.${chipClasses.clickable}:hover`]: {\n    backgroundColor: (theme.vars || theme).palette.action.hover\n  },\n  [`&.${chipClasses.focusVisible}`]: {\n    backgroundColor: (theme.vars || theme).palette.action.focus\n  },\n  [`& .${chipClasses.avatar}`]: {\n    marginLeft: 4\n  },\n  [`& .${chipClasses.avatarSmall}`]: {\n    marginLeft: 2\n  },\n  [`& .${chipClasses.icon}`]: {\n    marginLeft: 4\n  },\n  [`& .${chipClasses.iconSmall}`]: {\n    marginLeft: 2\n  },\n  [`& .${chipClasses.deleteIcon}`]: {\n    marginRight: 5\n  },\n  [`& .${chipClasses.deleteIconSmall}`]: {\n    marginRight: 3\n  }\n}, ownerState.variant === 'outlined' && ownerState.color !== 'default' && {\n  color: (theme.vars || theme).palette[ownerState.color].main,\n  border: `1px solid ${theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / 0.7)` : alpha(theme.palette[ownerState.color].main, 0.7)}`,\n  [`&.${chipClasses.clickable}:hover`]: {\n    backgroundColor: theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / ${theme.vars.palette.action.hoverOpacity})` : alpha(theme.palette[ownerState.color].main, theme.palette.action.hoverOpacity)\n  },\n  [`&.${chipClasses.focusVisible}`]: {\n    backgroundColor: theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / ${theme.vars.palette.action.focusOpacity})` : alpha(theme.palette[ownerState.color].main, theme.palette.action.focusOpacity)\n  },\n  [`& .${chipClasses.deleteIcon}`]: {\n    color: theme.vars ? `rgba(${theme.vars.palette[ownerState.color].mainChannel} / 0.7)` : alpha(theme.palette[ownerState.color].main, 0.7),\n    '&:hover, &:active': {\n      color: (theme.vars || theme).palette[ownerState.color].main\n    }\n  }\n}));\nconst ChipLabel = styled('span', {\n  name: 'MuiChip',\n  slot: 'Label',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    const {\n      size\n    } = ownerState;\n    return [styles.label, styles[`label${capitalize(size)}`]];\n  }\n})(({\n  ownerState\n}) => _extends({\n  overflow: 'hidden',\n  textOverflow: 'ellipsis',\n  paddingLeft: 12,\n  paddingRight: 12,\n  whiteSpace: 'nowrap'\n}, ownerState.size === 'small' && {\n  paddingLeft: 8,\n  paddingRight: 8\n}));\nfunction isDeleteKeyboardEvent(keyboardEvent) {\n  return keyboardEvent.key === 'Backspace' || keyboardEvent.key === 'Delete';\n}\n\n/**\n * Chips represent complex entities in small blocks, such as a contact.\n */\nconst Chip = /*#__PURE__*/React.forwardRef(function Chip(inProps, ref) {\n  const props = useThemeProps({\n    props: inProps,\n    name: 'MuiChip'\n  });\n  const {\n      avatar: avatarProp,\n      className,\n      clickable: clickableProp,\n      color = 'default',\n      component: ComponentProp,\n      deleteIcon: deleteIconProp,\n      disabled = false,\n      icon: iconProp,\n      label,\n      onClick,\n      onDelete,\n      onKeyDown,\n      onKeyUp,\n      size = 'medium',\n      variant = 'filled'\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const chipRef = React.useRef(null);\n  const handleRef = useForkRef(chipRef, ref);\n  const handleDeleteIconClick = event => {\n    // Stop the event from bubbling up to the `Chip`\n    event.stopPropagation();\n    if (onDelete) {\n      onDelete(event);\n    }\n  };\n  const handleKeyDown = event => {\n    // Ignore events from children of `Chip`.\n    if (event.currentTarget === event.target && isDeleteKeyboardEvent(event)) {\n      // Will be handled in keyUp, otherwise some browsers\n      // might init navigation\n      event.preventDefault();\n    }\n    if (onKeyDown) {\n      onKeyDown(event);\n    }\n  };\n  const handleKeyUp = event => {\n    // Ignore events from children of `Chip`.\n    if (event.currentTarget === event.target) {\n      if (onDelete && isDeleteKeyboardEvent(event)) {\n        onDelete(event);\n      } else if (event.key === 'Escape' && chipRef.current) {\n        chipRef.current.blur();\n      }\n    }\n    if (onKeyUp) {\n      onKeyUp(event);\n    }\n  };\n  const clickable = clickableProp !== false && onClick ? true : clickableProp;\n  const component = clickable || onDelete ? ButtonBase : ComponentProp || 'div';\n  const ownerState = _extends({}, props, {\n    component,\n    disabled,\n    size,\n    color,\n    iconColor: /*#__PURE__*/React.isValidElement(iconProp) ? iconProp.props.color || color : color,\n    onDelete: !!onDelete,\n    clickable,\n    variant\n  });\n  const classes = useUtilityClasses(ownerState);\n  const moreProps = component === ButtonBase ? _extends({\n    component: ComponentProp || 'div',\n    focusVisibleClassName: classes.focusVisible\n  }, onDelete && {\n    disableRipple: true\n  }) : {};\n  let deleteIcon = null;\n  if (onDelete) {\n    deleteIcon = deleteIconProp && /*#__PURE__*/React.isValidElement(deleteIconProp) ? /*#__PURE__*/React.cloneElement(deleteIconProp, {\n      className: clsx(deleteIconProp.props.className, classes.deleteIcon),\n      onClick: handleDeleteIconClick\n    }) : /*#__PURE__*/_jsx(CancelIcon, {\n      className: clsx(classes.deleteIcon),\n      onClick: handleDeleteIconClick\n    });\n  }\n  let avatar = null;\n  if (avatarProp && /*#__PURE__*/React.isValidElement(avatarProp)) {\n    avatar = /*#__PURE__*/React.cloneElement(avatarProp, {\n      className: clsx(classes.avatar, avatarProp.props.className)\n    });\n  }\n  let icon = null;\n  if (iconProp && /*#__PURE__*/React.isValidElement(iconProp)) {\n    icon = /*#__PURE__*/React.cloneElement(iconProp, {\n      className: clsx(classes.icon, iconProp.props.className)\n    });\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    if (avatar && icon) {\n      console.error('MUI: The Chip component can not handle the avatar ' + 'and the icon prop at the same time. Pick one.');\n    }\n  }\n  return /*#__PURE__*/_jsxs(ChipRoot, _extends({\n    as: component,\n    className: clsx(classes.root, className),\n    disabled: clickable && disabled ? true : undefined,\n    onClick: onClick,\n    onKeyDown: handleKeyDown,\n    onKeyUp: handleKeyUp,\n    ref: handleRef,\n    ownerState: ownerState\n  }, moreProps, other, {\n    children: [avatar || icon, /*#__PURE__*/_jsx(ChipLabel, {\n      className: clsx(classes.label),\n      ownerState: ownerState,\n      children: label\n    }), deleteIcon]\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Chip.propTypes /* remove-proptypes */ = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n  /**\n   * The Avatar element to display.\n   */\n  avatar: PropTypes.element,\n  /**\n   * This prop isn't supported.\n   * Use the `component` prop if you need to change the children structure.\n   */\n  children: unsupportedProp,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, the chip will appear clickable, and will raise when pressed,\n   * even if the onClick prop is not defined.\n   * If `false`, the chip will not appear clickable, even if onClick prop is defined.\n   * This can be used, for example,\n   * along with the component prop to indicate an anchor Chip is clickable.\n   * Note: this controls the UI and does not affect the onClick event.\n   */\n  clickable: PropTypes.bool,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#adding-new-colors).\n   * @default 'default'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * Override the default delete icon element. Shown only if `onDelete` is set.\n   */\n  deleteIcon: PropTypes.element,\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * Icon element.\n   */\n  icon: PropTypes.element,\n  /**\n   * The content of the component.\n   */\n  label: PropTypes.node,\n  /**\n   * @ignore\n   */\n  onClick: PropTypes.func,\n  /**\n   * Callback fired when the delete icon is clicked.\n   * If set, the delete icon will be shown.\n   */\n  onDelete: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onKeyDown: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onKeyUp: PropTypes.func,\n  /**\n   * The size of the component.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The variant to use.\n   * @default 'filled'\n   */\n  variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['filled', 'outlined']), PropTypes.string])\n} : void 0;\nexport default Chip;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"children\", \"className\", \"disableTypography\", \"inset\", \"primary\", \"primaryTypographyProps\", \"secondary\", \"secondaryTypographyProps\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { unstable_composeClasses as composeClasses } from '@mui/base';\nimport Typography from '../Typography';\nimport ListContext from '../List/ListContext';\nimport useThemeProps from '../styles/useThemeProps';\nimport styled from '../styles/styled';\nimport listItemTextClasses, { getListItemTextUtilityClass } from './listItemTextClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    inset,\n    primary,\n    secondary,\n    dense\n  } = ownerState;\n  const slots = {\n    root: ['root', inset && 'inset', dense && 'dense', primary && secondary && 'multiline'],\n    primary: ['primary'],\n    secondary: ['secondary']\n  };\n  return composeClasses(slots, getListItemTextUtilityClass, classes);\n};\nconst ListItemTextRoot = styled('div', {\n  name: 'MuiListItemText',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [{\n      [`& .${listItemTextClasses.primary}`]: styles.primary\n    }, {\n      [`& .${listItemTextClasses.secondary}`]: styles.secondary\n    }, styles.root, ownerState.inset && styles.inset, ownerState.primary && ownerState.secondary && styles.multiline, ownerState.dense && styles.dense];\n  }\n})(({\n  ownerState\n}) => _extends({\n  flex: '1 1 auto',\n  minWidth: 0,\n  marginTop: 4,\n  marginBottom: 4\n}, ownerState.primary && ownerState.secondary && {\n  marginTop: 6,\n  marginBottom: 6\n}, ownerState.inset && {\n  paddingLeft: 56\n}));\nconst ListItemText = /*#__PURE__*/React.forwardRef(function ListItemText(inProps, ref) {\n  const props = useThemeProps({\n    props: inProps,\n    name: 'MuiListItemText'\n  });\n  const {\n      children,\n      className,\n      disableTypography = false,\n      inset = false,\n      primary: primaryProp,\n      primaryTypographyProps,\n      secondary: secondaryProp,\n      secondaryTypographyProps\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const {\n    dense\n  } = React.useContext(ListContext);\n  let primary = primaryProp != null ? primaryProp : children;\n  let secondary = secondaryProp;\n  const ownerState = _extends({}, props, {\n    disableTypography,\n    inset,\n    primary: !!primary,\n    secondary: !!secondary,\n    dense\n  });\n  const classes = useUtilityClasses(ownerState);\n  if (primary != null && primary.type !== Typography && !disableTypography) {\n    primary = /*#__PURE__*/_jsx(Typography, _extends({\n      variant: dense ? 'body2' : 'body1',\n      className: classes.primary,\n      component: primaryTypographyProps != null && primaryTypographyProps.variant ? undefined : 'span',\n      display: \"block\"\n    }, primaryTypographyProps, {\n      children: primary\n    }));\n  }\n  if (secondary != null && secondary.type !== Typography && !disableTypography) {\n    secondary = /*#__PURE__*/_jsx(Typography, _extends({\n      variant: \"body2\",\n      className: classes.secondary,\n      color: \"text.secondary\",\n      display: \"block\"\n    }, secondaryTypographyProps, {\n      children: secondary\n    }));\n  }\n  return /*#__PURE__*/_jsxs(ListItemTextRoot, _extends({\n    className: clsx(classes.root, className),\n    ownerState: ownerState,\n    ref: ref\n  }, other, {\n    children: [primary, secondary]\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? ListItemText.propTypes /* remove-proptypes */ = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n  /**\n   * Alias for the `primary` prop.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, the children won't be wrapped by a Typography component.\n   * This can be useful to render an alternative Typography variant by wrapping\n   * the `children` (or `primary`) text, and optional `secondary` text\n   * with the Typography component.\n   * @default false\n   */\n  disableTypography: PropTypes.bool,\n  /**\n   * If `true`, the children are indented.\n   * This should be used if there is no left avatar or left icon.\n   * @default false\n   */\n  inset: PropTypes.bool,\n  /**\n   * The main content element.\n   */\n  primary: PropTypes.node,\n  /**\n   * These props will be forwarded to the primary typography component\n   * (as long as disableTypography is not `true`).\n   */\n  primaryTypographyProps: PropTypes.object,\n  /**\n   * The secondary content element.\n   */\n  secondary: PropTypes.node,\n  /**\n   * These props will be forwarded to the secondary typography component\n   * (as long as disableTypography is not `true`).\n   */\n  secondaryTypographyProps: PropTypes.object,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default ListItemText;","export default function getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (node.toString() !== '[object Window]') {\n    var ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n  var OwnElement = getWindow(node).Element;\n  return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n  var OwnElement = getWindow(node).HTMLElement;\n  return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n  // IE 11 has no ShadowRoot\n  if (typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n\n  var OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n  var uaData = navigator.userAgentData;\n\n  if (uaData != null && uaData.brands) {\n    return uaData.brands.map(function (item) {\n      return item.brand + \"/\" + item.version;\n    }).join(' ');\n  }\n\n  return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n  return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n\n  var clientRect = element.getBoundingClientRect();\n  var scaleX = 1;\n  var scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n  }\n\n  var _ref = isElement(element) ? getWindow(element) : window,\n      visualViewport = _ref.visualViewport;\n\n  var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n  var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n  var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n  var width = clientRect.width / scaleX;\n  var height = clientRect.height / scaleY;\n  return {\n    width: width,\n    height: height,\n    top: y,\n    right: x + width,\n    bottom: y + height,\n    left: x,\n    x: x,\n    y: y\n  };\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n  var win = getWindow(node);\n  var scrollLeft = win.pageXOffset;\n  var scrollTop = win.pageYOffset;\n  return {\n    scrollLeft: scrollLeft,\n    scrollTop: scrollTop\n  };\n}","export default function getNodeName(element) {\n  return element ? (element.nodeName || '').toLowerCase() : null;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n  // $FlowFixMe[incompatible-return]: assume body is always available\n  return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n  element.document) || window.document).documentElement;\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  // Popper 1 is broken in this case and never had a bug report so let's assume\n  // it's not an issue. I don't think anyone ever specifies width on <html>\n  // anyway.\n  // Browsers where the left scrollbar doesn't cause an issue report `0` for\n  // this (e.g. Edge 2019, IE11, Safari)\n  return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  var _getComputedStyle = getComputedStyle(element),\n      overflow = _getComputedStyle.overflow,\n      overflowX = _getComputedStyle.overflowX,\n      overflowY = _getComputedStyle.overflowY;\n\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n  var rect = element.getBoundingClientRect();\n  var scaleX = round(rect.width) / element.offsetWidth || 1;\n  var scaleY = round(rect.height) / element.offsetHeight || 1;\n  return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n\n  var isOffsetParentAnElement = isHTMLElement(offsetParent);\n  var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n  var documentElement = getDocumentElement(offsetParent);\n  var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n  var scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  var offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n    isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      offsets = getBoundingClientRect(offsetParent, true);\n      offsets.x += offsetParent.clientLeft;\n      offsets.y += offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n  if (node === getWindow(node) || !isHTMLElement(node)) {\n    return getWindowScroll(node);\n  } else {\n    return getHTMLElementScroll(node);\n  }\n}","export default function getHTMLElementScroll(element) {\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n  var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n  // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n  var width = element.offsetWidth;\n  var height = element.offsetHeight;\n\n  if (Math.abs(clientRect.width - width) <= 1) {\n    width = clientRect.width;\n  }\n\n  if (Math.abs(clientRect.height - height) <= 1) {\n    height = clientRect.height;\n  }\n\n  return {\n    x: element.offsetLeft,\n    y: element.offsetTop,\n    width: width,\n    height: height\n  };\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n  if (getNodeName(element) === 'html') {\n    return element;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // $FlowFixMe[incompatible-return]\n    // $FlowFixMe[prop-missing]\n    element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    element.parentNode || ( // DOM Element detected\n    isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n    // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n    getDocumentElement(element) // fallback\n\n  );\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n  if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n    // $FlowFixMe[incompatible-return]: assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n  var _element$ownerDocumen;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  var scrollParent = getScrollParent(element);\n  var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n  var win = getWindow(scrollParent);\n  var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  var updatedList = list.concat(target);\n  return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n  updatedList.concat(listScrollParents(getParentNode(target)));\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n  return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n  getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n  var isFirefox = /firefox/i.test(getUAString());\n  var isIE = /Trident/i.test(getUAString());\n\n  if (isIE && isHTMLElement(element)) {\n    // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n    var elementCss = getComputedStyle(element);\n\n    if (elementCss.position === 'fixed') {\n      return null;\n    }\n  }\n\n  var currentNode = getParentNode(element);\n\n  if (isShadowRoot(currentNode)) {\n    currentNode = currentNode.host;\n  }\n\n  while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n    var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n    // create a containing block.\n    // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n    if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n  var window = getWindow(element);\n  var offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n  return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n  return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n  var map = new Map();\n  var visited = new Set();\n  var result = [];\n  modifiers.forEach(function (modifier) {\n    map.set(modifier.name, modifier);\n  }); // On visiting object, check for its dependencies and visit them recursively\n\n  function sort(modifier) {\n    visited.add(modifier.name);\n    var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n    requires.forEach(function (dep) {\n      if (!visited.has(dep)) {\n        var depModifier = map.get(dep);\n\n        if (depModifier) {\n          sort(depModifier);\n        }\n      }\n    });\n    result.push(modifier);\n  }\n\n  modifiers.forEach(function (modifier) {\n    if (!visited.has(modifier.name)) {\n      // check for visited object\n      sort(modifier);\n    }\n  });\n  return result;\n}\n\nexport default function orderModifiers(modifiers) {\n  // order based on dependencies\n  var orderedModifiers = order(modifiers); // order based on phase\n\n  return modifierPhases.reduce(function (acc, phase) {\n    return acc.concat(orderedModifiers.filter(function (modifier) {\n      return modifier.phase === phase;\n    }));\n  }, []);\n}","export default function debounce(fn) {\n  var pending;\n  return function () {\n    if (!pending) {\n      pending = new Promise(function (resolve) {\n        Promise.resolve().then(function () {\n          pending = undefined;\n          resolve(fn());\n        });\n      });\n    }\n\n    return pending;\n  };\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport getComputedStyle from \"./dom-utils/getComputedStyle.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport validateModifiers from \"./utils/validateModifiers.js\";\nimport uniqueBy from \"./utils/uniqueBy.js\";\nimport getBasePlacement from \"./utils/getBasePlacement.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nimport { auto } from \"./enums.js\";\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n  placement: 'bottom',\n  modifiers: [],\n  strategy: 'absolute'\n};\n\nfunction areValidElements() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return !args.some(function (element) {\n    return !(element && typeof element.getBoundingClientRect === 'function');\n  });\n}\n\nexport function popperGenerator(generatorOptions) {\n  if (generatorOptions === void 0) {\n    generatorOptions = {};\n  }\n\n  var _generatorOptions = generatorOptions,\n      _generatorOptions$def = _generatorOptions.defaultModifiers,\n      defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n      _generatorOptions$def2 = _generatorOptions.defaultOptions,\n      defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n  return function createPopper(reference, popper, options) {\n    if (options === void 0) {\n      options = defaultOptions;\n    }\n\n    var state = {\n      placement: 'bottom',\n      orderedModifiers: [],\n      options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n      modifiersData: {},\n      elements: {\n        reference: reference,\n        popper: popper\n      },\n      attributes: {},\n      styles: {}\n    };\n    var effectCleanupFns = [];\n    var isDestroyed = false;\n    var instance = {\n      state: state,\n      setOptions: function setOptions(setOptionsAction) {\n        var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n        cleanupModifierEffects();\n        state.options = Object.assign({}, defaultOptions, state.options, options);\n        state.scrollParents = {\n          reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n          popper: listScrollParents(popper)\n        }; // Orders the modifiers based on their dependencies and `phase`\n        // properties\n\n        var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n        state.orderedModifiers = orderedModifiers.filter(function (m) {\n          return m.enabled;\n        }); // Validate the provided modifiers so that the consumer will get warned\n        // if one of the modifiers is invalid for any reason\n\n        if (process.env.NODE_ENV !== \"production\") {\n          var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n            var name = _ref.name;\n            return name;\n          });\n          validateModifiers(modifiers);\n\n          if (getBasePlacement(state.options.placement) === auto) {\n            var flipModifier = state.orderedModifiers.find(function (_ref2) {\n              var name = _ref2.name;\n              return name === 'flip';\n            });\n\n            if (!flipModifier) {\n              console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n            }\n          }\n\n          var _getComputedStyle = getComputedStyle(popper),\n              marginTop = _getComputedStyle.marginTop,\n              marginRight = _getComputedStyle.marginRight,\n              marginBottom = _getComputedStyle.marginBottom,\n              marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n          // cause bugs with positioning, so we'll warn the consumer\n\n\n          if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n            return parseFloat(margin);\n          })) {\n            console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n          }\n        }\n\n        runModifierEffects();\n        return instance.update();\n      },\n      // Sync update – it will always be executed, even if not necessary. This\n      // is useful for low frequency updates where sync behavior simplifies the\n      // logic.\n      // For high frequency updates (e.g. `resize` and `scroll` events), always\n      // prefer the async Popper#update method\n      forceUpdate: function forceUpdate() {\n        if (isDestroyed) {\n          return;\n        }\n\n        var _state$elements = state.elements,\n            reference = _state$elements.reference,\n            popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n        // anymore\n\n        if (!areValidElements(reference, popper)) {\n          if (process.env.NODE_ENV !== \"production\") {\n            console.error(INVALID_ELEMENT_ERROR);\n          }\n\n          return;\n        } // Store the reference and popper rects to be read by modifiers\n\n\n        state.rects = {\n          reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n          popper: getLayoutRect(popper)\n        }; // Modifiers have the ability to reset the current update cycle. The\n        // most common use case for this is the `flip` modifier changing the\n        // placement, which then needs to re-run all the modifiers, because the\n        // logic was previously ran for the previous placement and is therefore\n        // stale/incorrect\n\n        state.reset = false;\n        state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n        // is filled with the initial data specified by the modifier. This means\n        // it doesn't persist and is fresh on each update.\n        // To ensure persistent data, use `${name}#persistent`\n\n        state.orderedModifiers.forEach(function (modifier) {\n          return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n        });\n        var __debug_loops__ = 0;\n\n        for (var index = 0; index < state.orderedModifiers.length; index++) {\n          if (process.env.NODE_ENV !== \"production\") {\n            __debug_loops__ += 1;\n\n            if (__debug_loops__ > 100) {\n              console.error(INFINITE_LOOP_ERROR);\n              break;\n            }\n          }\n\n          if (state.reset === true) {\n            state.reset = false;\n            index = -1;\n            continue;\n          }\n\n          var _state$orderedModifie = state.orderedModifiers[index],\n              fn = _state$orderedModifie.fn,\n              _state$orderedModifie2 = _state$orderedModifie.options,\n              _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n              name = _state$orderedModifie.name;\n\n          if (typeof fn === 'function') {\n            state = fn({\n              state: state,\n              options: _options,\n              name: name,\n              instance: instance\n            }) || state;\n          }\n        }\n      },\n      // Async and optimistically optimized update – it will not be executed if\n      // not necessary (debounced to run at most once-per-tick)\n      update: debounce(function () {\n        return new Promise(function (resolve) {\n          instance.forceUpdate();\n          resolve(state);\n        });\n      }),\n      destroy: function destroy() {\n        cleanupModifierEffects();\n        isDestroyed = true;\n      }\n    };\n\n    if (!areValidElements(reference, popper)) {\n      if (process.env.NODE_ENV !== \"production\") {\n        console.error(INVALID_ELEMENT_ERROR);\n      }\n\n      return instance;\n    }\n\n    instance.setOptions(options).then(function (state) {\n      if (!isDestroyed && options.onFirstUpdate) {\n        options.onFirstUpdate(state);\n      }\n    }); // Modifiers have the ability to execute arbitrary code before the first\n    // update cycle runs. They will be executed in the same order as the update\n    // cycle. This is useful when a modifier adds some persistent data that\n    // other modifiers need to use, but the modifier is run after the dependent\n    // one.\n\n    function runModifierEffects() {\n      state.orderedModifiers.forEach(function (_ref3) {\n        var name = _ref3.name,\n            _ref3$options = _ref3.options,\n            options = _ref3$options === void 0 ? {} : _ref3$options,\n            effect = _ref3.effect;\n\n        if (typeof effect === 'function') {\n          var cleanupFn = effect({\n            state: state,\n            name: name,\n            instance: instance,\n            options: options\n          });\n\n          var noopFn = function noopFn() {};\n\n          effectCleanupFns.push(cleanupFn || noopFn);\n        }\n      });\n    }\n\n    function cleanupModifierEffects() {\n      effectCleanupFns.forEach(function (fn) {\n        return fn();\n      });\n      effectCleanupFns = [];\n    }\n\n    return instance;\n  };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function mergeByName(modifiers) {\n  var merged = modifiers.reduce(function (merged, current) {\n    var existing = merged[current.name];\n    merged[current.name] = existing ? Object.assign({}, existing, current, {\n      options: Object.assign({}, existing.options, current.options),\n      data: Object.assign({}, existing.data, current.data)\n    }) : current;\n    return merged;\n  }, {}); // IE11 does not support Object.values\n\n  return Object.keys(merged).map(function (key) {\n    return merged[key];\n  });\n}","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n  passive: true\n};\n\nfunction effect(_ref) {\n  var state = _ref.state,\n      instance = _ref.instance,\n      options = _ref.options;\n  var _options$scroll = options.scroll,\n      scroll = _options$scroll === void 0 ? true : _options$scroll,\n      _options$resize = options.resize,\n      resize = _options$resize === void 0 ? true : _options$resize;\n  var window = getWindow(state.elements.popper);\n  var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n  if (scroll) {\n    scrollParents.forEach(function (scrollParent) {\n      scrollParent.addEventListener('scroll', instance.update, passive);\n    });\n  }\n\n  if (resize) {\n    window.addEventListener('resize', instance.update, passive);\n  }\n\n  return function () {\n    if (scroll) {\n      scrollParents.forEach(function (scrollParent) {\n        scrollParent.removeEventListener('scroll', instance.update, passive);\n      });\n    }\n\n    if (resize) {\n      window.removeEventListener('resize', instance.update, passive);\n    }\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'eventListeners',\n  enabled: true,\n  phase: 'write',\n  fn: function fn() {},\n  effect: effect,\n  data: {}\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}","export default function getVariation(placement) {\n  return placement.split('-')[1];\n}","export default function getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n  var reference = _ref.reference,\n      element = _ref.element,\n      placement = _ref.placement;\n  var basePlacement = placement ? getBasePlacement(placement) : null;\n  var variation = placement ? getVariation(placement) : null;\n  var commonX = reference.x + reference.width / 2 - element.width / 2;\n  var commonY = reference.y + reference.height / 2 - element.height / 2;\n  var offsets;\n\n  switch (basePlacement) {\n    case top:\n      offsets = {\n        x: commonX,\n        y: reference.y - element.height\n      };\n      break;\n\n    case bottom:\n      offsets = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case right:\n      offsets = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case left:\n      offsets = {\n        x: reference.x - element.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      offsets = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n  if (mainAxis != null) {\n    var len = mainAxis === 'y' ? 'height' : 'width';\n\n    switch (variation) {\n      case start:\n        offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n        break;\n\n      case end:\n        offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n        break;\n\n      default:\n    }\n  }\n\n  return offsets;\n}","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  // Offsets are the actual position the popper needs to have to be\n  // properly positioned near its reference element\n  // This is the most basic placement, and will be adjusted by\n  // the modifiers in the next step\n  state.modifiersData[name] = computeOffsets({\n    reference: state.rects.reference,\n    element: state.rects.popper,\n    strategy: 'absolute',\n    placement: state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'popperOffsets',\n  enabled: true,\n  phase: 'read',\n  fn: popperOffsets,\n  data: {}\n};","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n  top: 'auto',\n  right: 'auto',\n  bottom: 'auto',\n  left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n  var x = _ref.x,\n      y = _ref.y;\n  var win = window;\n  var dpr = win.devicePixelRatio || 1;\n  return {\n    x: round(x * dpr) / dpr || 0,\n    y: round(y * dpr) / dpr || 0\n  };\n}\n\nexport function mapToStyles(_ref2) {\n  var _Object$assign2;\n\n  var popper = _ref2.popper,\n      popperRect = _ref2.popperRect,\n      placement = _ref2.placement,\n      variation = _ref2.variation,\n      offsets = _ref2.offsets,\n      position = _ref2.position,\n      gpuAcceleration = _ref2.gpuAcceleration,\n      adaptive = _ref2.adaptive,\n      roundOffsets = _ref2.roundOffsets,\n      isFixed = _ref2.isFixed;\n  var _offsets$x = offsets.x,\n      x = _offsets$x === void 0 ? 0 : _offsets$x,\n      _offsets$y = offsets.y,\n      y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n  var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref3.x;\n  y = _ref3.y;\n  var hasX = offsets.hasOwnProperty('x');\n  var hasY = offsets.hasOwnProperty('y');\n  var sideX = left;\n  var sideY = top;\n  var win = window;\n\n  if (adaptive) {\n    var offsetParent = getOffsetParent(popper);\n    var heightProp = 'clientHeight';\n    var widthProp = 'clientWidth';\n\n    if (offsetParent === getWindow(popper)) {\n      offsetParent = getDocumentElement(popper);\n\n      if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n        heightProp = 'scrollHeight';\n        widthProp = 'scrollWidth';\n      }\n    } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n    offsetParent = offsetParent;\n\n    if (placement === top || (placement === left || placement === right) && variation === end) {\n      sideY = bottom;\n      var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n      offsetParent[heightProp];\n      y -= offsetY - popperRect.height;\n      y *= gpuAcceleration ? 1 : -1;\n    }\n\n    if (placement === left || (placement === top || placement === bottom) && variation === end) {\n      sideX = right;\n      var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n      offsetParent[widthProp];\n      x -= offsetX - popperRect.width;\n      x *= gpuAcceleration ? 1 : -1;\n    }\n  }\n\n  var commonStyles = Object.assign({\n    position: position\n  }, adaptive && unsetSides);\n\n  var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n    x: x,\n    y: y\n  }) : {\n    x: x,\n    y: y\n  };\n\n  x = _ref4.x;\n  y = _ref4.y;\n\n  if (gpuAcceleration) {\n    var _Object$assign;\n\n    return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n  }\n\n  return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n  var state = _ref5.state,\n      options = _ref5.options;\n  var _options$gpuAccelerat = options.gpuAcceleration,\n      gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n      _options$adaptive = options.adaptive,\n      adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n      _options$roundOffsets = options.roundOffsets,\n      roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    var transitionProperty = getComputedStyle(state.elements.popper).transitionProperty || '';\n\n    if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n      return transitionProperty.indexOf(property) >= 0;\n    })) {\n      console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n    }\n  }\n\n  var commonStyles = {\n    placement: getBasePlacement(state.placement),\n    variation: getVariation(state.placement),\n    popper: state.elements.popper,\n    popperRect: state.rects.popper,\n    gpuAcceleration: gpuAcceleration,\n    isFixed: state.options.strategy === 'fixed'\n  };\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.popperOffsets,\n      position: state.options.strategy,\n      adaptive: adaptive,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  if (state.modifiersData.arrow != null) {\n    state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n      offsets: state.modifiersData.arrow,\n      position: 'absolute',\n      adaptive: false,\n      roundOffsets: roundOffsets\n    })));\n  }\n\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-placement': state.placement\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'computeStyles',\n  enabled: true,\n  phase: 'beforeWrite',\n  fn: computeStyles,\n  data: {}\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n  var basePlacement = getBasePlacement(placement);\n  var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n  var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n    placement: placement\n  })) : offset,\n      skidding = _ref[0],\n      distance = _ref[1];\n\n  skidding = skidding || 0;\n  distance = (distance || 0) * invertDistance;\n  return [left, right].indexOf(basePlacement) >= 0 ? {\n    x: distance,\n    y: skidding\n  } : {\n    x: skidding,\n    y: distance\n  };\n}\n\nfunction offset(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options,\n      name = _ref2.name;\n  var _options$offset = options.offset,\n      offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n  var data = placements.reduce(function (acc, placement) {\n    acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n    return acc;\n  }, {});\n  var _data$state$placement = data[state.placement],\n      x = _data$state$placement.x,\n      y = _data$state$placement.y;\n\n  if (state.modifiersData.popperOffsets != null) {\n    state.modifiersData.popperOffsets.x += x;\n    state.modifiersData.popperOffsets.y += y;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'offset',\n  enabled: true,\n  phase: 'main',\n  requires: ['popperOffsets'],\n  fn: offset\n};","var hash = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}","var hash = {\n  start: 'end',\n  end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n  return placement.replace(/start|end/g, function (matched) {\n    return hash[matched];\n  });\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n  var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n      var next = child;\n\n      do {\n        if (next && parent.isSameNode(next)) {\n          return true;\n        } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n        next = next.parentNode || next.host;\n      } while (next);\n    } // Give up, the result is false\n\n\n  return false;\n}","export default function rectToClientRect(rect) {\n  return Object.assign({}, rect, {\n    left: rect.x,\n    top: rect.y,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n  var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n  rect.top = rect.top + element.clientTop;\n  rect.left = rect.left + element.clientLeft;\n  rect.bottom = rect.top + element.clientHeight;\n  rect.right = rect.left + element.clientWidth;\n  rect.width = element.clientWidth;\n  rect.height = element.clientHeight;\n  rect.x = rect.left;\n  rect.y = rect.top;\n  return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n  return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  var clippingParents = listScrollParents(getParentNode(element));\n  var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n  var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n  return clippingParents.filter(function (clippingParent) {\n    return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n  });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n  var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n  var firstClippingParent = clippingParents[0];\n  var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n    var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n  var win = getWindow(element);\n  var html = getDocumentElement(element);\n  var visualViewport = win.visualViewport;\n  var width = html.clientWidth;\n  var height = html.clientHeight;\n  var x = 0;\n  var y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    var layoutViewport = isLayoutViewport();\n\n    if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x + getWindowScrollBarX(element),\n    y: y\n  };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  var html = getDocumentElement(element);\n  var winScroll = getWindowScroll(element);\n  var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n  var y = -winScroll.scrollTop;\n\n  if (getComputedStyle(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width: width,\n    height: height,\n    x: x,\n    y: y\n  };\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n  return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  };\n}","export default function expandToHashMap(value, keys) {\n  return keys.reduce(function (hashMap, key) {\n    hashMap[key] = value;\n    return hashMap;\n  }, {});\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      _options$placement = _options.placement,\n      placement = _options$placement === void 0 ? state.placement : _options$placement,\n      _options$strategy = _options.strategy,\n      strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n      _options$boundary = _options.boundary,\n      boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n      _options$rootBoundary = _options.rootBoundary,\n      rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n      _options$elementConte = _options.elementContext,\n      elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n      _options$altBoundary = _options.altBoundary,\n      altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n      _options$padding = _options.padding,\n      padding = _options$padding === void 0 ? 0 : _options$padding;\n  var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n  var altContext = elementContext === popper ? reference : popper;\n  var popperRect = state.rects.popper;\n  var element = state.elements[altBoundary ? altContext : elementContext];\n  var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n  var referenceClientRect = getBoundingClientRect(state.elements.reference);\n  var popperOffsets = computeOffsets({\n    reference: referenceClientRect,\n    element: popperRect,\n    strategy: 'absolute',\n    placement: placement\n  });\n  var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n  var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  var overflowOffsets = {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n  var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n  if (elementContext === popper && offsetData) {\n    var offset = offsetData[placement];\n    Object.keys(overflowOffsets).forEach(function (key) {\n      var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n      var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n      overflowOffsets[key] += offset[axis] * multiply;\n    });\n  }\n\n  return overflowOffsets;\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n  return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n  var v = within(min, value, max);\n  return v > max ? max : v;\n}","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      padding = options.padding,\n      _options$tether = options.tether,\n      tether = _options$tether === void 0 ? true : _options$tether,\n      _options$tetherOffset = options.tetherOffset,\n      tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n  var overflow = detectOverflow(state, {\n    boundary: boundary,\n    rootBoundary: rootBoundary,\n    padding: padding,\n    altBoundary: altBoundary\n  });\n  var basePlacement = getBasePlacement(state.placement);\n  var variation = getVariation(state.placement);\n  var isBasePlacement = !variation;\n  var mainAxis = getMainAxisFromPlacement(basePlacement);\n  var altAxis = getAltAxis(mainAxis);\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : tetherOffset;\n  var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n    mainAxis: tetherOffsetValue,\n    altAxis: tetherOffsetValue\n  } : Object.assign({\n    mainAxis: 0,\n    altAxis: 0\n  }, tetherOffsetValue);\n  var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n  var data = {\n    x: 0,\n    y: 0\n  };\n\n  if (!popperOffsets) {\n    return;\n  }\n\n  if (checkMainAxis) {\n    var _offsetModifierState$;\n\n    var mainSide = mainAxis === 'y' ? top : left;\n    var altSide = mainAxis === 'y' ? bottom : right;\n    var len = mainAxis === 'y' ? 'height' : 'width';\n    var offset = popperOffsets[mainAxis];\n    var min = offset + overflow[mainSide];\n    var max = offset - overflow[altSide];\n    var additive = tether ? -popperRect[len] / 2 : 0;\n    var minLen = variation === start ? referenceRect[len] : popperRect[len];\n    var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n    // outside the reference bounds\n\n    var arrowElement = state.elements.arrow;\n    var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n      width: 0,\n      height: 0\n    };\n    var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n    var arrowPaddingMin = arrowPaddingObject[mainSide];\n    var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n    // to include its full size in the calculation. If the reference is small\n    // and near the edge of a boundary, the popper can overflow even if the\n    // reference is not overflowing as well (e.g. virtual elements with no\n    // width or height)\n\n    var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n    var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n    var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n    var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n    var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n    var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n    var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n    var tetherMax = offset + maxOffset - offsetModifierValue;\n    var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n    popperOffsets[mainAxis] = preventedOffset;\n    data[mainAxis] = preventedOffset - offset;\n  }\n\n  if (checkAltAxis) {\n    var _offsetModifierState$2;\n\n    var _mainSide = mainAxis === 'x' ? top : left;\n\n    var _altSide = mainAxis === 'x' ? bottom : right;\n\n    var _offset = popperOffsets[altAxis];\n\n    var _len = altAxis === 'y' ? 'height' : 'width';\n\n    var _min = _offset + overflow[_mainSide];\n\n    var _max = _offset - overflow[_altSide];\n\n    var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n    var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n    var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n    var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n    var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n    popperOffsets[altAxis] = _preventedOffset;\n    data[altAxis] = _preventedOffset - _offset;\n  }\n\n  state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'preventOverflow',\n  enabled: true,\n  phase: 'main',\n  fn: preventOverflow,\n  requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n  padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n    placement: state.placement\n  })) : padding;\n  return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n  var _state$modifiersData$;\n\n  var state = _ref.state,\n      name = _ref.name,\n      options = _ref.options;\n  var arrowElement = state.elements.arrow;\n  var popperOffsets = state.modifiersData.popperOffsets;\n  var basePlacement = getBasePlacement(state.placement);\n  var axis = getMainAxisFromPlacement(basePlacement);\n  var isVertical = [left, right].indexOf(basePlacement) >= 0;\n  var len = isVertical ? 'height' : 'width';\n\n  if (!arrowElement || !popperOffsets) {\n    return;\n  }\n\n  var paddingObject = toPaddingObject(options.padding, state);\n  var arrowRect = getLayoutRect(arrowElement);\n  var minProp = axis === 'y' ? top : left;\n  var maxProp = axis === 'y' ? bottom : right;\n  var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n  var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n  var arrowOffsetParent = getOffsetParent(arrowElement);\n  var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n  var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n  // outside of the popper bounds\n\n  var min = paddingObject[minProp];\n  var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n  var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n  var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n  var axisProp = axis;\n  state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state,\n      options = _ref2.options;\n  var _options$element = options.element,\n      arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n  if (arrowElement == null) {\n    return;\n  } // CSS selector\n\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = state.elements.popper.querySelector(arrowElement);\n\n    if (!arrowElement) {\n      return;\n    }\n  }\n\n  if (process.env.NODE_ENV !== \"production\") {\n    if (!isHTMLElement(arrowElement)) {\n      console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n    }\n  }\n\n  if (!contains(state.elements.popper, arrowElement)) {\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n    }\n\n    return;\n  }\n\n  state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'arrow',\n  enabled: true,\n  phase: 'main',\n  fn: arrow,\n  effect: effect,\n  requires: ['popperOffsets'],\n  requiresIfExists: ['preventOverflow']\n};","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n  if (preventedOffsets === void 0) {\n    preventedOffsets = {\n      x: 0,\n      y: 0\n    };\n  }\n\n  return {\n    top: overflow.top - rect.height - preventedOffsets.y,\n    right: overflow.right - rect.width + preventedOffsets.x,\n    bottom: overflow.bottom - rect.height + preventedOffsets.y,\n    left: overflow.left - rect.width - preventedOffsets.x\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return [top, right, bottom, left].some(function (side) {\n    return overflow[side] >= 0;\n  });\n}\n\nfunction hide(_ref) {\n  var state = _ref.state,\n      name = _ref.name;\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var preventedOffsets = state.modifiersData.preventOverflow;\n  var referenceOverflow = detectOverflow(state, {\n    elementContext: 'reference'\n  });\n  var popperAltOverflow = detectOverflow(state, {\n    altBoundary: true\n  });\n  var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n  var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n  var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n  var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n  state.modifiersData[name] = {\n    referenceClippingOffsets: referenceClippingOffsets,\n    popperEscapeOffsets: popperEscapeOffsets,\n    isReferenceHidden: isReferenceHidden,\n    hasPopperEscaped: hasPopperEscaped\n  };\n  state.attributes.popper = Object.assign({}, state.attributes.popper, {\n    'data-popper-reference-hidden': isReferenceHidden,\n    'data-popper-escaped': hasPopperEscaped\n  });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'hide',\n  enabled: true,\n  phase: 'main',\n  requiresIfExists: ['preventOverflow'],\n  fn: hide\n};","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n  defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n  var state = _ref.state;\n  Object.keys(state.elements).forEach(function (name) {\n    var style = state.styles[name] || {};\n    var attributes = state.attributes[name] || {};\n    var element = state.elements[name]; // arrow is optional + virtual elements\n\n    if (!isHTMLElement(element) || !getNodeName(element)) {\n      return;\n    } // Flow doesn't support to extend this property, but it's the most\n    // effective way to apply styles to an HTMLElement\n    // $FlowFixMe[cannot-write]\n\n\n    Object.assign(element.style, style);\n    Object.keys(attributes).forEach(function (name) {\n      var value = attributes[name];\n\n      if (value === false) {\n        element.removeAttribute(name);\n      } else {\n        element.setAttribute(name, value === true ? '' : value);\n      }\n    });\n  });\n}\n\nfunction effect(_ref2) {\n  var state = _ref2.state;\n  var initialStyles = {\n    popper: {\n      position: state.options.strategy,\n      left: '0',\n      top: '0',\n      margin: '0'\n    },\n    arrow: {\n      position: 'absolute'\n    },\n    reference: {}\n  };\n  Object.assign(state.elements.popper.style, initialStyles.popper);\n  state.styles = initialStyles;\n\n  if (state.elements.arrow) {\n    Object.assign(state.elements.arrow.style, initialStyles.arrow);\n  }\n\n  return function () {\n    Object.keys(state.elements).forEach(function (name) {\n      var element = state.elements[name];\n      var attributes = state.attributes[name] || {};\n      var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n      var style = styleProperties.reduce(function (style, property) {\n        style[property] = '';\n        return style;\n      }, {}); // arrow is optional + virtual elements\n\n      if (!isHTMLElement(element) || !getNodeName(element)) {\n        return;\n      }\n\n      Object.assign(element.style, style);\n      Object.keys(attributes).forEach(function (attribute) {\n        element.removeAttribute(attribute);\n      });\n    });\n  };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'applyStyles',\n  enabled: true,\n  phase: 'write',\n  fn: applyStyles,\n  effect: effect,\n  requires: ['computeStyles']\n};","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n  if (getBasePlacement(placement) === auto) {\n    return [];\n  }\n\n  var oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n  var state = _ref.state,\n      options = _ref.options,\n      name = _ref.name;\n\n  if (state.modifiersData[name]._skip) {\n    return;\n  }\n\n  var _options$mainAxis = options.mainAxis,\n      checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n      _options$altAxis = options.altAxis,\n      checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n      specifiedFallbackPlacements = options.fallbackPlacements,\n      padding = options.padding,\n      boundary = options.boundary,\n      rootBoundary = options.rootBoundary,\n      altBoundary = options.altBoundary,\n      _options$flipVariatio = options.flipVariations,\n      flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n      allowedAutoPlacements = options.allowedAutoPlacements;\n  var preferredPlacement = state.options.placement;\n  var basePlacement = getBasePlacement(preferredPlacement);\n  var isBasePlacement = basePlacement === preferredPlacement;\n  var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n  var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n    return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding,\n      flipVariations: flipVariations,\n      allowedAutoPlacements: allowedAutoPlacements\n    }) : placement);\n  }, []);\n  var referenceRect = state.rects.reference;\n  var popperRect = state.rects.popper;\n  var checksMap = new Map();\n  var makeFallbackChecks = true;\n  var firstFittingPlacement = placements[0];\n\n  for (var i = 0; i < placements.length; i++) {\n    var placement = placements[i];\n\n    var _basePlacement = getBasePlacement(placement);\n\n    var isStartVariation = getVariation(placement) === start;\n    var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n    var len = isVertical ? 'width' : 'height';\n    var overflow = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      altBoundary: altBoundary,\n      padding: padding\n    });\n    var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n    if (referenceRect[len] > popperRect[len]) {\n      mainVariationSide = getOppositePlacement(mainVariationSide);\n    }\n\n    var altVariationSide = getOppositePlacement(mainVariationSide);\n    var checks = [];\n\n    if (checkMainAxis) {\n      checks.push(overflow[_basePlacement] <= 0);\n    }\n\n    if (checkAltAxis) {\n      checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n    }\n\n    if (checks.every(function (check) {\n      return check;\n    })) {\n      firstFittingPlacement = placement;\n      makeFallbackChecks = false;\n      break;\n    }\n\n    checksMap.set(placement, checks);\n  }\n\n  if (makeFallbackChecks) {\n    // `2` may be desired in some cases – research later\n    var numberOfChecks = flipVariations ? 3 : 1;\n\n    var _loop = function _loop(_i) {\n      var fittingPlacement = placements.find(function (placement) {\n        var checks = checksMap.get(placement);\n\n        if (checks) {\n          return checks.slice(0, _i).every(function (check) {\n            return check;\n          });\n        }\n      });\n\n      if (fittingPlacement) {\n        firstFittingPlacement = fittingPlacement;\n        return \"break\";\n      }\n    };\n\n    for (var _i = numberOfChecks; _i > 0; _i--) {\n      var _ret = _loop(_i);\n\n      if (_ret === \"break\") break;\n    }\n  }\n\n  if (state.placement !== firstFittingPlacement) {\n    state.modifiersData[name]._skip = true;\n    state.placement = firstFittingPlacement;\n    state.reset = true;\n  }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n  name: 'flip',\n  enabled: true,\n  phase: 'main',\n  fn: flip,\n  requiresIfExists: ['offset'],\n  data: {\n    _skip: false\n  }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  var _options = options,\n      placement = _options.placement,\n      boundary = _options.boundary,\n      rootBoundary = _options.rootBoundary,\n      padding = _options.padding,\n      flipVariations = _options.flipVariations,\n      _options$allowedAutoP = _options.allowedAutoPlacements,\n      allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n  var variation = getVariation(placement);\n  var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n    return getVariation(placement) === variation;\n  }) : basePlacements;\n  var allowedPlacements = placements.filter(function (placement) {\n    return allowedAutoPlacements.indexOf(placement) >= 0;\n  });\n\n  if (allowedPlacements.length === 0) {\n    allowedPlacements = placements;\n\n    if (process.env.NODE_ENV !== \"production\") {\n      console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n    }\n  } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n  var overflows = allowedPlacements.reduce(function (acc, placement) {\n    acc[placement] = detectOverflow(state, {\n      placement: placement,\n      boundary: boundary,\n      rootBoundary: rootBoundary,\n      padding: padding\n    })[getBasePlacement(placement)];\n    return acc;\n  }, {});\n  return Object.keys(overflows).sort(function (a, b) {\n    return overflows[a] - overflows[b];\n  });\n}","import generateUtilityClass from '../generateUtilityClass';\nimport generateUtilityClasses from '../generateUtilityClasses';\nexport function getPopperUnstyledUtilityClass(slot) {\n  return generateUtilityClass('MuiPopperUnstyled', slot);\n}\nconst popperUnstyledClasses = generateUtilityClasses('MuiPopperUnstyled', ['root']);\nexport default popperUnstyledClasses;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"anchorEl\", \"children\", \"component\", \"direction\", \"disablePortal\", \"modifiers\", \"open\", \"ownerState\", \"placement\", \"popperOptions\", \"popperRef\", \"slotProps\", \"slots\", \"TransitionProps\"],\n  _excluded2 = [\"anchorEl\", \"children\", \"container\", \"direction\", \"disablePortal\", \"keepMounted\", \"modifiers\", \"open\", \"placement\", \"popperOptions\", \"popperRef\", \"style\", \"transition\"];\nimport * as React from 'react';\nimport { chainPropTypes, HTMLElementType, refType, unstable_ownerDocument as ownerDocument, unstable_useEnhancedEffect as useEnhancedEffect, unstable_useForkRef as useForkRef } from '@mui/utils';\nimport { createPopper } from '@popperjs/core';\nimport PropTypes from 'prop-types';\nimport composeClasses from '../composeClasses';\nimport Portal from '../Portal';\nimport { getPopperUnstyledUtilityClass } from './popperUnstyledClasses';\nimport { useSlotProps } from '../utils';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction flipPlacement(placement, direction) {\n  if (direction === 'ltr') {\n    return placement;\n  }\n  switch (placement) {\n    case 'bottom-end':\n      return 'bottom-start';\n    case 'bottom-start':\n      return 'bottom-end';\n    case 'top-end':\n      return 'top-start';\n    case 'top-start':\n      return 'top-end';\n    default:\n      return placement;\n  }\n}\nfunction resolveAnchorEl(anchorEl) {\n  return typeof anchorEl === 'function' ? anchorEl() : anchorEl;\n}\nconst useUtilityClasses = () => {\n  const slots = {\n    root: ['root']\n  };\n  return composeClasses(slots, getPopperUnstyledUtilityClass, {});\n};\nconst defaultPopperOptions = {};\n\n/* eslint-disable react/prop-types */\nconst PopperTooltip = /*#__PURE__*/React.forwardRef(function PopperTooltip(props, ref) {\n  var _ref;\n  const {\n      anchorEl,\n      children,\n      component,\n      direction,\n      disablePortal,\n      modifiers,\n      open,\n      ownerState,\n      placement: initialPlacement,\n      popperOptions,\n      popperRef: popperRefProp,\n      slotProps = {},\n      slots = {},\n      TransitionProps\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const tooltipRef = React.useRef(null);\n  const ownRef = useForkRef(tooltipRef, ref);\n  const popperRef = React.useRef(null);\n  const handlePopperRef = useForkRef(popperRef, popperRefProp);\n  const handlePopperRefRef = React.useRef(handlePopperRef);\n  useEnhancedEffect(() => {\n    handlePopperRefRef.current = handlePopperRef;\n  }, [handlePopperRef]);\n  React.useImperativeHandle(popperRefProp, () => popperRef.current, []);\n  const rtlPlacement = flipPlacement(initialPlacement, direction);\n  /**\n   * placement initialized from prop but can change during lifetime if modifiers.flip.\n   * modifiers.flip is essentially a flip for controlled/uncontrolled behavior\n   */\n  const [placement, setPlacement] = React.useState(rtlPlacement);\n  React.useEffect(() => {\n    if (popperRef.current) {\n      popperRef.current.forceUpdate();\n    }\n  });\n  useEnhancedEffect(() => {\n    if (!anchorEl || !open) {\n      return undefined;\n    }\n    const handlePopperUpdate = data => {\n      setPlacement(data.placement);\n    };\n    const resolvedAnchorEl = resolveAnchorEl(anchorEl);\n    if (process.env.NODE_ENV !== 'production') {\n      if (resolvedAnchorEl && resolvedAnchorEl.nodeType === 1) {\n        const box = resolvedAnchorEl.getBoundingClientRect();\n        if (process.env.NODE_ENV !== 'test' && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {\n          console.warn(['MUI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', \"Make sure the element is present in the document or that it's not display none.\"].join('\\n'));\n        }\n      }\n    }\n    let popperModifiers = [{\n      name: 'preventOverflow',\n      options: {\n        altBoundary: disablePortal\n      }\n    }, {\n      name: 'flip',\n      options: {\n        altBoundary: disablePortal\n      }\n    }, {\n      name: 'onUpdate',\n      enabled: true,\n      phase: 'afterWrite',\n      fn: ({\n        state\n      }) => {\n        handlePopperUpdate(state);\n      }\n    }];\n    if (modifiers != null) {\n      popperModifiers = popperModifiers.concat(modifiers);\n    }\n    if (popperOptions && popperOptions.modifiers != null) {\n      popperModifiers = popperModifiers.concat(popperOptions.modifiers);\n    }\n    const popper = createPopper(resolveAnchorEl(anchorEl), tooltipRef.current, _extends({\n      placement: rtlPlacement\n    }, popperOptions, {\n      modifiers: popperModifiers\n    }));\n    handlePopperRefRef.current(popper);\n    return () => {\n      popper.destroy();\n      handlePopperRefRef.current(null);\n    };\n  }, [anchorEl, disablePortal, modifiers, open, popperOptions, rtlPlacement]);\n  const childProps = {\n    placement\n  };\n  if (TransitionProps !== null) {\n    childProps.TransitionProps = TransitionProps;\n  }\n  const classes = useUtilityClasses();\n  const Root = (_ref = component != null ? component : slots.root) != null ? _ref : 'div';\n  const rootProps = useSlotProps({\n    elementType: Root,\n    externalSlotProps: slotProps.root,\n    externalForwardedProps: other,\n    additionalProps: {\n      role: 'tooltip',\n      ref: ownRef\n    },\n    ownerState: _extends({}, props, ownerState),\n    className: classes.root\n  });\n  return /*#__PURE__*/_jsx(Root, _extends({}, rootProps, {\n    children: typeof children === 'function' ? children(childProps) : children\n  }));\n});\n/* eslint-enable react/prop-types */\n\n/**\n * Poppers rely on the 3rd party library [Popper.js](https://popper.js.org/docs/v2/) for positioning.\n */\nconst PopperUnstyled = /*#__PURE__*/React.forwardRef(function PopperUnstyled(props, ref) {\n  const {\n      anchorEl,\n      children,\n      container: containerProp,\n      direction = 'ltr',\n      disablePortal = false,\n      keepMounted = false,\n      modifiers,\n      open,\n      placement = 'bottom',\n      popperOptions = defaultPopperOptions,\n      popperRef,\n      style,\n      transition = false\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded2);\n  const [exited, setExited] = React.useState(true);\n  const handleEnter = () => {\n    setExited(false);\n  };\n  const handleExited = () => {\n    setExited(true);\n  };\n  if (!keepMounted && !open && (!transition || exited)) {\n    return null;\n  }\n\n  // If the container prop is provided, use that\n  // If the anchorEl prop is provided, use its parent body element as the container\n  // If neither are provided let the Modal take care of choosing the container\n  const container = containerProp || (anchorEl ? ownerDocument(resolveAnchorEl(anchorEl)).body : undefined);\n  return /*#__PURE__*/_jsx(Portal, {\n    disablePortal: disablePortal,\n    container: container,\n    children: /*#__PURE__*/_jsx(PopperTooltip, _extends({\n      anchorEl: anchorEl,\n      direction: direction,\n      disablePortal: disablePortal,\n      modifiers: modifiers,\n      ref: ref,\n      open: transition ? !exited : open,\n      placement: placement,\n      popperOptions: popperOptions,\n      popperRef: popperRef\n    }, other, {\n      style: _extends({\n        // Prevents scroll issue, waiting for Popper.js to add this style once initiated.\n        position: 'fixed',\n        // Fix Popper.js display issue\n        top: 0,\n        left: 0,\n        display: !open && keepMounted && (!transition || exited) ? 'none' : null\n      }, style),\n      TransitionProps: transition ? {\n        in: open,\n        onEnter: handleEnter,\n        onExited: handleExited\n      } : null,\n      children: children\n    }))\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? PopperUnstyled.propTypes /* remove-proptypes */ = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n  /**\n   * An HTML element, [virtualElement](https://popper.js.org/docs/v2/virtual-elements/),\n   * or a function that returns either.\n   * It's used to set the position of the popper.\n   * The return value will passed as the reference object of the Popper instance.\n   */\n  anchorEl: chainPropTypes(PropTypes.oneOfType([HTMLElementType, PropTypes.object, PropTypes.func]), props => {\n    if (props.open) {\n      const resolvedAnchorEl = resolveAnchorEl(props.anchorEl);\n      if (resolvedAnchorEl && resolvedAnchorEl.nodeType === 1) {\n        const box = resolvedAnchorEl.getBoundingClientRect();\n        if (process.env.NODE_ENV !== 'test' && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {\n          return new Error(['MUI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', \"Make sure the element is present in the document or that it's not display none.\"].join('\\n'));\n        }\n      } else if (!resolvedAnchorEl || typeof resolvedAnchorEl.getBoundingClientRect !== 'function' || resolvedAnchorEl.contextElement != null && resolvedAnchorEl.contextElement.nodeType !== 1) {\n        return new Error(['MUI: The `anchorEl` prop provided to the component is invalid.', 'It should be an HTML element instance or a virtualElement ', '(https://popper.js.org/docs/v2/virtual-elements/).'].join('\\n'));\n      }\n    }\n    return null;\n  }),\n  /**\n   * Popper render function or node.\n   */\n  children: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.node, PropTypes.func]),\n  /**\n   * An HTML element or function that returns one.\n   * The `container` will have the portal children appended to it.\n   *\n   * By default, it uses the body of the top-level document object,\n   * so it's simply `document.body` most of the time.\n   */\n  container: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.func]),\n  /**\n   * Direction of the text.\n   * @default 'ltr'\n   */\n  direction: PropTypes.oneOf(['ltr', 'rtl']),\n  /**\n   * The `children` will be under the DOM hierarchy of the parent component.\n   * @default false\n   */\n  disablePortal: PropTypes.bool,\n  /**\n   * Always keep the children in the DOM.\n   * This prop can be useful in SEO situation or\n   * when you want to maximize the responsiveness of the Popper.\n   * @default false\n   */\n  keepMounted: PropTypes.bool,\n  /**\n   * Popper.js is based on a \"plugin-like\" architecture,\n   * most of its features are fully encapsulated \"modifiers\".\n   *\n   * A modifier is a function that is called each time Popper.js needs to\n   * compute the position of the popper.\n   * For this reason, modifiers should be very performant to avoid bottlenecks.\n   * To learn how to create a modifier, [read the modifiers documentation](https://popper.js.org/docs/v2/modifiers/).\n   */\n  modifiers: PropTypes.arrayOf(PropTypes.shape({\n    data: PropTypes.object,\n    effect: PropTypes.func,\n    enabled: PropTypes.bool,\n    fn: PropTypes.func,\n    name: PropTypes.any,\n    options: PropTypes.object,\n    phase: PropTypes.oneOf(['afterMain', 'afterRead', 'afterWrite', 'beforeMain', 'beforeRead', 'beforeWrite', 'main', 'read', 'write']),\n    requires: PropTypes.arrayOf(PropTypes.string),\n    requiresIfExists: PropTypes.arrayOf(PropTypes.string)\n  })),\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool.isRequired,\n  /**\n   * Popper placement.\n   * @default 'bottom'\n   */\n  placement: PropTypes.oneOf(['auto-end', 'auto-start', 'auto', 'bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n  /**\n   * Options provided to the [`Popper.js`](https://popper.js.org/docs/v2/constructors/#options) instance.\n   * @default {}\n   */\n  popperOptions: PropTypes.shape({\n    modifiers: PropTypes.array,\n    onFirstUpdate: PropTypes.func,\n    placement: PropTypes.oneOf(['auto-end', 'auto-start', 'auto', 'bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n    strategy: PropTypes.oneOf(['absolute', 'fixed'])\n  }),\n  /**\n   * A ref that points to the used popper instance.\n   */\n  popperRef: refType,\n  /**\n   * The props used for each slot inside the Popper.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside the Popper.\n   * Either a string to use a HTML element or a component.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    root: PropTypes.elementType\n  }),\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n  /**\n   * Help supporting a react-transition-group/Transition component.\n   * @default false\n   */\n  transition: PropTypes.bool\n} : void 0;\nexport default PopperUnstyled;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nconst _excluded = [\"components\", \"componentsProps\", \"slots\", \"slotProps\"];\nimport PopperUnstyled from '@mui/base/PopperUnstyled';\nimport { useThemeWithoutDefault as useTheme } from '@mui/system';\nimport { HTMLElementType, refType } from '@mui/utils';\nimport PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { styled, useThemeProps } from '../styles';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst PopperRoot = styled(PopperUnstyled, {\n  name: 'MuiPopper',\n  slot: 'Root',\n  overridesResolver: (props, styles) => styles.root\n})({});\n\n/**\n *\n * Demos:\n *\n * - [Autocomplete](https://mui.com/material-ui/react-autocomplete/)\n * - [Menu](https://mui.com/material-ui/react-menu/)\n * - [Popper](https://mui.com/material-ui/react-popper/)\n *\n * API:\n *\n * - [Popper API](https://mui.com/material-ui/api/popper/)\n */\nconst Popper = /*#__PURE__*/React.forwardRef(function Popper(inProps, ref) {\n  var _slots$root;\n  const theme = useTheme();\n  const _useThemeProps = useThemeProps({\n      props: inProps,\n      name: 'MuiPopper'\n    }),\n    {\n      components,\n      componentsProps,\n      slots,\n      slotProps\n    } = _useThemeProps,\n    other = _objectWithoutPropertiesLoose(_useThemeProps, _excluded);\n  const RootComponent = (_slots$root = slots == null ? void 0 : slots.root) != null ? _slots$root : components == null ? void 0 : components.Root;\n  return /*#__PURE__*/_jsx(PopperRoot, _extends({\n    direction: theme == null ? void 0 : theme.direction,\n    slots: {\n      root: RootComponent\n    },\n    slotProps: slotProps != null ? slotProps : componentsProps\n  }, other, {\n    ref: ref\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? Popper.propTypes /* remove-proptypes */ = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit TypeScript types and run \"yarn proptypes\"  |\n  // ----------------------------------------------------------------------\n  /**\n   * An HTML element, [virtualElement](https://popper.js.org/docs/v2/virtual-elements/),\n   * or a function that returns either.\n   * It's used to set the position of the popper.\n   * The return value will passed as the reference object of the Popper instance.\n   */\n  anchorEl: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.object, PropTypes.func]),\n  /**\n   * Popper render function or node.\n   */\n  children: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.node, PropTypes.func]),\n  /**\n   * @ignore\n   */\n  component: PropTypes /* @typescript-to-proptypes-ignore */.elementType,\n  /**\n   * The components used for each slot inside the Popper.\n   * Either a string to use a HTML element or a component.\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Root: PropTypes.elementType\n  }),\n  /**\n   * The props used for each slot inside the Popper.\n   * @default {}\n   */\n  componentsProps: PropTypes.shape({\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * An HTML element or function that returns one.\n   * The `container` will have the portal children appended to it.\n   *\n   * By default, it uses the body of the top-level document object,\n   * so it's simply `document.body` most of the time.\n   */\n  container: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.func]),\n  /**\n   * The `children` will be under the DOM hierarchy of the parent component.\n   * @default false\n   */\n  disablePortal: PropTypes.bool,\n  /**\n   * Always keep the children in the DOM.\n   * This prop can be useful in SEO situation or\n   * when you want to maximize the responsiveness of the Popper.\n   * @default false\n   */\n  keepMounted: PropTypes.bool,\n  /**\n   * Popper.js is based on a \"plugin-like\" architecture,\n   * most of its features are fully encapsulated \"modifiers\".\n   *\n   * A modifier is a function that is called each time Popper.js needs to\n   * compute the position of the popper.\n   * For this reason, modifiers should be very performant to avoid bottlenecks.\n   * To learn how to create a modifier, [read the modifiers documentation](https://popper.js.org/docs/v2/modifiers/).\n   */\n  modifiers: PropTypes.arrayOf(PropTypes.shape({\n    data: PropTypes.object,\n    effect: PropTypes.func,\n    enabled: PropTypes.bool,\n    fn: PropTypes.func,\n    name: PropTypes.any,\n    options: PropTypes.object,\n    phase: PropTypes.oneOf(['afterMain', 'afterRead', 'afterWrite', 'beforeMain', 'beforeRead', 'beforeWrite', 'main', 'read', 'write']),\n    requires: PropTypes.arrayOf(PropTypes.string),\n    requiresIfExists: PropTypes.arrayOf(PropTypes.string)\n  })),\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool.isRequired,\n  /**\n   * Popper placement.\n   * @default 'bottom'\n   */\n  placement: PropTypes.oneOf(['auto-end', 'auto-start', 'auto', 'bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n  /**\n   * Options provided to the [`Popper.js`](https://popper.js.org/docs/v2/constructors/#options) instance.\n   * @default {}\n   */\n  popperOptions: PropTypes.shape({\n    modifiers: PropTypes.array,\n    onFirstUpdate: PropTypes.func,\n    placement: PropTypes.oneOf(['auto-end', 'auto-start', 'auto', 'bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n    strategy: PropTypes.oneOf(['absolute', 'fixed'])\n  }),\n  /**\n   * A ref that points to the used popper instance.\n   */\n  popperRef: refType,\n  /**\n   * The props used for each slot inside the Popper.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside the Popper.\n   * Either a string to use a HTML element or a component.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    root: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Help supporting a react-transition-group/Transition component.\n   * @default false\n   */\n  transition: PropTypes.bool\n} : void 0;\nexport default Popper;","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getTooltipUtilityClass(slot) {\n  return generateUtilityClass('MuiTooltip', slot);\n}\nconst tooltipClasses = generateUtilityClasses('MuiTooltip', ['popper', 'popperInteractive', 'popperArrow', 'popperClose', 'tooltip', 'tooltipArrow', 'touch', 'tooltipPlacementLeft', 'tooltipPlacementRight', 'tooltipPlacementTop', 'tooltipPlacementBottom', 'arrow']);\nexport default tooltipClasses;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nconst _excluded = [\"arrow\", \"children\", \"classes\", \"components\", \"componentsProps\", \"describeChild\", \"disableFocusListener\", \"disableHoverListener\", \"disableInteractive\", \"disableTouchListener\", \"enterDelay\", \"enterNextDelay\", \"enterTouchDelay\", \"followCursor\", \"id\", \"leaveDelay\", \"leaveTouchDelay\", \"onClose\", \"onOpen\", \"open\", \"placement\", \"PopperComponent\", \"PopperProps\", \"slotProps\", \"slots\", \"title\", \"TransitionComponent\", \"TransitionProps\"];\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { elementAcceptingRef } from '@mui/utils';\nimport { unstable_composeClasses as composeClasses, appendOwnerState } from '@mui/base';\nimport { alpha } from '@mui/system';\nimport styled from '../styles/styled';\nimport useTheme from '../styles/useTheme';\nimport useThemeProps from '../styles/useThemeProps';\nimport capitalize from '../utils/capitalize';\nimport Grow from '../Grow';\nimport Popper from '../Popper';\nimport useEventCallback from '../utils/useEventCallback';\nimport useForkRef from '../utils/useForkRef';\nimport useId from '../utils/useId';\nimport useIsFocusVisible from '../utils/useIsFocusVisible';\nimport useControlled from '../utils/useControlled';\nimport tooltipClasses, { getTooltipUtilityClass } from './tooltipClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction round(value) {\n  return Math.round(value * 1e5) / 1e5;\n}\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    disableInteractive,\n    arrow,\n    touch,\n    placement\n  } = ownerState;\n  const slots = {\n    popper: ['popper', !disableInteractive && 'popperInteractive', arrow && 'popperArrow'],\n    tooltip: ['tooltip', arrow && 'tooltipArrow', touch && 'touch', `tooltipPlacement${capitalize(placement.split('-')[0])}`],\n    arrow: ['arrow']\n  };\n  return composeClasses(slots, getTooltipUtilityClass, classes);\n};\nconst TooltipPopper = styled(Popper, {\n  name: 'MuiTooltip',\n  slot: 'Popper',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.popper, !ownerState.disableInteractive && styles.popperInteractive, ownerState.arrow && styles.popperArrow, !ownerState.open && styles.popperClose];\n  }\n})(({\n  theme,\n  ownerState,\n  open\n}) => _extends({\n  zIndex: (theme.vars || theme).zIndex.tooltip,\n  pointerEvents: 'none'\n}, !ownerState.disableInteractive && {\n  pointerEvents: 'auto'\n}, !open && {\n  pointerEvents: 'none'\n}, ownerState.arrow && {\n  [`&[data-popper-placement*=\"bottom\"] .${tooltipClasses.arrow}`]: {\n    top: 0,\n    marginTop: '-0.71em',\n    '&::before': {\n      transformOrigin: '0 100%'\n    }\n  },\n  [`&[data-popper-placement*=\"top\"] .${tooltipClasses.arrow}`]: {\n    bottom: 0,\n    marginBottom: '-0.71em',\n    '&::before': {\n      transformOrigin: '100% 0'\n    }\n  },\n  [`&[data-popper-placement*=\"right\"] .${tooltipClasses.arrow}`]: _extends({}, !ownerState.isRtl ? {\n    left: 0,\n    marginLeft: '-0.71em'\n  } : {\n    right: 0,\n    marginRight: '-0.71em'\n  }, {\n    height: '1em',\n    width: '0.71em',\n    '&::before': {\n      transformOrigin: '100% 100%'\n    }\n  }),\n  [`&[data-popper-placement*=\"left\"] .${tooltipClasses.arrow}`]: _extends({}, !ownerState.isRtl ? {\n    right: 0,\n    marginRight: '-0.71em'\n  } : {\n    left: 0,\n    marginLeft: '-0.71em'\n  }, {\n    height: '1em',\n    width: '0.71em',\n    '&::before': {\n      transformOrigin: '0 0'\n    }\n  })\n}));\nconst TooltipTooltip = styled('div', {\n  name: 'MuiTooltip',\n  slot: 'Tooltip',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.tooltip, ownerState.touch && styles.touch, ownerState.arrow && styles.tooltipArrow, styles[`tooltipPlacement${capitalize(ownerState.placement.split('-')[0])}`]];\n  }\n})(({\n  theme,\n  ownerState\n}) => _extends({\n  backgroundColor: theme.vars ? theme.vars.palette.Tooltip.bg : alpha(theme.palette.grey[700], 0.92),\n  borderRadius: (theme.vars || theme).shape.borderRadius,\n  color: (theme.vars || theme).palette.common.white,\n  fontFamily: theme.typography.fontFamily,\n  padding: '4px 8px',\n  fontSize: theme.typography.pxToRem(11),\n  maxWidth: 300,\n  margin: 2,\n  wordWrap: 'break-word',\n  fontWeight: theme.typography.fontWeightMedium\n}, ownerState.arrow && {\n  position: 'relative',\n  margin: 0\n}, ownerState.touch && {\n  padding: '8px 16px',\n  fontSize: theme.typography.pxToRem(14),\n  lineHeight: `${round(16 / 14)}em`,\n  fontWeight: theme.typography.fontWeightRegular\n}, {\n  [`.${tooltipClasses.popper}[data-popper-placement*=\"left\"] &`]: _extends({\n    transformOrigin: 'right center'\n  }, !ownerState.isRtl ? _extends({\n    marginRight: '14px'\n  }, ownerState.touch && {\n    marginRight: '24px'\n  }) : _extends({\n    marginLeft: '14px'\n  }, ownerState.touch && {\n    marginLeft: '24px'\n  })),\n  [`.${tooltipClasses.popper}[data-popper-placement*=\"right\"] &`]: _extends({\n    transformOrigin: 'left center'\n  }, !ownerState.isRtl ? _extends({\n    marginLeft: '14px'\n  }, ownerState.touch && {\n    marginLeft: '24px'\n  }) : _extends({\n    marginRight: '14px'\n  }, ownerState.touch && {\n    marginRight: '24px'\n  })),\n  [`.${tooltipClasses.popper}[data-popper-placement*=\"top\"] &`]: _extends({\n    transformOrigin: 'center bottom',\n    marginBottom: '14px'\n  }, ownerState.touch && {\n    marginBottom: '24px'\n  }),\n  [`.${tooltipClasses.popper}[data-popper-placement*=\"bottom\"] &`]: _extends({\n    transformOrigin: 'center top',\n    marginTop: '14px'\n  }, ownerState.touch && {\n    marginTop: '24px'\n  })\n}));\nconst TooltipArrow = styled('span', {\n  name: 'MuiTooltip',\n  slot: 'Arrow',\n  overridesResolver: (props, styles) => styles.arrow\n})(({\n  theme\n}) => ({\n  overflow: 'hidden',\n  position: 'absolute',\n  width: '1em',\n  height: '0.71em' /* = width / sqrt(2) = (length of the hypotenuse) */,\n  boxSizing: 'border-box',\n  color: theme.vars ? theme.vars.palette.Tooltip.bg : alpha(theme.palette.grey[700], 0.9),\n  '&::before': {\n    content: '\"\"',\n    margin: 'auto',\n    display: 'block',\n    width: '100%',\n    height: '100%',\n    backgroundColor: 'currentColor',\n    transform: 'rotate(45deg)'\n  }\n}));\nlet hystersisOpen = false;\nlet hystersisTimer = null;\nexport function testReset() {\n  hystersisOpen = false;\n  clearTimeout(hystersisTimer);\n}\nfunction composeEventHandler(handler, eventHandler) {\n  return event => {\n    if (eventHandler) {\n      eventHandler(event);\n    }\n    handler(event);\n  };\n}\n\n// TODO v6: Remove PopperComponent, PopperProps, TransitionComponent and TransitionProps.\nconst Tooltip = /*#__PURE__*/React.forwardRef(function Tooltip(inProps, ref) {\n  var _ref, _slots$popper, _ref2, _ref3, _slots$transition, _ref4, _slots$tooltip, _ref5, _slots$arrow, _slotProps$popper, _ref6, _slotProps$popper2, _slotProps$transition, _slotProps$tooltip, _ref7, _slotProps$tooltip2, _slotProps$arrow, _ref8, _slotProps$arrow2;\n  const props = useThemeProps({\n    props: inProps,\n    name: 'MuiTooltip'\n  });\n  const {\n      arrow = false,\n      children,\n      components = {},\n      componentsProps = {},\n      describeChild = false,\n      disableFocusListener = false,\n      disableHoverListener = false,\n      disableInteractive: disableInteractiveProp = false,\n      disableTouchListener = false,\n      enterDelay = 100,\n      enterNextDelay = 0,\n      enterTouchDelay = 700,\n      followCursor = false,\n      id: idProp,\n      leaveDelay = 0,\n      leaveTouchDelay = 1500,\n      onClose,\n      onOpen,\n      open: openProp,\n      placement = 'bottom',\n      PopperComponent: PopperComponentProp,\n      PopperProps = {},\n      slotProps = {},\n      slots = {},\n      title,\n      TransitionComponent: TransitionComponentProp = Grow,\n      TransitionProps\n    } = props,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  const theme = useTheme();\n  const isRtl = theme.direction === 'rtl';\n  const [childNode, setChildNode] = React.useState();\n  const [arrowRef, setArrowRef] = React.useState(null);\n  const ignoreNonTouchEvents = React.useRef(false);\n  const disableInteractive = disableInteractiveProp || followCursor;\n  const closeTimer = React.useRef();\n  const enterTimer = React.useRef();\n  const leaveTimer = React.useRef();\n  const touchTimer = React.useRef();\n  const [openState, setOpenState] = useControlled({\n    controlled: openProp,\n    default: false,\n    name: 'Tooltip',\n    state: 'open'\n  });\n  let open = openState;\n  if (process.env.NODE_ENV !== 'production') {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    const {\n      current: isControlled\n    } = React.useRef(openProp !== undefined);\n\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useEffect(() => {\n      if (childNode && childNode.disabled && !isControlled && title !== '' && childNode.tagName.toLowerCase() === 'button') {\n        console.error(['MUI: You are providing a disabled `button` child to the Tooltip component.', 'A disabled element does not fire events.', \"Tooltip needs to listen to the child element's events to display the title.\", '', 'Add a simple wrapper element, such as a `span`.'].join('\\n'));\n      }\n    }, [title, childNode, isControlled]);\n  }\n  const id = useId(idProp);\n  const prevUserSelect = React.useRef();\n  const stopTouchInteraction = React.useCallback(() => {\n    if (prevUserSelect.current !== undefined) {\n      document.body.style.WebkitUserSelect = prevUserSelect.current;\n      prevUserSelect.current = undefined;\n    }\n    clearTimeout(touchTimer.current);\n  }, []);\n  React.useEffect(() => {\n    return () => {\n      clearTimeout(closeTimer.current);\n      clearTimeout(enterTimer.current);\n      clearTimeout(leaveTimer.current);\n      stopTouchInteraction();\n    };\n  }, [stopTouchInteraction]);\n  const handleOpen = event => {\n    clearTimeout(hystersisTimer);\n    hystersisOpen = true;\n\n    // The mouseover event will trigger for every nested element in the tooltip.\n    // We can skip rerendering when the tooltip is already open.\n    // We are using the mouseover event instead of the mouseenter event to fix a hide/show issue.\n    setOpenState(true);\n    if (onOpen && !open) {\n      onOpen(event);\n    }\n  };\n  const handleClose = useEventCallback(\n  /**\n   * @param {React.SyntheticEvent | Event} event\n   */\n  event => {\n    clearTimeout(hystersisTimer);\n    hystersisTimer = setTimeout(() => {\n      hystersisOpen = false;\n    }, 800 + leaveDelay);\n    setOpenState(false);\n    if (onClose && open) {\n      onClose(event);\n    }\n    clearTimeout(closeTimer.current);\n    closeTimer.current = setTimeout(() => {\n      ignoreNonTouchEvents.current = false;\n    }, theme.transitions.duration.shortest);\n  });\n  const handleEnter = event => {\n    if (ignoreNonTouchEvents.current && event.type !== 'touchstart') {\n      return;\n    }\n\n    // Remove the title ahead of time.\n    // We don't want to wait for the next render commit.\n    // We would risk displaying two tooltips at the same time (native + this one).\n    if (childNode) {\n      childNode.removeAttribute('title');\n    }\n    clearTimeout(enterTimer.current);\n    clearTimeout(leaveTimer.current);\n    if (enterDelay || hystersisOpen && enterNextDelay) {\n      enterTimer.current = setTimeout(() => {\n        handleOpen(event);\n      }, hystersisOpen ? enterNextDelay : enterDelay);\n    } else {\n      handleOpen(event);\n    }\n  };\n  const handleLeave = event => {\n    clearTimeout(enterTimer.current);\n    clearTimeout(leaveTimer.current);\n    leaveTimer.current = setTimeout(() => {\n      handleClose(event);\n    }, leaveDelay);\n  };\n  const {\n    isFocusVisibleRef,\n    onBlur: handleBlurVisible,\n    onFocus: handleFocusVisible,\n    ref: focusVisibleRef\n  } = useIsFocusVisible();\n  // We don't necessarily care about the focusVisible state (which is safe to access via ref anyway).\n  // We just need to re-render the Tooltip if the focus-visible state changes.\n  const [, setChildIsFocusVisible] = React.useState(false);\n  const handleBlur = event => {\n    handleBlurVisible(event);\n    if (isFocusVisibleRef.current === false) {\n      setChildIsFocusVisible(false);\n      handleLeave(event);\n    }\n  };\n  const handleFocus = event => {\n    // Workaround for https://github.com/facebook/react/issues/7769\n    // The autoFocus of React might trigger the event before the componentDidMount.\n    // We need to account for this eventuality.\n    if (!childNode) {\n      setChildNode(event.currentTarget);\n    }\n    handleFocusVisible(event);\n    if (isFocusVisibleRef.current === true) {\n      setChildIsFocusVisible(true);\n      handleEnter(event);\n    }\n  };\n  const detectTouchStart = event => {\n    ignoreNonTouchEvents.current = true;\n    const childrenProps = children.props;\n    if (childrenProps.onTouchStart) {\n      childrenProps.onTouchStart(event);\n    }\n  };\n  const handleMouseOver = handleEnter;\n  const handleMouseLeave = handleLeave;\n  const handleTouchStart = event => {\n    detectTouchStart(event);\n    clearTimeout(leaveTimer.current);\n    clearTimeout(closeTimer.current);\n    stopTouchInteraction();\n    prevUserSelect.current = document.body.style.WebkitUserSelect;\n    // Prevent iOS text selection on long-tap.\n    document.body.style.WebkitUserSelect = 'none';\n    touchTimer.current = setTimeout(() => {\n      document.body.style.WebkitUserSelect = prevUserSelect.current;\n      handleEnter(event);\n    }, enterTouchDelay);\n  };\n  const handleTouchEnd = event => {\n    if (children.props.onTouchEnd) {\n      children.props.onTouchEnd(event);\n    }\n    stopTouchInteraction();\n    clearTimeout(leaveTimer.current);\n    leaveTimer.current = setTimeout(() => {\n      handleClose(event);\n    }, leaveTouchDelay);\n  };\n  React.useEffect(() => {\n    if (!open) {\n      return undefined;\n    }\n\n    /**\n     * @param {KeyboardEvent} nativeEvent\n     */\n    function handleKeyDown(nativeEvent) {\n      // IE11, Edge (prior to using Bink?) use 'Esc'\n      if (nativeEvent.key === 'Escape' || nativeEvent.key === 'Esc') {\n        handleClose(nativeEvent);\n      }\n    }\n    document.addEventListener('keydown', handleKeyDown);\n    return () => {\n      document.removeEventListener('keydown', handleKeyDown);\n    };\n  }, [handleClose, open]);\n  const handleRef = useForkRef(children.ref, focusVisibleRef, setChildNode, ref);\n\n  // There is no point in displaying an empty tooltip.\n  if (!title && title !== 0) {\n    open = false;\n  }\n  const positionRef = React.useRef({\n    x: 0,\n    y: 0\n  });\n  const popperRef = React.useRef();\n  const handleMouseMove = event => {\n    const childrenProps = children.props;\n    if (childrenProps.onMouseMove) {\n      childrenProps.onMouseMove(event);\n    }\n    positionRef.current = {\n      x: event.clientX,\n      y: event.clientY\n    };\n    if (popperRef.current) {\n      popperRef.current.update();\n    }\n  };\n  const nameOrDescProps = {};\n  const titleIsString = typeof title === 'string';\n  if (describeChild) {\n    nameOrDescProps.title = !open && titleIsString && !disableHoverListener ? title : null;\n    nameOrDescProps['aria-describedby'] = open ? id : null;\n  } else {\n    nameOrDescProps['aria-label'] = titleIsString ? title : null;\n    nameOrDescProps['aria-labelledby'] = open && !titleIsString ? id : null;\n  }\n  const childrenProps = _extends({}, nameOrDescProps, other, children.props, {\n    className: clsx(other.className, children.props.className),\n    onTouchStart: detectTouchStart,\n    ref: handleRef\n  }, followCursor ? {\n    onMouseMove: handleMouseMove\n  } : {});\n  if (process.env.NODE_ENV !== 'production') {\n    childrenProps['data-mui-internal-clone-element'] = true;\n\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useEffect(() => {\n      if (childNode && !childNode.getAttribute('data-mui-internal-clone-element')) {\n        console.error(['MUI: The `children` component of the Tooltip is not forwarding its props correctly.', 'Please make sure that props are spread on the same element that the ref is applied to.'].join('\\n'));\n      }\n    }, [childNode]);\n  }\n  const interactiveWrapperListeners = {};\n  if (!disableTouchListener) {\n    childrenProps.onTouchStart = handleTouchStart;\n    childrenProps.onTouchEnd = handleTouchEnd;\n  }\n  if (!disableHoverListener) {\n    childrenProps.onMouseOver = composeEventHandler(handleMouseOver, childrenProps.onMouseOver);\n    childrenProps.onMouseLeave = composeEventHandler(handleMouseLeave, childrenProps.onMouseLeave);\n    if (!disableInteractive) {\n      interactiveWrapperListeners.onMouseOver = handleMouseOver;\n      interactiveWrapperListeners.onMouseLeave = handleMouseLeave;\n    }\n  }\n  if (!disableFocusListener) {\n    childrenProps.onFocus = composeEventHandler(handleFocus, childrenProps.onFocus);\n    childrenProps.onBlur = composeEventHandler(handleBlur, childrenProps.onBlur);\n    if (!disableInteractive) {\n      interactiveWrapperListeners.onFocus = handleFocus;\n      interactiveWrapperListeners.onBlur = handleBlur;\n    }\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    if (children.props.title) {\n      console.error(['MUI: You have provided a `title` prop to the child of <Tooltip />.', `Remove this title prop \\`${children.props.title}\\` or the Tooltip component.`].join('\\n'));\n    }\n  }\n  const popperOptions = React.useMemo(() => {\n    var _PopperProps$popperOp;\n    let tooltipModifiers = [{\n      name: 'arrow',\n      enabled: Boolean(arrowRef),\n      options: {\n        element: arrowRef,\n        padding: 4\n      }\n    }];\n    if ((_PopperProps$popperOp = PopperProps.popperOptions) != null && _PopperProps$popperOp.modifiers) {\n      tooltipModifiers = tooltipModifiers.concat(PopperProps.popperOptions.modifiers);\n    }\n    return _extends({}, PopperProps.popperOptions, {\n      modifiers: tooltipModifiers\n    });\n  }, [arrowRef, PopperProps]);\n  const ownerState = _extends({}, props, {\n    isRtl,\n    arrow,\n    disableInteractive,\n    placement,\n    PopperComponentProp,\n    touch: ignoreNonTouchEvents.current\n  });\n  const classes = useUtilityClasses(ownerState);\n  const PopperComponent = (_ref = (_slots$popper = slots.popper) != null ? _slots$popper : components.Popper) != null ? _ref : TooltipPopper;\n  const TransitionComponent = (_ref2 = (_ref3 = (_slots$transition = slots.transition) != null ? _slots$transition : components.Transition) != null ? _ref3 : TransitionComponentProp) != null ? _ref2 : Grow;\n  const TooltipComponent = (_ref4 = (_slots$tooltip = slots.tooltip) != null ? _slots$tooltip : components.Tooltip) != null ? _ref4 : TooltipTooltip;\n  const ArrowComponent = (_ref5 = (_slots$arrow = slots.arrow) != null ? _slots$arrow : components.Arrow) != null ? _ref5 : TooltipArrow;\n  const popperProps = appendOwnerState(PopperComponent, _extends({}, PopperProps, (_slotProps$popper = slotProps.popper) != null ? _slotProps$popper : componentsProps.popper, {\n    className: clsx(classes.popper, PopperProps == null ? void 0 : PopperProps.className, (_ref6 = (_slotProps$popper2 = slotProps.popper) != null ? _slotProps$popper2 : componentsProps.popper) == null ? void 0 : _ref6.className)\n  }), ownerState);\n  const transitionProps = appendOwnerState(TransitionComponent, _extends({}, TransitionProps, (_slotProps$transition = slotProps.transition) != null ? _slotProps$transition : componentsProps.transition), ownerState);\n  const tooltipProps = appendOwnerState(TooltipComponent, _extends({}, (_slotProps$tooltip = slotProps.tooltip) != null ? _slotProps$tooltip : componentsProps.tooltip, {\n    className: clsx(classes.tooltip, (_ref7 = (_slotProps$tooltip2 = slotProps.tooltip) != null ? _slotProps$tooltip2 : componentsProps.tooltip) == null ? void 0 : _ref7.className)\n  }), ownerState);\n  const tooltipArrowProps = appendOwnerState(ArrowComponent, _extends({}, (_slotProps$arrow = slotProps.arrow) != null ? _slotProps$arrow : componentsProps.arrow, {\n    className: clsx(classes.arrow, (_ref8 = (_slotProps$arrow2 = slotProps.arrow) != null ? _slotProps$arrow2 : componentsProps.arrow) == null ? void 0 : _ref8.className)\n  }), ownerState);\n  return /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [/*#__PURE__*/React.cloneElement(children, childrenProps), /*#__PURE__*/_jsx(PopperComponent, _extends({\n      as: PopperComponentProp != null ? PopperComponentProp : Popper,\n      placement: placement,\n      anchorEl: followCursor ? {\n        getBoundingClientRect: () => ({\n          top: positionRef.current.y,\n          left: positionRef.current.x,\n          right: positionRef.current.x,\n          bottom: positionRef.current.y,\n          width: 0,\n          height: 0\n        })\n      } : childNode,\n      popperRef: popperRef,\n      open: childNode ? open : false,\n      id: id,\n      transition: true\n    }, interactiveWrapperListeners, popperProps, {\n      popperOptions: popperOptions,\n      children: ({\n        TransitionProps: TransitionPropsInner\n      }) => /*#__PURE__*/_jsx(TransitionComponent, _extends({\n        timeout: theme.transitions.duration.shorter\n      }, TransitionPropsInner, transitionProps, {\n        \"data-foo\": \"bar\",\n        children: /*#__PURE__*/_jsxs(TooltipComponent, _extends({}, tooltipProps, {\n          children: [title, arrow ? /*#__PURE__*/_jsx(ArrowComponent, _extends({}, tooltipArrowProps, {\n            ref: setArrowRef\n          })) : null]\n        }))\n      }))\n    }))]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Tooltip.propTypes /* remove-proptypes */ = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n  /**\n   * If `true`, adds an arrow to the tooltip.\n   * @default false\n   */\n  arrow: PropTypes.bool,\n  /**\n   * Tooltip reference element.\n   */\n  children: elementAcceptingRef.isRequired,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The components used for each slot inside.\n   *\n   * This prop is an alias for the `slots` prop.\n   * It's recommended to use the `slots` prop instead.\n   *\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Arrow: PropTypes.elementType,\n    Popper: PropTypes.elementType,\n    Tooltip: PropTypes.elementType,\n    Transition: PropTypes.elementType\n  }),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * This prop is an alias for the `slotProps` prop.\n   * It's recommended to use the `slotProps` prop instead, as `componentsProps` will be deprecated in the future.\n   *\n   * @default {}\n   */\n  componentsProps: PropTypes.shape({\n    arrow: PropTypes.object,\n    popper: PropTypes.object,\n    tooltip: PropTypes.object,\n    transition: PropTypes.object\n  }),\n  /**\n   * Set to `true` if the `title` acts as an accessible description.\n   * By default the `title` acts as an accessible label for the child.\n   * @default false\n   */\n  describeChild: PropTypes.bool,\n  /**\n   * Do not respond to focus-visible events.\n   * @default false\n   */\n  disableFocusListener: PropTypes.bool,\n  /**\n   * Do not respond to hover events.\n   * @default false\n   */\n  disableHoverListener: PropTypes.bool,\n  /**\n   * Makes a tooltip not interactive, i.e. it will close when the user\n   * hovers over the tooltip before the `leaveDelay` is expired.\n   * @default false\n   */\n  disableInteractive: PropTypes.bool,\n  /**\n   * Do not respond to long press touch events.\n   * @default false\n   */\n  disableTouchListener: PropTypes.bool,\n  /**\n   * The number of milliseconds to wait before showing the tooltip.\n   * This prop won't impact the enter touch delay (`enterTouchDelay`).\n   * @default 100\n   */\n  enterDelay: PropTypes.number,\n  /**\n   * The number of milliseconds to wait before showing the tooltip when one was already recently opened.\n   * @default 0\n   */\n  enterNextDelay: PropTypes.number,\n  /**\n   * The number of milliseconds a user must touch the element before showing the tooltip.\n   * @default 700\n   */\n  enterTouchDelay: PropTypes.number,\n  /**\n   * If `true`, the tooltip follow the cursor over the wrapped element.\n   * @default false\n   */\n  followCursor: PropTypes.bool,\n  /**\n   * This prop is used to help implement the accessibility logic.\n   * If you don't provide this prop. It falls back to a randomly generated id.\n   */\n  id: PropTypes.string,\n  /**\n   * The number of milliseconds to wait before hiding the tooltip.\n   * This prop won't impact the leave touch delay (`leaveTouchDelay`).\n   * @default 0\n   */\n  leaveDelay: PropTypes.number,\n  /**\n   * The number of milliseconds after the user stops touching an element before hiding the tooltip.\n   * @default 1500\n   */\n  leaveTouchDelay: PropTypes.number,\n  /**\n   * Callback fired when the component requests to be closed.\n   *\n   * @param {React.SyntheticEvent} event The event source of the callback.\n   */\n  onClose: PropTypes.func,\n  /**\n   * Callback fired when the component requests to be open.\n   *\n   * @param {React.SyntheticEvent} event The event source of the callback.\n   */\n  onOpen: PropTypes.func,\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool,\n  /**\n   * Tooltip placement.\n   * @default 'bottom'\n   */\n  placement: PropTypes.oneOf(['bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n  /**\n   * The component used for the popper.\n   * @default Popper\n   */\n  PopperComponent: PropTypes.elementType,\n  /**\n   * Props applied to the [`Popper`](/material-ui/api/popper/) element.\n   * @default {}\n   */\n  PopperProps: PropTypes.object,\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * This prop is an alias for the `componentsProps` prop, which will be deprecated in the future.\n   *\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    arrow: PropTypes.object,\n    popper: PropTypes.object,\n    tooltip: PropTypes.object,\n    transition: PropTypes.object\n  }),\n  /**\n   * The components used for each slot inside.\n   *\n   * This prop is an alias for the `components` prop, which will be deprecated in the future.\n   *\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    arrow: PropTypes.elementType,\n    popper: PropTypes.elementType,\n    tooltip: PropTypes.elementType,\n    transition: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Tooltip title. Zero-length titles string, undefined, null and false are never displayed.\n   */\n  title: PropTypes.node,\n  /**\n   * The component used for the transition.\n   * [Follow this guide](/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   * @default Grow\n   */\n  TransitionComponent: PropTypes.elementType,\n  /**\n   * Props applied to the transition element.\n   * By default, the element is based on this [`Transition`](http://reactcommunity.org/react-transition-group/transition/) component.\n   */\n  TransitionProps: PropTypes.object\n} : void 0;\nexport default Tooltip;","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Type constant for Firebase Analytics.\n */\nexport const ANALYTICS_TYPE = 'analytics';\n\n// Key to attach FID to in gtag params.\nexport const GA_FID_KEY = 'firebase_id';\nexport const ORIGIN_KEY = 'origin';\n\nexport const FETCH_TIMEOUT_MILLIS = 60 * 1000;\n\nexport const DYNAMIC_CONFIG_URL =\n  'https://firebase.googleapis.com/v1alpha/projects/-/apps/{app-id}/webConfig';\n\nexport const GTAG_URL = 'https://www.googletagmanager.com/gtag/js';\n\nexport const enum GtagCommand {\n  EVENT = 'event',\n  SET = 'set',\n  CONFIG = 'config',\n  CONSENT = 'consent'\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Logger } from '@firebase/logger';\n\nexport const logger = new Logger('@firebase/analytics');\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  CustomParams,\n  ControlParams,\n  EventParams,\n  ConsentSettings\n} from './public-types';\nimport { DynamicConfig, DataLayer, Gtag, MinimalDynamicConfig } from './types';\nimport { GtagCommand, GTAG_URL } from './constants';\nimport { logger } from './logger';\n\n// Possible parameter types for gtag 'event' and 'config' commands\ntype GtagConfigOrEventParams = ControlParams & EventParams & CustomParams;\n\n/**\n * Makeshift polyfill for Promise.allSettled(). Resolves when all promises\n * have either resolved or rejected.\n *\n * @param promises Array of promises to wait for.\n */\nexport function promiseAllSettled<T>(\n  promises: Array<Promise<T>>\n): Promise<T[]> {\n  return Promise.all(promises.map(promise => promise.catch(e => e)));\n}\n\n/**\n * Inserts gtag script tag into the page to asynchronously download gtag.\n * @param dataLayerName Name of datalayer (most often the default, \"_dataLayer\").\n */\nexport function insertScriptTag(\n  dataLayerName: string,\n  measurementId: string\n): void {\n  const script = document.createElement('script');\n  // We are not providing an analyticsId in the URL because it would trigger a `page_view`\n  // without fid. We will initialize ga-id using gtag (config) command together with fid.\n  script.src = `${GTAG_URL}?l=${dataLayerName}&id=${measurementId}`;\n  script.async = true;\n  document.head.appendChild(script);\n}\n\n/**\n * Get reference to, or create, global datalayer.\n * @param dataLayerName Name of datalayer (most often the default, \"_dataLayer\").\n */\nexport function getOrCreateDataLayer(dataLayerName: string): DataLayer {\n  // Check for existing dataLayer and create if needed.\n  let dataLayer: DataLayer = [];\n  if (Array.isArray(window[dataLayerName])) {\n    dataLayer = window[dataLayerName] as DataLayer;\n  } else {\n    window[dataLayerName] = dataLayer;\n  }\n  return dataLayer;\n}\n\n/**\n * Wrapped gtag logic when gtag is called with 'config' command.\n *\n * @param gtagCore Basic gtag function that just appends to dataLayer.\n * @param initializationPromisesMap Map of appIds to their initialization promises.\n * @param dynamicConfigPromisesList Array of dynamic config fetch promises.\n * @param measurementIdToAppId Map of GA measurementIDs to corresponding Firebase appId.\n * @param measurementId GA Measurement ID to set config for.\n * @param gtagParams Gtag config params to set.\n */\nasync function gtagOnConfig(\n  gtagCore: Gtag,\n  initializationPromisesMap: { [appId: string]: Promise<string> },\n  dynamicConfigPromisesList: Array<\n    Promise<DynamicConfig | MinimalDynamicConfig>\n  >,\n  measurementIdToAppId: { [measurementId: string]: string },\n  measurementId: string,\n  gtagParams?: ControlParams & EventParams & CustomParams\n): Promise<void> {\n  // If config is already fetched, we know the appId and can use it to look up what FID promise we\n  /// are waiting for, and wait only on that one.\n  const correspondingAppId = measurementIdToAppId[measurementId as string];\n  try {\n    if (correspondingAppId) {\n      await initializationPromisesMap[correspondingAppId];\n    } else {\n      // If config is not fetched yet, wait for all configs (we don't know which one we need) and\n      // find the appId (if any) corresponding to this measurementId. If there is one, wait on\n      // that appId's initialization promise. If there is none, promise resolves and gtag\n      // call goes through.\n      const dynamicConfigResults = await promiseAllSettled(\n        dynamicConfigPromisesList\n      );\n      const foundConfig = dynamicConfigResults.find(\n        config => config.measurementId === measurementId\n      );\n      if (foundConfig) {\n        await initializationPromisesMap[foundConfig.appId];\n      }\n    }\n  } catch (e) {\n    logger.error(e);\n  }\n  gtagCore(GtagCommand.CONFIG, measurementId, gtagParams);\n}\n\n/**\n * Wrapped gtag logic when gtag is called with 'event' command.\n *\n * @param gtagCore Basic gtag function that just appends to dataLayer.\n * @param initializationPromisesMap Map of appIds to their initialization promises.\n * @param dynamicConfigPromisesList Array of dynamic config fetch promises.\n * @param measurementId GA Measurement ID to log event to.\n * @param gtagParams Params to log with this event.\n */\nasync function gtagOnEvent(\n  gtagCore: Gtag,\n  initializationPromisesMap: { [appId: string]: Promise<string> },\n  dynamicConfigPromisesList: Array<\n    Promise<DynamicConfig | MinimalDynamicConfig>\n  >,\n  measurementId: string,\n  gtagParams?: ControlParams & EventParams & CustomParams\n): Promise<void> {\n  try {\n    let initializationPromisesToWaitFor: Array<Promise<string>> = [];\n\n    // If there's a 'send_to' param, check if any ID specified matches\n    // an initializeIds() promise we are waiting for.\n    if (gtagParams && gtagParams['send_to']) {\n      let gaSendToList: string | string[] = gtagParams['send_to'];\n      // Make it an array if is isn't, so it can be dealt with the same way.\n      if (!Array.isArray(gaSendToList)) {\n        gaSendToList = [gaSendToList];\n      }\n      // Checking 'send_to' fields requires having all measurement ID results back from\n      // the dynamic config fetch.\n      const dynamicConfigResults = await promiseAllSettled(\n        dynamicConfigPromisesList\n      );\n      for (const sendToId of gaSendToList) {\n        // Any fetched dynamic measurement ID that matches this 'send_to' ID\n        const foundConfig = dynamicConfigResults.find(\n          config => config.measurementId === sendToId\n        );\n        const initializationPromise =\n          foundConfig && initializationPromisesMap[foundConfig.appId];\n        if (initializationPromise) {\n          initializationPromisesToWaitFor.push(initializationPromise);\n        } else {\n          // Found an item in 'send_to' that is not associated\n          // directly with an FID, possibly a group.  Empty this array,\n          // exit the loop early, and let it get populated below.\n          initializationPromisesToWaitFor = [];\n          break;\n        }\n      }\n    }\n\n    // This will be unpopulated if there was no 'send_to' field , or\n    // if not all entries in the 'send_to' field could be mapped to\n    // a FID. In these cases, wait on all pending initialization promises.\n    if (initializationPromisesToWaitFor.length === 0) {\n      initializationPromisesToWaitFor = Object.values(\n        initializationPromisesMap\n      );\n    }\n\n    // Run core gtag function with args after all relevant initialization\n    // promises have been resolved.\n    await Promise.all(initializationPromisesToWaitFor);\n    // Workaround for http://b/141370449 - third argument cannot be undefined.\n    gtagCore(GtagCommand.EVENT, measurementId, gtagParams || {});\n  } catch (e) {\n    logger.error(e);\n  }\n}\n\n/**\n * Wraps a standard gtag function with extra code to wait for completion of\n * relevant initialization promises before sending requests.\n *\n * @param gtagCore Basic gtag function that just appends to dataLayer.\n * @param initializationPromisesMap Map of appIds to their initialization promises.\n * @param dynamicConfigPromisesList Array of dynamic config fetch promises.\n * @param measurementIdToAppId Map of GA measurementIDs to corresponding Firebase appId.\n */\nfunction wrapGtag(\n  gtagCore: Gtag,\n  /**\n   * Allows wrapped gtag calls to wait on whichever intialization promises are required,\n   * depending on the contents of the gtag params' `send_to` field, if any.\n   */\n  initializationPromisesMap: { [appId: string]: Promise<string> },\n  /**\n   * Wrapped gtag calls sometimes require all dynamic config fetches to have returned\n   * before determining what initialization promises (which include FIDs) to wait for.\n   */\n  dynamicConfigPromisesList: Array<\n    Promise<DynamicConfig | MinimalDynamicConfig>\n  >,\n  /**\n   * Wrapped gtag config calls can narrow down which initialization promise (with FID)\n   * to wait for if the measurementId is already fetched, by getting the corresponding appId,\n   * which is the key for the initialization promises map.\n   */\n  measurementIdToAppId: { [measurementId: string]: string }\n): Gtag {\n  /**\n   * Wrapper around gtag that ensures FID is sent with gtag calls.\n   * @param command Gtag command type.\n   * @param idOrNameOrParams Measurement ID if command is EVENT/CONFIG, params if command is SET.\n   * @param gtagParams Params if event is EVENT/CONFIG.\n   */\n  async function gtagWrapper(\n    command: 'config' | 'set' | 'event' | 'consent',\n    idOrNameOrParams: string | ControlParams,\n    gtagParams?: GtagConfigOrEventParams | ConsentSettings\n  ): Promise<void> {\n    try {\n      // If event, check that relevant initialization promises have completed.\n      if (command === GtagCommand.EVENT) {\n        // If EVENT, second arg must be measurementId.\n        await gtagOnEvent(\n          gtagCore,\n          initializationPromisesMap,\n          dynamicConfigPromisesList,\n          idOrNameOrParams as string,\n          gtagParams as GtagConfigOrEventParams\n        );\n      } else if (command === GtagCommand.CONFIG) {\n        // If CONFIG, second arg must be measurementId.\n        await gtagOnConfig(\n          gtagCore,\n          initializationPromisesMap,\n          dynamicConfigPromisesList,\n          measurementIdToAppId,\n          idOrNameOrParams as string,\n          gtagParams as GtagConfigOrEventParams\n        );\n      } else if (command === GtagCommand.CONSENT) {\n        // If CONFIG, second arg must be measurementId.\n        gtagCore(GtagCommand.CONSENT, 'update', gtagParams as ConsentSettings);\n      } else {\n        // If SET, second arg must be params.\n        gtagCore(GtagCommand.SET, idOrNameOrParams as CustomParams);\n      }\n    } catch (e) {\n      logger.error(e);\n    }\n  }\n  return gtagWrapper as Gtag;\n}\n\n/**\n * Creates global gtag function or wraps existing one if found.\n * This wrapped function attaches Firebase instance ID (FID) to gtag 'config' and\n * 'event' calls that belong to the GAID associated with this Firebase instance.\n *\n * @param initializationPromisesMap Map of appIds to their initialization promises.\n * @param dynamicConfigPromisesList Array of dynamic config fetch promises.\n * @param measurementIdToAppId Map of GA measurementIDs to corresponding Firebase appId.\n * @param dataLayerName Name of global GA datalayer array.\n * @param gtagFunctionName Name of global gtag function (\"gtag\" if not user-specified).\n */\nexport function wrapOrCreateGtag(\n  initializationPromisesMap: { [appId: string]: Promise<string> },\n  dynamicConfigPromisesList: Array<\n    Promise<DynamicConfig | MinimalDynamicConfig>\n  >,\n  measurementIdToAppId: { [measurementId: string]: string },\n  dataLayerName: string,\n  gtagFunctionName: string\n): {\n  gtagCore: Gtag;\n  wrappedGtag: Gtag;\n} {\n  // Create a basic core gtag function\n  let gtagCore: Gtag = function (..._args: unknown[]) {\n    // Must push IArguments object, not an array.\n    (window[dataLayerName] as DataLayer).push(arguments);\n  };\n\n  // Replace it with existing one if found\n  if (\n    window[gtagFunctionName] &&\n    typeof window[gtagFunctionName] === 'function'\n  ) {\n    // @ts-ignore\n    gtagCore = window[gtagFunctionName];\n  }\n\n  window[gtagFunctionName] = wrapGtag(\n    gtagCore,\n    initializationPromisesMap,\n    dynamicConfigPromisesList,\n    measurementIdToAppId\n  );\n\n  return {\n    gtagCore,\n    wrappedGtag: window[gtagFunctionName] as Gtag\n  };\n}\n\n/**\n * Returns the script tag in the DOM matching both the gtag url pattern\n * and the provided data layer name.\n */\nexport function findGtagScriptOnPage(\n  dataLayerName: string\n): HTMLScriptElement | null {\n  const scriptTags = window.document.getElementsByTagName('script');\n  for (const tag of Object.values(scriptTags)) {\n    if (\n      tag.src &&\n      tag.src.includes(GTAG_URL) &&\n      tag.src.includes(dataLayerName)\n    ) {\n      return tag;\n    }\n  }\n  return null;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ErrorFactory, ErrorMap } from '@firebase/util';\n\nexport const enum AnalyticsError {\n  ALREADY_EXISTS = 'already-exists',\n  ALREADY_INITIALIZED = 'already-initialized',\n  ALREADY_INITIALIZED_SETTINGS = 'already-initialized-settings',\n  INTEROP_COMPONENT_REG_FAILED = 'interop-component-reg-failed',\n  INVALID_ANALYTICS_CONTEXT = 'invalid-analytics-context',\n  INDEXEDDB_UNAVAILABLE = 'indexeddb-unavailable',\n  FETCH_THROTTLE = 'fetch-throttle',\n  CONFIG_FETCH_FAILED = 'config-fetch-failed',\n  NO_API_KEY = 'no-api-key',\n  NO_APP_ID = 'no-app-id'\n}\n\nconst ERRORS: ErrorMap<AnalyticsError> = {\n  [AnalyticsError.ALREADY_EXISTS]:\n    'A Firebase Analytics instance with the appId {$id} ' +\n    ' already exists. ' +\n    'Only one Firebase Analytics instance can be created for each appId.',\n  [AnalyticsError.ALREADY_INITIALIZED]:\n    'initializeAnalytics() cannot be called again with different options than those ' +\n    'it was initially called with. It can be called again with the same options to ' +\n    'return the existing instance, or getAnalytics() can be used ' +\n    'to get a reference to the already-intialized instance.',\n  [AnalyticsError.ALREADY_INITIALIZED_SETTINGS]:\n    'Firebase Analytics has already been initialized.' +\n    'settings() must be called before initializing any Analytics instance' +\n    'or it will have no effect.',\n  [AnalyticsError.INTEROP_COMPONENT_REG_FAILED]:\n    'Firebase Analytics Interop Component failed to instantiate: {$reason}',\n  [AnalyticsError.INVALID_ANALYTICS_CONTEXT]:\n    'Firebase Analytics is not supported in this environment. ' +\n    'Wrap initialization of analytics in analytics.isSupported() ' +\n    'to prevent initialization in unsupported environments. Details: {$errorInfo}',\n  [AnalyticsError.INDEXEDDB_UNAVAILABLE]:\n    'IndexedDB unavailable or restricted in this environment. ' +\n    'Wrap initialization of analytics in analytics.isSupported() ' +\n    'to prevent initialization in unsupported environments. Details: {$errorInfo}',\n  [AnalyticsError.FETCH_THROTTLE]:\n    'The config fetch request timed out while in an exponential backoff state.' +\n    ' Unix timestamp in milliseconds when fetch request throttling ends: {$throttleEndTimeMillis}.',\n  [AnalyticsError.CONFIG_FETCH_FAILED]:\n    'Dynamic config fetch failed: [{$httpStatus}] {$responseMessage}',\n  [AnalyticsError.NO_API_KEY]:\n    'The \"apiKey\" field is empty in the local Firebase config. Firebase Analytics requires this field to' +\n    'contain a valid API key.',\n  [AnalyticsError.NO_APP_ID]:\n    'The \"appId\" field is empty in the local Firebase config. Firebase Analytics requires this field to' +\n    'contain a valid app ID.'\n};\n\ninterface ErrorParams {\n  [AnalyticsError.ALREADY_EXISTS]: { id: string };\n  [AnalyticsError.INTEROP_COMPONENT_REG_FAILED]: { reason: Error };\n  [AnalyticsError.FETCH_THROTTLE]: { throttleEndTimeMillis: number };\n  [AnalyticsError.CONFIG_FETCH_FAILED]: {\n    httpStatus: number;\n    responseMessage: string;\n  };\n  [AnalyticsError.INVALID_ANALYTICS_CONTEXT]: { errorInfo: string };\n  [AnalyticsError.INDEXEDDB_UNAVAILABLE]: { errorInfo: string };\n}\n\nexport const ERROR_FACTORY = new ErrorFactory<AnalyticsError, ErrorParams>(\n  'analytics',\n  'Analytics',\n  ERRORS\n);\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Most logic is copied from packages/remote-config/src/client/retrying_client.ts\n */\n\nimport { FirebaseApp } from '@firebase/app';\nimport { DynamicConfig, ThrottleMetadata, MinimalDynamicConfig } from './types';\nimport { FirebaseError, calculateBackoffMillis } from '@firebase/util';\nimport { AnalyticsError, ERROR_FACTORY } from './errors';\nimport { DYNAMIC_CONFIG_URL, FETCH_TIMEOUT_MILLIS } from './constants';\nimport { logger } from './logger';\n\n// App config fields needed by analytics.\nexport interface AppFields {\n  appId: string;\n  apiKey: string;\n  measurementId?: string;\n}\n\n/**\n * Backoff factor for 503 errors, which we want to be conservative about\n * to avoid overloading servers. Each retry interval will be\n * BASE_INTERVAL_MILLIS * LONG_RETRY_FACTOR ^ retryCount, so the second one\n * will be ~30 seconds (with fuzzing).\n */\nexport const LONG_RETRY_FACTOR = 30;\n\n/**\n * Base wait interval to multiplied by backoffFactor^backoffCount.\n */\nconst BASE_INTERVAL_MILLIS = 1000;\n\n/**\n * Stubbable retry data storage class.\n */\nclass RetryData {\n  constructor(\n    public throttleMetadata: { [appId: string]: ThrottleMetadata } = {},\n    public intervalMillis: number = BASE_INTERVAL_MILLIS\n  ) {}\n\n  getThrottleMetadata(appId: string): ThrottleMetadata {\n    return this.throttleMetadata[appId];\n  }\n\n  setThrottleMetadata(appId: string, metadata: ThrottleMetadata): void {\n    this.throttleMetadata[appId] = metadata;\n  }\n\n  deleteThrottleMetadata(appId: string): void {\n    delete this.throttleMetadata[appId];\n  }\n}\n\nconst defaultRetryData = new RetryData();\n\n/**\n * Set GET request headers.\n * @param apiKey App API key.\n */\nfunction getHeaders(apiKey: string): Headers {\n  return new Headers({\n    Accept: 'application/json',\n    'x-goog-api-key': apiKey\n  });\n}\n\n/**\n * Fetches dynamic config from backend.\n * @param app Firebase app to fetch config for.\n */\nexport async function fetchDynamicConfig(\n  appFields: AppFields\n): Promise<DynamicConfig> {\n  const { appId, apiKey } = appFields;\n  const request: RequestInit = {\n    method: 'GET',\n    headers: getHeaders(apiKey)\n  };\n  const appUrl = DYNAMIC_CONFIG_URL.replace('{app-id}', appId);\n  const response = await fetch(appUrl, request);\n  if (response.status !== 200 && response.status !== 304) {\n    let errorMessage = '';\n    try {\n      // Try to get any error message text from server response.\n      const jsonResponse = (await response.json()) as {\n        error?: { message?: string };\n      };\n      if (jsonResponse.error?.message) {\n        errorMessage = jsonResponse.error.message;\n      }\n    } catch (_ignored) {}\n    throw ERROR_FACTORY.create(AnalyticsError.CONFIG_FETCH_FAILED, {\n      httpStatus: response.status,\n      responseMessage: errorMessage\n    });\n  }\n  return response.json();\n}\n\n/**\n * Fetches dynamic config from backend, retrying if failed.\n * @param app Firebase app to fetch config for.\n */\nexport async function fetchDynamicConfigWithRetry(\n  app: FirebaseApp,\n  // retryData and timeoutMillis are parameterized to allow passing a different value for testing.\n  retryData: RetryData = defaultRetryData,\n  timeoutMillis?: number\n): Promise<DynamicConfig | MinimalDynamicConfig> {\n  const { appId, apiKey, measurementId } = app.options;\n\n  if (!appId) {\n    throw ERROR_FACTORY.create(AnalyticsError.NO_APP_ID);\n  }\n\n  if (!apiKey) {\n    if (measurementId) {\n      return {\n        measurementId,\n        appId\n      };\n    }\n    throw ERROR_FACTORY.create(AnalyticsError.NO_API_KEY);\n  }\n\n  const throttleMetadata: ThrottleMetadata = retryData.getThrottleMetadata(\n    appId\n  ) || {\n    backoffCount: 0,\n    throttleEndTimeMillis: Date.now()\n  };\n\n  const signal = new AnalyticsAbortSignal();\n\n  setTimeout(\n    async () => {\n      // Note a very low delay, eg < 10ms, can elapse before listeners are initialized.\n      signal.abort();\n    },\n    timeoutMillis !== undefined ? timeoutMillis : FETCH_TIMEOUT_MILLIS\n  );\n\n  return attemptFetchDynamicConfigWithRetry(\n    { appId, apiKey, measurementId },\n    throttleMetadata,\n    signal,\n    retryData\n  );\n}\n\n/**\n * Runs one retry attempt.\n * @param appFields Necessary app config fields.\n * @param throttleMetadata Ongoing metadata to determine throttling times.\n * @param signal Abort signal.\n */\nasync function attemptFetchDynamicConfigWithRetry(\n  appFields: AppFields,\n  { throttleEndTimeMillis, backoffCount }: ThrottleMetadata,\n  signal: AnalyticsAbortSignal,\n  retryData: RetryData = defaultRetryData // for testing\n): Promise<DynamicConfig | MinimalDynamicConfig> {\n  const { appId, measurementId } = appFields;\n  // Starts with a (potentially zero) timeout to support resumption from stored state.\n  // Ensures the throttle end time is honored if the last attempt timed out.\n  // Note the SDK will never make a request if the fetch timeout expires at this point.\n  try {\n    await setAbortableTimeout(signal, throttleEndTimeMillis);\n  } catch (e) {\n    if (measurementId) {\n      logger.warn(\n        `Timed out fetching this Firebase app's measurement ID from the server.` +\n          ` Falling back to the measurement ID ${measurementId}` +\n          ` provided in the \"measurementId\" field in the local Firebase config. [${\n            (e as Error)?.message\n          }]`\n      );\n      return { appId, measurementId };\n    }\n    throw e;\n  }\n\n  try {\n    const response = await fetchDynamicConfig(appFields);\n\n    // Note the SDK only clears throttle state if response is success or non-retriable.\n    retryData.deleteThrottleMetadata(appId);\n\n    return response;\n  } catch (e) {\n    const error = e as Error;\n    if (!isRetriableError(error)) {\n      retryData.deleteThrottleMetadata(appId);\n      if (measurementId) {\n        logger.warn(\n          `Failed to fetch this Firebase app's measurement ID from the server.` +\n            ` Falling back to the measurement ID ${measurementId}` +\n            ` provided in the \"measurementId\" field in the local Firebase config. [${error?.message}]`\n        );\n        return { appId, measurementId };\n      } else {\n        throw e;\n      }\n    }\n\n    const backoffMillis =\n      Number(error?.customData?.httpStatus) === 503\n        ? calculateBackoffMillis(\n            backoffCount,\n            retryData.intervalMillis,\n            LONG_RETRY_FACTOR\n          )\n        : calculateBackoffMillis(backoffCount, retryData.intervalMillis);\n\n    // Increments backoff state.\n    const throttleMetadata = {\n      throttleEndTimeMillis: Date.now() + backoffMillis,\n      backoffCount: backoffCount + 1\n    };\n\n    // Persists state.\n    retryData.setThrottleMetadata(appId, throttleMetadata);\n    logger.debug(`Calling attemptFetch again in ${backoffMillis} millis`);\n\n    return attemptFetchDynamicConfigWithRetry(\n      appFields,\n      throttleMetadata,\n      signal,\n      retryData\n    );\n  }\n}\n\n/**\n * Supports waiting on a backoff by:\n *\n * <ul>\n *   <li>Promisifying setTimeout, so we can set a timeout in our Promise chain</li>\n *   <li>Listening on a signal bus for abort events, just like the Fetch API</li>\n *   <li>Failing in the same way the Fetch API fails, so timing out a live request and a throttled\n *       request appear the same.</li>\n * </ul>\n *\n * <p>Visible for testing.\n */\nfunction setAbortableTimeout(\n  signal: AnalyticsAbortSignal,\n  throttleEndTimeMillis: number\n): Promise<void> {\n  return new Promise((resolve, reject) => {\n    // Derives backoff from given end time, normalizing negative numbers to zero.\n    const backoffMillis = Math.max(throttleEndTimeMillis - Date.now(), 0);\n\n    const timeout = setTimeout(resolve, backoffMillis);\n\n    // Adds listener, rather than sets onabort, because signal is a shared object.\n    signal.addEventListener(() => {\n      clearTimeout(timeout);\n      // If the request completes before this timeout, the rejection has no effect.\n      reject(\n        ERROR_FACTORY.create(AnalyticsError.FETCH_THROTTLE, {\n          throttleEndTimeMillis\n        })\n      );\n    });\n  });\n}\n\ntype RetriableError = FirebaseError & { customData: { httpStatus: string } };\n\n/**\n * Returns true if the {@link Error} indicates a fetch request may succeed later.\n */\nfunction isRetriableError(e: Error): e is RetriableError {\n  if (!(e instanceof FirebaseError) || !e.customData) {\n    return false;\n  }\n\n  // Uses string index defined by ErrorData, which FirebaseError implements.\n  const httpStatus = Number(e.customData['httpStatus']);\n\n  return (\n    httpStatus === 429 ||\n    httpStatus === 500 ||\n    httpStatus === 503 ||\n    httpStatus === 504\n  );\n}\n\n/**\n * Shims a minimal AbortSignal (copied from Remote Config).\n *\n * <p>AbortController's AbortSignal conveniently decouples fetch timeout logic from other aspects\n * of networking, such as retries. Firebase doesn't use AbortController enough to justify a\n * polyfill recommendation, like we do with the Fetch API, but this minimal shim can easily be\n * swapped out if/when we do.\n */\nexport class AnalyticsAbortSignal {\n  listeners: Array<() => void> = [];\n  addEventListener(listener: () => void): void {\n    this.listeners.push(listener);\n  }\n  abort(): void {\n    this.listeners.forEach(listener => listener());\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  AnalyticsCallOptions,\n  CustomParams,\n  ControlParams,\n  EventParams,\n  ConsentSettings\n} from './public-types';\nimport { Gtag } from './types';\nimport { GtagCommand } from './constants';\n\n/**\n * Event parameters to set on 'gtag' during initialization.\n */\nexport let defaultEventParametersForInit: CustomParams | undefined;\n\n/**\n * Logs an analytics event through the Firebase SDK.\n *\n * @param gtagFunction Wrapped gtag function that waits for fid to be set before sending an event\n * @param eventName Google Analytics event name, choose from standard list or use a custom string.\n * @param eventParams Analytics event parameters.\n */\nexport async function logEvent(\n  gtagFunction: Gtag,\n  initializationPromise: Promise<string>,\n  eventName: string,\n  eventParams?: EventParams,\n  options?: AnalyticsCallOptions\n): Promise<void> {\n  if (options && options.global) {\n    gtagFunction(GtagCommand.EVENT, eventName, eventParams);\n    return;\n  } else {\n    const measurementId = await initializationPromise;\n    const params: EventParams | ControlParams = {\n      ...eventParams,\n      'send_to': measurementId\n    };\n    gtagFunction(GtagCommand.EVENT, eventName, params);\n  }\n}\n\n/**\n * Set screen_name parameter for this Google Analytics ID.\n *\n * @deprecated Use {@link logEvent} with `eventName` as 'screen_view' and add relevant `eventParams`.\n * See {@link https://firebase.google.com/docs/analytics/screenviews | Track Screenviews}.\n *\n * @param gtagFunction Wrapped gtag function that waits for fid to be set before sending an event\n * @param screenName Screen name string to set.\n */\nexport async function setCurrentScreen(\n  gtagFunction: Gtag,\n  initializationPromise: Promise<string>,\n  screenName: string | null,\n  options?: AnalyticsCallOptions\n): Promise<void> {\n  if (options && options.global) {\n    gtagFunction(GtagCommand.SET, { 'screen_name': screenName });\n    return Promise.resolve();\n  } else {\n    const measurementId = await initializationPromise;\n    gtagFunction(GtagCommand.CONFIG, measurementId, {\n      update: true,\n      'screen_name': screenName\n    });\n  }\n}\n\n/**\n * Set user_id parameter for this Google Analytics ID.\n *\n * @param gtagFunction Wrapped gtag function that waits for fid to be set before sending an event\n * @param id User ID string to set\n */\nexport async function setUserId(\n  gtagFunction: Gtag,\n  initializationPromise: Promise<string>,\n  id: string | null,\n  options?: AnalyticsCallOptions\n): Promise<void> {\n  if (options && options.global) {\n    gtagFunction(GtagCommand.SET, { 'user_id': id });\n    return Promise.resolve();\n  } else {\n    const measurementId = await initializationPromise;\n    gtagFunction(GtagCommand.CONFIG, measurementId, {\n      update: true,\n      'user_id': id\n    });\n  }\n}\n\n/**\n * Set all other user properties other than user_id and screen_name.\n *\n * @param gtagFunction Wrapped gtag function that waits for fid to be set before sending an event\n * @param properties Map of user properties to set\n */\nexport async function setUserProperties(\n  gtagFunction: Gtag,\n  initializationPromise: Promise<string>,\n  properties: CustomParams,\n  options?: AnalyticsCallOptions\n): Promise<void> {\n  if (options && options.global) {\n    const flatProperties: { [key: string]: unknown } = {};\n    for (const key of Object.keys(properties)) {\n      // use dot notation for merge behavior in gtag.js\n      flatProperties[`user_properties.${key}`] = properties[key];\n    }\n    gtagFunction(GtagCommand.SET, flatProperties);\n    return Promise.resolve();\n  } else {\n    const measurementId = await initializationPromise;\n    gtagFunction(GtagCommand.CONFIG, measurementId, {\n      update: true,\n      'user_properties': properties\n    });\n  }\n}\n\n/**\n * Set whether collection is enabled for this ID.\n *\n * @param enabled If true, collection is enabled for this ID.\n */\nexport async function setAnalyticsCollectionEnabled(\n  initializationPromise: Promise<string>,\n  enabled: boolean\n): Promise<void> {\n  const measurementId = await initializationPromise;\n  window[`ga-disable-${measurementId}`] = !enabled;\n}\n\n/**\n * Consent parameters to default to during 'gtag' initialization.\n */\nexport let defaultConsentSettingsForInit: ConsentSettings | undefined;\n\n/**\n * Sets the variable {@link defaultConsentSettingsForInit} for use in the initialization of\n * analytics.\n *\n * @param consentSettings Maps the applicable end user consent state for gtag.js.\n */\nexport function _setConsentDefaultForInit(\n  consentSettings?: ConsentSettings\n): void {\n  defaultConsentSettingsForInit = consentSettings;\n}\n\n/**\n * Sets the variable `defaultEventParametersForInit` for use in the initialization of\n * analytics.\n *\n * @param customParams Any custom params the user may pass to gtag.js.\n */\nexport function _setDefaultEventParametersForInit(\n  customParams?: CustomParams\n): void {\n  defaultEventParametersForInit = customParams;\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DynamicConfig, Gtag, MinimalDynamicConfig } from './types';\nimport { GtagCommand, GA_FID_KEY, ORIGIN_KEY } from './constants';\nimport { _FirebaseInstallationsInternal } from '@firebase/installations';\nimport { fetchDynamicConfigWithRetry } from './get-config';\nimport { logger } from './logger';\nimport { FirebaseApp } from '@firebase/app';\nimport {\n  isIndexedDBAvailable,\n  validateIndexedDBOpenable\n} from '@firebase/util';\nimport { ERROR_FACTORY, AnalyticsError } from './errors';\nimport { findGtagScriptOnPage, insertScriptTag } from './helpers';\nimport { AnalyticsSettings } from './public-types';\nimport {\n  defaultConsentSettingsForInit,\n  _setConsentDefaultForInit,\n  defaultEventParametersForInit,\n  _setDefaultEventParametersForInit\n} from './functions';\n\nasync function validateIndexedDB(): Promise<boolean> {\n  if (!isIndexedDBAvailable()) {\n    logger.warn(\n      ERROR_FACTORY.create(AnalyticsError.INDEXEDDB_UNAVAILABLE, {\n        errorInfo: 'IndexedDB is not available in this environment.'\n      }).message\n    );\n    return false;\n  } else {\n    try {\n      await validateIndexedDBOpenable();\n    } catch (e) {\n      logger.warn(\n        ERROR_FACTORY.create(AnalyticsError.INDEXEDDB_UNAVAILABLE, {\n          errorInfo: (e as Error)?.toString()\n        }).message\n      );\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Initialize the analytics instance in gtag.js by calling config command with fid.\n *\n * NOTE: We combine analytics initialization and setting fid together because we want fid to be\n * part of the `page_view` event that's sent during the initialization\n * @param app Firebase app\n * @param gtagCore The gtag function that's not wrapped.\n * @param dynamicConfigPromisesList Array of all dynamic config promises.\n * @param measurementIdToAppId Maps measurementID to appID.\n * @param installations _FirebaseInstallationsInternal instance.\n *\n * @returns Measurement ID.\n */\nexport async function _initializeAnalytics(\n  app: FirebaseApp,\n  dynamicConfigPromisesList: Array<\n    Promise<DynamicConfig | MinimalDynamicConfig>\n  >,\n  measurementIdToAppId: { [key: string]: string },\n  installations: _FirebaseInstallationsInternal,\n  gtagCore: Gtag,\n  dataLayerName: string,\n  options?: AnalyticsSettings\n): Promise<string> {\n  const dynamicConfigPromise = fetchDynamicConfigWithRetry(app);\n  // Once fetched, map measurementIds to appId, for ease of lookup in wrapped gtag function.\n  dynamicConfigPromise\n    .then(config => {\n      measurementIdToAppId[config.measurementId] = config.appId;\n      if (\n        app.options.measurementId &&\n        config.measurementId !== app.options.measurementId\n      ) {\n        logger.warn(\n          `The measurement ID in the local Firebase config (${app.options.measurementId})` +\n            ` does not match the measurement ID fetched from the server (${config.measurementId}).` +\n            ` To ensure analytics events are always sent to the correct Analytics property,` +\n            ` update the` +\n            ` measurement ID field in the local config or remove it from the local config.`\n        );\n      }\n    })\n    .catch(e => logger.error(e));\n  // Add to list to track state of all dynamic config promises.\n  dynamicConfigPromisesList.push(dynamicConfigPromise);\n\n  const fidPromise: Promise<string | undefined> = validateIndexedDB().then(\n    envIsValid => {\n      if (envIsValid) {\n        return installations.getId();\n      } else {\n        return undefined;\n      }\n    }\n  );\n\n  const [dynamicConfig, fid] = await Promise.all([\n    dynamicConfigPromise,\n    fidPromise\n  ]);\n\n  // Detect if user has already put the gtag <script> tag on this page with the passed in\n  // data layer name.\n  if (!findGtagScriptOnPage(dataLayerName)) {\n    insertScriptTag(dataLayerName, dynamicConfig.measurementId);\n  }\n\n  // Detects if there are consent settings that need to be configured.\n  if (defaultConsentSettingsForInit) {\n    gtagCore(GtagCommand.CONSENT, 'default', defaultConsentSettingsForInit);\n    _setConsentDefaultForInit(undefined);\n  }\n\n  // This command initializes gtag.js and only needs to be called once for the entire web app,\n  // but since it is idempotent, we can call it multiple times.\n  // We keep it together with other initialization logic for better code structure.\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  (gtagCore as any)('js', new Date());\n  // User config added first. We don't want users to accidentally overwrite\n  // base Firebase config properties.\n  const configProperties: Record<string, unknown> = options?.config ?? {};\n\n  // guard against developers accidentally setting properties with prefix `firebase_`\n  configProperties[ORIGIN_KEY] = 'firebase';\n  configProperties.update = true;\n\n  if (fid != null) {\n    configProperties[GA_FID_KEY] = fid;\n  }\n\n  // It should be the first config command called on this GA-ID\n  // Initialize this GA-ID and set FID on it using the gtag config API.\n  // Note: This will trigger a page_view event unless 'send_page_view' is set to false in\n  // `configProperties`.\n  gtagCore(GtagCommand.CONFIG, dynamicConfig.measurementId, configProperties);\n\n  // Detects if there is data that will be set on every event logged from the SDK.\n  if (defaultEventParametersForInit) {\n    gtagCore(GtagCommand.SET, defaultEventParametersForInit);\n    _setDefaultEventParametersForInit(undefined);\n  }\n\n  return dynamicConfig.measurementId;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SettingsOptions, Analytics, AnalyticsSettings } from './public-types';\nimport { Gtag, DynamicConfig, MinimalDynamicConfig } from './types';\nimport { getOrCreateDataLayer, wrapOrCreateGtag } from './helpers';\nimport { AnalyticsError, ERROR_FACTORY } from './errors';\nimport { _FirebaseInstallationsInternal } from '@firebase/installations';\nimport { areCookiesEnabled, isBrowserExtension } from '@firebase/util';\nimport { _initializeAnalytics } from './initialize-analytics';\nimport { logger } from './logger';\nimport { FirebaseApp, _FirebaseService } from '@firebase/app';\n\n/**\n * Analytics Service class.\n */\nexport class AnalyticsService implements Analytics, _FirebaseService {\n  constructor(public app: FirebaseApp) {}\n  _delete(): Promise<void> {\n    delete initializationPromisesMap[this.app.options.appId!];\n    return Promise.resolve();\n  }\n}\n\n/**\n * Maps appId to full initialization promise. Wrapped gtag calls must wait on\n * all or some of these, depending on the call's `send_to` param and the status\n * of the dynamic config fetches (see below).\n */\nexport let initializationPromisesMap: {\n  [appId: string]: Promise<string>; // Promise contains measurement ID string.\n} = {};\n\n/**\n * List of dynamic config fetch promises. In certain cases, wrapped gtag calls\n * wait on all these to be complete in order to determine if it can selectively\n * wait for only certain initialization (FID) promises or if it must wait for all.\n */\nlet dynamicConfigPromisesList: Array<\n  Promise<DynamicConfig | MinimalDynamicConfig>\n> = [];\n\n/**\n * Maps fetched measurementIds to appId. Populated when the app's dynamic config\n * fetch completes. If already populated, gtag config calls can use this to\n * selectively wait for only this app's initialization promise (FID) instead of all\n * initialization promises.\n */\nconst measurementIdToAppId: { [measurementId: string]: string } = {};\n\n/**\n * Name for window global data layer array used by GA: defaults to 'dataLayer'.\n */\nlet dataLayerName: string = 'dataLayer';\n\n/**\n * Name for window global gtag function used by GA: defaults to 'gtag'.\n */\nlet gtagName: string = 'gtag';\n\n/**\n * Reproduction of standard gtag function or reference to existing\n * gtag function on window object.\n */\nlet gtagCoreFunction: Gtag;\n\n/**\n * Wrapper around gtag function that ensures FID is sent with all\n * relevant event and config calls.\n */\nexport let wrappedGtagFunction: Gtag;\n\n/**\n * Flag to ensure page initialization steps (creation or wrapping of\n * dataLayer and gtag script) are only run once per page load.\n */\nlet globalInitDone: boolean = false;\n\n/**\n * For testing\n * @internal\n */\nexport function resetGlobalVars(\n  newGlobalInitDone = false,\n  newInitializationPromisesMap = {},\n  newDynamicPromises = []\n): void {\n  globalInitDone = newGlobalInitDone;\n  initializationPromisesMap = newInitializationPromisesMap;\n  dynamicConfigPromisesList = newDynamicPromises;\n  dataLayerName = 'dataLayer';\n  gtagName = 'gtag';\n}\n\n/**\n * For testing\n * @internal\n */\nexport function getGlobalVars(): {\n  initializationPromisesMap: { [appId: string]: Promise<string> };\n  dynamicConfigPromisesList: Array<\n    Promise<DynamicConfig | MinimalDynamicConfig>\n  >;\n} {\n  return {\n    initializationPromisesMap,\n    dynamicConfigPromisesList\n  };\n}\n\n/**\n * Configures Firebase Analytics to use custom `gtag` or `dataLayer` names.\n * Intended to be used if `gtag.js` script has been installed on\n * this page independently of Firebase Analytics, and is using non-default\n * names for either the `gtag` function or for `dataLayer`.\n * Must be called before calling `getAnalytics()` or it won't\n * have any effect.\n *\n * @public\n *\n * @param options - Custom gtag and dataLayer names.\n */\nexport function settings(options: SettingsOptions): void {\n  if (globalInitDone) {\n    throw ERROR_FACTORY.create(AnalyticsError.ALREADY_INITIALIZED);\n  }\n  if (options.dataLayerName) {\n    dataLayerName = options.dataLayerName;\n  }\n  if (options.gtagName) {\n    gtagName = options.gtagName;\n  }\n}\n\n/**\n * Returns true if no environment mismatch is found.\n * If environment mismatches are found, throws an INVALID_ANALYTICS_CONTEXT\n * error that also lists details for each mismatch found.\n */\nfunction warnOnBrowserContextMismatch(): void {\n  const mismatchedEnvMessages = [];\n  if (isBrowserExtension()) {\n    mismatchedEnvMessages.push('This is a browser extension environment.');\n  }\n  if (!areCookiesEnabled()) {\n    mismatchedEnvMessages.push('Cookies are not available.');\n  }\n  if (mismatchedEnvMessages.length > 0) {\n    const details = mismatchedEnvMessages\n      .map((message, index) => `(${index + 1}) ${message}`)\n      .join(' ');\n    const err = ERROR_FACTORY.create(AnalyticsError.INVALID_ANALYTICS_CONTEXT, {\n      errorInfo: details\n    });\n    logger.warn(err.message);\n  }\n}\n\n/**\n * Analytics instance factory.\n * @internal\n */\nexport function factory(\n  app: FirebaseApp,\n  installations: _FirebaseInstallationsInternal,\n  options?: AnalyticsSettings\n): AnalyticsService {\n  warnOnBrowserContextMismatch();\n  const appId = app.options.appId;\n  if (!appId) {\n    throw ERROR_FACTORY.create(AnalyticsError.NO_APP_ID);\n  }\n  if (!app.options.apiKey) {\n    if (app.options.measurementId) {\n      logger.warn(\n        `The \"apiKey\" field is empty in the local Firebase config. This is needed to fetch the latest` +\n          ` measurement ID for this Firebase app. Falling back to the measurement ID ${app.options.measurementId}` +\n          ` provided in the \"measurementId\" field in the local Firebase config.`\n      );\n    } else {\n      throw ERROR_FACTORY.create(AnalyticsError.NO_API_KEY);\n    }\n  }\n  if (initializationPromisesMap[appId] != null) {\n    throw ERROR_FACTORY.create(AnalyticsError.ALREADY_EXISTS, {\n      id: appId\n    });\n  }\n\n  if (!globalInitDone) {\n    // Steps here should only be done once per page: creation or wrapping\n    // of dataLayer and global gtag function.\n\n    getOrCreateDataLayer(dataLayerName);\n\n    const { wrappedGtag, gtagCore } = wrapOrCreateGtag(\n      initializationPromisesMap,\n      dynamicConfigPromisesList,\n      measurementIdToAppId,\n      dataLayerName,\n      gtagName\n    );\n    wrappedGtagFunction = wrappedGtag;\n    gtagCoreFunction = gtagCore;\n\n    globalInitDone = true;\n  }\n  // Async but non-blocking.\n  // This map reflects the completion state of all promises for each appId.\n  initializationPromisesMap[appId] = _initializeAnalytics(\n    app,\n    dynamicConfigPromisesList,\n    measurementIdToAppId,\n    installations,\n    gtagCoreFunction,\n    dataLayerName,\n    options\n  );\n\n  const analyticsInstance: AnalyticsService = new AnalyticsService(app);\n\n  return analyticsInstance;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable camelcase */\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { _getProvider, FirebaseApp, getApp } from '@firebase/app';\nimport {\n  Analytics,\n  AnalyticsCallOptions,\n  AnalyticsSettings,\n  ConsentSettings,\n  CustomParams,\n  EventNameString,\n  EventParams\n} from './public-types';\nimport { Provider } from '@firebase/component';\nimport {\n  isIndexedDBAvailable,\n  validateIndexedDBOpenable,\n  areCookiesEnabled,\n  isBrowserExtension,\n  getModularInstance,\n  deepEqual\n} from '@firebase/util';\nimport { ANALYTICS_TYPE, GtagCommand } from './constants';\nimport {\n  AnalyticsService,\n  initializationPromisesMap,\n  wrappedGtagFunction\n} from './factory';\nimport { logger } from './logger';\nimport {\n  logEvent as internalLogEvent,\n  setCurrentScreen as internalSetCurrentScreen,\n  setUserId as internalSetUserId,\n  setUserProperties as internalSetUserProperties,\n  setAnalyticsCollectionEnabled as internalSetAnalyticsCollectionEnabled,\n  _setConsentDefaultForInit,\n  _setDefaultEventParametersForInit\n} from './functions';\nimport { ERROR_FACTORY, AnalyticsError } from './errors';\n\nexport { settings } from './factory';\n\ndeclare module '@firebase/component' {\n  interface NameServiceMapping {\n    [ANALYTICS_TYPE]: AnalyticsService;\n  }\n}\n\n/**\n * Returns an {@link Analytics} instance for the given app.\n *\n * @public\n *\n * @param app - The {@link @firebase/app#FirebaseApp} to use.\n */\nexport function getAnalytics(app: FirebaseApp = getApp()): Analytics {\n  app = getModularInstance(app);\n  // Dependencies\n  const analyticsProvider: Provider<'analytics'> = _getProvider(\n    app,\n    ANALYTICS_TYPE\n  );\n\n  if (analyticsProvider.isInitialized()) {\n    return analyticsProvider.getImmediate();\n  }\n\n  return initializeAnalytics(app);\n}\n\n/**\n * Returns an {@link Analytics} instance for the given app.\n *\n * @public\n *\n * @param app - The {@link @firebase/app#FirebaseApp} to use.\n */\nexport function initializeAnalytics(\n  app: FirebaseApp,\n  options: AnalyticsSettings = {}\n): Analytics {\n  // Dependencies\n  const analyticsProvider: Provider<'analytics'> = _getProvider(\n    app,\n    ANALYTICS_TYPE\n  );\n  if (analyticsProvider.isInitialized()) {\n    const existingInstance = analyticsProvider.getImmediate();\n    if (deepEqual(options, analyticsProvider.getOptions())) {\n      return existingInstance;\n    } else {\n      throw ERROR_FACTORY.create(AnalyticsError.ALREADY_INITIALIZED);\n    }\n  }\n  const analyticsInstance = analyticsProvider.initialize({ options });\n  return analyticsInstance;\n}\n\n/**\n * This is a public static method provided to users that wraps four different checks:\n *\n * 1. Check if it's not a browser extension environment.\n * 2. Check if cookies are enabled in current browser.\n * 3. Check if IndexedDB is supported by the browser environment.\n * 4. Check if the current browser context is valid for using `IndexedDB.open()`.\n *\n * @public\n *\n */\nexport async function isSupported(): Promise<boolean> {\n  if (isBrowserExtension()) {\n    return false;\n  }\n  if (!areCookiesEnabled()) {\n    return false;\n  }\n  if (!isIndexedDBAvailable()) {\n    return false;\n  }\n\n  try {\n    const isDBOpenable: boolean = await validateIndexedDBOpenable();\n    return isDBOpenable;\n  } catch (error) {\n    return false;\n  }\n}\n\n/**\n * Use gtag `config` command to set `screen_name`.\n *\n * @public\n *\n * @deprecated Use {@link logEvent} with `eventName` as 'screen_view' and add relevant `eventParams`.\n * See {@link https://firebase.google.com/docs/analytics/screenviews | Track Screenviews}.\n *\n * @param analyticsInstance - The {@link Analytics} instance.\n * @param screenName - Screen name to set.\n */\nexport function setCurrentScreen(\n  analyticsInstance: Analytics,\n  screenName: string,\n  options?: AnalyticsCallOptions\n): void {\n  analyticsInstance = getModularInstance(analyticsInstance);\n  internalSetCurrentScreen(\n    wrappedGtagFunction,\n    initializationPromisesMap[analyticsInstance.app.options.appId!],\n    screenName,\n    options\n  ).catch(e => logger.error(e));\n}\n\n/**\n * Use gtag `config` command to set `user_id`.\n *\n * @public\n *\n * @param analyticsInstance - The {@link Analytics} instance.\n * @param id - User ID to set.\n */\nexport function setUserId(\n  analyticsInstance: Analytics,\n  id: string | null,\n  options?: AnalyticsCallOptions\n): void {\n  analyticsInstance = getModularInstance(analyticsInstance);\n  internalSetUserId(\n    wrappedGtagFunction,\n    initializationPromisesMap[analyticsInstance.app.options.appId!],\n    id,\n    options\n  ).catch(e => logger.error(e));\n}\n\n/**\n * Use gtag `config` command to set all params specified.\n *\n * @public\n */\nexport function setUserProperties(\n  analyticsInstance: Analytics,\n  properties: CustomParams,\n  options?: AnalyticsCallOptions\n): void {\n  analyticsInstance = getModularInstance(analyticsInstance);\n  internalSetUserProperties(\n    wrappedGtagFunction,\n    initializationPromisesMap[analyticsInstance.app.options.appId!],\n    properties,\n    options\n  ).catch(e => logger.error(e));\n}\n\n/**\n * Sets whether Google Analytics collection is enabled for this app on this device.\n * Sets global `window['ga-disable-analyticsId'] = true;`\n *\n * @public\n *\n * @param analyticsInstance - The {@link Analytics} instance.\n * @param enabled - If true, enables collection, if false, disables it.\n */\nexport function setAnalyticsCollectionEnabled(\n  analyticsInstance: Analytics,\n  enabled: boolean\n): void {\n  analyticsInstance = getModularInstance(analyticsInstance);\n  internalSetAnalyticsCollectionEnabled(\n    initializationPromisesMap[analyticsInstance.app.options.appId!],\n    enabled\n  ).catch(e => logger.error(e));\n}\n\n/**\n * Adds data that will be set on every event logged from the SDK, including automatic ones.\n * With gtag's \"set\" command, the values passed persist on the current page and are passed with\n * all subsequent events.\n * @public\n * @param customParams - Any custom params the user may pass to gtag.js.\n */\nexport function setDefaultEventParameters(customParams: CustomParams): void {\n  // Check if reference to existing gtag function on window object exists\n  if (wrappedGtagFunction) {\n    wrappedGtagFunction(GtagCommand.SET, customParams);\n  } else {\n    _setDefaultEventParametersForInit(customParams);\n  }\n}\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * List of recommended event parameters can be found in\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'add_payment_info',\n  eventParams?: {\n    coupon?: EventParams['coupon'];\n    currency?: EventParams['currency'];\n    items?: EventParams['items'];\n    payment_type?: EventParams['payment_type'];\n    value?: EventParams['value'];\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * List of recommended event parameters can be found in\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'add_shipping_info',\n  eventParams?: {\n    coupon?: EventParams['coupon'];\n    currency?: EventParams['currency'];\n    items?: EventParams['items'];\n    shipping_tier?: EventParams['shipping_tier'];\n    value?: EventParams['value'];\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * List of recommended event parameters can be found in\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'add_to_cart' | 'add_to_wishlist' | 'remove_from_cart',\n  eventParams?: {\n    currency?: EventParams['currency'];\n    value?: EventParams['value'];\n    items?: EventParams['items'];\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * List of recommended event parameters can be found in\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'begin_checkout',\n  eventParams?: {\n    currency?: EventParams['currency'];\n    coupon?: EventParams['coupon'];\n    value?: EventParams['value'];\n    items?: EventParams['items'];\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * List of recommended event parameters can be found in\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'checkout_progress',\n  eventParams?: {\n    currency?: EventParams['currency'];\n    coupon?: EventParams['coupon'];\n    value?: EventParams['value'];\n    items?: EventParams['items'];\n    checkout_step?: EventParams['checkout_step'];\n    checkout_option?: EventParams['checkout_option'];\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * See\n * {@link https://developers.google.com/analytics/devguides/collection/ga4/exceptions\n * | Measure exceptions}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'exception',\n  eventParams?: {\n    description?: EventParams['description'];\n    fatal?: EventParams['fatal'];\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * List of recommended event parameters can be found in\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'generate_lead',\n  eventParams?: {\n    value?: EventParams['value'];\n    currency?: EventParams['currency'];\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * List of recommended event parameters can be found in\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'login',\n  eventParams?: {\n    method?: EventParams['method'];\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * See\n * {@link https://developers.google.com/analytics/devguides/collection/ga4/page-view\n * | Page views}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'page_view',\n  eventParams?: {\n    page_title?: string;\n    page_location?: string;\n    page_path?: string;\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * List of recommended event parameters can be found in\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'purchase' | 'refund',\n  eventParams?: {\n    value?: EventParams['value'];\n    currency?: EventParams['currency'];\n    transaction_id: EventParams['transaction_id'];\n    tax?: EventParams['tax'];\n    shipping?: EventParams['shipping'];\n    items?: EventParams['items'];\n    coupon?: EventParams['coupon'];\n    affiliation?: EventParams['affiliation'];\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * See {@link https://firebase.google.com/docs/analytics/screenviews\n * | Track Screenviews}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'screen_view',\n  eventParams?: {\n    firebase_screen: EventParams['firebase_screen'];\n    firebase_screen_class: EventParams['firebase_screen_class'];\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * List of recommended event parameters can be found in\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'search' | 'view_search_results',\n  eventParams?: {\n    search_term?: EventParams['search_term'];\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * List of recommended event parameters can be found in\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'select_content',\n  eventParams?: {\n    content_type?: EventParams['content_type'];\n    item_id?: EventParams['item_id'];\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * List of recommended event parameters can be found in\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'select_item',\n  eventParams?: {\n    items?: EventParams['items'];\n    item_list_name?: EventParams['item_list_name'];\n    item_list_id?: EventParams['item_list_id'];\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * List of recommended event parameters can be found in\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'select_promotion' | 'view_promotion',\n  eventParams?: {\n    items?: EventParams['items'];\n    promotion_id?: EventParams['promotion_id'];\n    promotion_name?: EventParams['promotion_name'];\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * List of recommended event parameters can be found in\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'set_checkout_option',\n  eventParams?: {\n    checkout_step?: EventParams['checkout_step'];\n    checkout_option?: EventParams['checkout_option'];\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * List of recommended event parameters can be found in\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'share',\n  eventParams?: {\n    method?: EventParams['method'];\n    content_type?: EventParams['content_type'];\n    item_id?: EventParams['item_id'];\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * List of recommended event parameters can be found in\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'sign_up',\n  eventParams?: {\n    method?: EventParams['method'];\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * List of recommended event parameters can be found in\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'timing_complete',\n  eventParams?: {\n    name: string;\n    value: number;\n    event_category?: string;\n    event_label?: string;\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * List of recommended event parameters can be found in\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'view_cart' | 'view_item',\n  eventParams?: {\n    currency?: EventParams['currency'];\n    items?: EventParams['items'];\n    value?: EventParams['value'];\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * List of recommended event parameters can be found in\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: 'view_item_list',\n  eventParams?: {\n    items?: EventParams['items'];\n    item_list_name?: EventParams['item_list_name'];\n    item_list_id?: EventParams['item_list_id'];\n    [key: string]: any;\n  },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * @public\n * List of recommended event parameters can be found in\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n */\nexport function logEvent<T extends string>(\n  analyticsInstance: Analytics,\n  eventName: CustomEventName<T>,\n  eventParams?: { [key: string]: any },\n  options?: AnalyticsCallOptions\n): void;\n\n/**\n * Sends a Google Analytics event with given `eventParams`. This method\n * automatically associates this logged event with this Firebase web\n * app instance on this device.\n * List of official event parameters can be found in the gtag.js\n * reference documentation:\n * {@link https://developers.google.com/gtagjs/reference/ga4-events\n * | the GA4 reference documentation}.\n *\n * @public\n */\nexport function logEvent(\n  analyticsInstance: Analytics,\n  eventName: string,\n  eventParams?: EventParams,\n  options?: AnalyticsCallOptions\n): void {\n  analyticsInstance = getModularInstance(analyticsInstance);\n  internalLogEvent(\n    wrappedGtagFunction,\n    initializationPromisesMap[analyticsInstance.app.options.appId!],\n    eventName,\n    eventParams,\n    options\n  ).catch(e => logger.error(e));\n}\n\n/**\n * Any custom event name string not in the standard list of recommended\n * event names.\n * @public\n */\nexport type CustomEventName<T> = T extends EventNameString ? never : T;\n\n/**\n * Sets the applicable end user consent state for this web app across all gtag references once\n * Firebase Analytics is initialized.\n *\n * Use the {@link ConsentSettings} to specify individual consent type values. By default consent\n * types are set to \"granted\".\n * @public\n * @param consentSettings - Maps the applicable end user consent state for gtag.js.\n */\nexport function setConsent(consentSettings: ConsentSettings): void {\n  // Check if reference to existing gtag function on window object exists\n  if (wrappedGtagFunction) {\n    wrappedGtagFunction(GtagCommand.CONSENT, 'update', consentSettings);\n  } else {\n    _setConsentDefaultForInit(consentSettings);\n  }\n}\n","/**\n * Firebase Analytics\n *\n * @packageDocumentation\n */\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { registerVersion, _registerComponent } from '@firebase/app';\nimport { FirebaseAnalyticsInternal } from '@firebase/analytics-interop-types';\nimport { factory } from './factory';\nimport { ANALYTICS_TYPE } from './constants';\nimport {\n  Component,\n  ComponentType,\n  ComponentContainer,\n  InstanceFactoryOptions\n} from '@firebase/component';\nimport { ERROR_FACTORY, AnalyticsError } from './errors';\nimport { logEvent } from './api';\nimport { name, version } from '../package.json';\nimport { AnalyticsCallOptions } from './public-types';\nimport '@firebase/installations';\n\ndeclare global {\n  interface Window {\n    [key: string]: unknown;\n  }\n}\n\nfunction registerAnalytics(): void {\n  _registerComponent(\n    new Component(\n      ANALYTICS_TYPE,\n      (container, { options: analyticsOptions }: InstanceFactoryOptions) => {\n        // getImmediate for FirebaseApp will always succeed\n        const app = container.getProvider('app').getImmediate();\n        const installations = container\n          .getProvider('installations-internal')\n          .getImmediate();\n\n        return factory(app, installations, analyticsOptions);\n      },\n      ComponentType.PUBLIC\n    )\n  );\n\n  _registerComponent(\n    new Component('analytics-internal', internalFactory, ComponentType.PRIVATE)\n  );\n\n  registerVersion(name, version);\n  // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\n  registerVersion(name, version, '__BUILD_TARGET__');\n\n  function internalFactory(\n    container: ComponentContainer\n  ): FirebaseAnalyticsInternal {\n    try {\n      const analytics = container.getProvider(ANALYTICS_TYPE).getImmediate();\n      return {\n        logEvent: (\n          eventName: string,\n          eventParams?: { [key: string]: unknown },\n          options?: AnalyticsCallOptions\n        ) => logEvent(analytics, eventName, eventParams, options)\n      };\n    } catch (e) {\n      throw ERROR_FACTORY.create(AnalyticsError.INTEROP_COMPONENT_REG_FAILED, {\n        reason: e as Error\n      });\n    }\n  }\n}\n\nregisterAnalytics();\n\nexport * from './api';\nexport * from './public-types';\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { registerVersion } from '@firebase/app';\nimport { name, version } from '../package.json';\n\nregisterVersion(name, version, 'app');\nexport * from '@firebase/app';\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const DEFAULT_SW_PATH = '/firebase-messaging-sw.js';\nexport const DEFAULT_SW_SCOPE = '/firebase-cloud-messaging-push-scope';\n\nexport const DEFAULT_VAPID_KEY =\n  'BDOU99-h67HcA6JeFXHbSNMu7e2yNNu3RzoMj8TM4W88jITfq7ZmPvIM1Iv-4_l2LxQcYwhqby2xGpWwzjfAnG4';\n\nexport const ENDPOINT = 'https://fcmregistrations.googleapis.com/v1';\n\n/** Key of FCM Payload in Notification's data field. */\nexport const FCM_MSG = 'FCM_MSG';\n\nexport const CONSOLE_CAMPAIGN_ID = 'google.c.a.c_id';\nexport const CONSOLE_CAMPAIGN_NAME = 'google.c.a.c_l';\nexport const CONSOLE_CAMPAIGN_TIME = 'google.c.a.ts';\n/** Set to '1' if Analytics is enabled for the campaign */\nexport const CONSOLE_CAMPAIGN_ANALYTICS_ENABLED = 'google.c.a.e';\nexport const TAG = 'FirebaseMessaging: ';\nexport const MAX_NUMBER_OF_EVENTS_PER_LOG_REQUEST = 1000;\nexport const MAX_RETRIES = 3;\nexport const LOG_INTERVAL_IN_MS = 86400000; //24 hour\nexport const DEFAULT_BACKOFF_TIME_MS = 5000;\n\n// FCM log source name registered at Firelog: 'FCM_CLIENT_EVENT_LOGGING'. It uniquely identifies\n// FCM's logging configuration.\nexport const FCM_LOG_SOURCE = 1249;\n\n// Defined as in proto/messaging_event.proto. Neglecting fields that are supported.\nexport const SDK_PLATFORM_WEB = 3;\nexport const EVENT_MESSAGE_DELIVERED = 1;\n\nexport enum MessageType {\n  DATA_MESSAGE = 1,\n  DISPLAY_NOTIFICATION = 3\n}\n","/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n * in compliance with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under the License\n * is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n * or implied. See the License for the specific language governing permissions and limitations under\n * the License.\n */\n\nimport {\n  CONSOLE_CAMPAIGN_ANALYTICS_ENABLED,\n  CONSOLE_CAMPAIGN_ID,\n  CONSOLE_CAMPAIGN_NAME,\n  CONSOLE_CAMPAIGN_TIME\n} from '../util/constants';\n\nexport interface MessagePayloadInternal {\n  notification?: NotificationPayloadInternal;\n  data?: unknown;\n  fcmOptions?: FcmOptionsInternal;\n  messageType?: MessageType;\n  isFirebaseMessaging?: boolean;\n  from: string;\n  fcmMessageId: string;\n  // eslint-disable-next-line camelcase\n  collapse_key: string;\n}\n\nexport interface NotificationPayloadInternal extends NotificationOptions {\n  title: string;\n  // Supported in the Legacy Send API.\n  // See:https://firebase.google.com/docs/cloud-messaging/xmpp-server-ref.\n  // eslint-disable-next-line camelcase\n  click_action?: string;\n  icon?: string;\n}\n\n// Defined in\n// https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#webpushfcmoptions. Note\n// that the keys are sent to the clients in snake cases which we need to convert to camel so it can\n// be exposed as a type to match the Firebase API convention.\nexport interface FcmOptionsInternal {\n  link?: string;\n\n  // eslint-disable-next-line camelcase\n  analytics_label?: string;\n}\n\nexport enum MessageType {\n  PUSH_RECEIVED = 'push-received',\n  NOTIFICATION_CLICKED = 'notification-clicked'\n}\n\n/** Additional data of a message sent from the FN Console. */\nexport interface ConsoleMessageData {\n  [CONSOLE_CAMPAIGN_ID]: string;\n  [CONSOLE_CAMPAIGN_TIME]: string;\n  [CONSOLE_CAMPAIGN_NAME]?: string;\n  [CONSOLE_CAMPAIGN_ANALYTICS_ENABLED]?: '1';\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function arrayToBase64(array: Uint8Array | ArrayBuffer): string {\n  const uint8Array = new Uint8Array(array);\n  const base64String = btoa(String.fromCharCode(...uint8Array));\n  return base64String.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n}\n\nexport function base64ToArray(base64String: string): Uint8Array {\n  const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n  const base64 = (base64String + padding)\n    .replace(/\\-/g, '+')\n    .replace(/_/g, '/');\n\n  const rawData = atob(base64);\n  const outputArray = new Uint8Array(rawData.length);\n\n  for (let i = 0; i < rawData.length; ++i) {\n    outputArray[i] = rawData.charCodeAt(i);\n  }\n  return outputArray;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { deleteDB, openDB } from 'idb';\n\nimport { TokenDetails } from '../interfaces/token-details';\nimport { arrayToBase64 } from './array-base64-translator';\n\n// https://github.com/firebase/firebase-js-sdk/blob/7857c212f944a2a9eb421fd4cb7370181bc034b5/packages/messaging/src/interfaces/token-details.ts\nexport interface V2TokenDetails {\n  fcmToken: string;\n  swScope: string;\n  vapidKey: string | Uint8Array;\n  subscription: PushSubscription;\n  fcmSenderId: string;\n  fcmPushSet: string;\n  createTime?: number;\n  endpoint?: string;\n  auth?: string;\n  p256dh?: string;\n}\n\n// https://github.com/firebase/firebase-js-sdk/blob/6b5b15ce4ea3df5df5df8a8b33a4e41e249c7715/packages/messaging/src/interfaces/token-details.ts\nexport interface V3TokenDetails {\n  fcmToken: string;\n  swScope: string;\n  vapidKey: Uint8Array;\n  fcmSenderId: string;\n  fcmPushSet: string;\n  endpoint: string;\n  auth: ArrayBuffer;\n  p256dh: ArrayBuffer;\n  createTime: number;\n}\n\n// https://github.com/firebase/firebase-js-sdk/blob/9567dba664732f681fa7fe60f5b7032bb1daf4c9/packages/messaging/src/interfaces/token-details.ts\nexport interface V4TokenDetails {\n  fcmToken: string;\n  swScope: string;\n  vapidKey: Uint8Array;\n  fcmSenderId: string;\n  endpoint: string;\n  auth: ArrayBufferLike;\n  p256dh: ArrayBufferLike;\n  createTime: number;\n}\n\nconst OLD_DB_NAME = 'fcm_token_details_db';\n/**\n * The last DB version of 'fcm_token_details_db' was 4. This is one higher, so that the upgrade\n * callback is called for all versions of the old DB.\n */\nconst OLD_DB_VERSION = 5;\nconst OLD_OBJECT_STORE_NAME = 'fcm_token_object_Store';\n\nexport async function migrateOldDatabase(\n  senderId: string\n): Promise<TokenDetails | null> {\n  if ('databases' in indexedDB) {\n    // indexedDb.databases() is an IndexedDB v3 API and does not exist in all browsers. TODO: Remove\n    // typecast when it lands in TS types.\n    const databases = await (\n      indexedDB as {\n        databases(): Promise<Array<{ name: string; version: number }>>;\n      }\n    ).databases();\n    const dbNames = databases.map(db => db.name);\n\n    if (!dbNames.includes(OLD_DB_NAME)) {\n      // old DB didn't exist, no need to open.\n      return null;\n    }\n  }\n\n  let tokenDetails: TokenDetails | null = null;\n\n  const db = await openDB(OLD_DB_NAME, OLD_DB_VERSION, {\n    upgrade: async (db, oldVersion, newVersion, upgradeTransaction) => {\n      if (oldVersion < 2) {\n        // Database too old, skip migration.\n        return;\n      }\n\n      if (!db.objectStoreNames.contains(OLD_OBJECT_STORE_NAME)) {\n        // Database did not exist. Nothing to do.\n        return;\n      }\n\n      const objectStore = upgradeTransaction.objectStore(OLD_OBJECT_STORE_NAME);\n      const value = await objectStore.index('fcmSenderId').get(senderId);\n      await objectStore.clear();\n\n      if (!value) {\n        // No entry in the database, nothing to migrate.\n        return;\n      }\n\n      if (oldVersion === 2) {\n        const oldDetails = value as V2TokenDetails;\n\n        if (!oldDetails.auth || !oldDetails.p256dh || !oldDetails.endpoint) {\n          return;\n        }\n\n        tokenDetails = {\n          token: oldDetails.fcmToken,\n          createTime: oldDetails.createTime ?? Date.now(),\n          subscriptionOptions: {\n            auth: oldDetails.auth,\n            p256dh: oldDetails.p256dh,\n            endpoint: oldDetails.endpoint,\n            swScope: oldDetails.swScope,\n            vapidKey:\n              typeof oldDetails.vapidKey === 'string'\n                ? oldDetails.vapidKey\n                : arrayToBase64(oldDetails.vapidKey)\n          }\n        };\n      } else if (oldVersion === 3) {\n        const oldDetails = value as V3TokenDetails;\n\n        tokenDetails = {\n          token: oldDetails.fcmToken,\n          createTime: oldDetails.createTime,\n          subscriptionOptions: {\n            auth: arrayToBase64(oldDetails.auth),\n            p256dh: arrayToBase64(oldDetails.p256dh),\n            endpoint: oldDetails.endpoint,\n            swScope: oldDetails.swScope,\n            vapidKey: arrayToBase64(oldDetails.vapidKey)\n          }\n        };\n      } else if (oldVersion === 4) {\n        const oldDetails = value as V4TokenDetails;\n\n        tokenDetails = {\n          token: oldDetails.fcmToken,\n          createTime: oldDetails.createTime,\n          subscriptionOptions: {\n            auth: arrayToBase64(oldDetails.auth),\n            p256dh: arrayToBase64(oldDetails.p256dh),\n            endpoint: oldDetails.endpoint,\n            swScope: oldDetails.swScope,\n            vapidKey: arrayToBase64(oldDetails.vapidKey)\n          }\n        };\n      }\n    }\n  });\n  db.close();\n\n  // Delete all old databases.\n  await deleteDB(OLD_DB_NAME);\n  await deleteDB('fcm_vapid_details_db');\n  await deleteDB('undefined');\n\n  return checkTokenDetails(tokenDetails) ? tokenDetails : null;\n}\n\nfunction checkTokenDetails(\n  tokenDetails: TokenDetails | null\n): tokenDetails is TokenDetails {\n  if (!tokenDetails || !tokenDetails.subscriptionOptions) {\n    return false;\n  }\n  const { subscriptionOptions } = tokenDetails;\n  return (\n    typeof tokenDetails.createTime === 'number' &&\n    tokenDetails.createTime > 0 &&\n    typeof tokenDetails.token === 'string' &&\n    tokenDetails.token.length > 0 &&\n    typeof subscriptionOptions.auth === 'string' &&\n    subscriptionOptions.auth.length > 0 &&\n    typeof subscriptionOptions.p256dh === 'string' &&\n    subscriptionOptions.p256dh.length > 0 &&\n    typeof subscriptionOptions.endpoint === 'string' &&\n    subscriptionOptions.endpoint.length > 0 &&\n    typeof subscriptionOptions.swScope === 'string' &&\n    subscriptionOptions.swScope.length > 0 &&\n    typeof subscriptionOptions.vapidKey === 'string' &&\n    subscriptionOptions.vapidKey.length > 0\n  );\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DBSchema, IDBPDatabase, deleteDB, openDB } from 'idb';\n\nimport { FirebaseInternalDependencies } from '../interfaces/internal-dependencies';\nimport { TokenDetails } from '../interfaces/token-details';\nimport { migrateOldDatabase } from '../helpers/migrate-old-database';\n\n// Exported for tests.\nexport const DATABASE_NAME = 'firebase-messaging-database';\nconst DATABASE_VERSION = 1;\nconst OBJECT_STORE_NAME = 'firebase-messaging-store';\n\ninterface MessagingDB extends DBSchema {\n  'firebase-messaging-store': {\n    key: string;\n    value: TokenDetails;\n  };\n}\n\nlet dbPromise: Promise<IDBPDatabase<MessagingDB>> | null = null;\nfunction getDbPromise(): Promise<IDBPDatabase<MessagingDB>> {\n  if (!dbPromise) {\n    dbPromise = openDB(DATABASE_NAME, DATABASE_VERSION, {\n      upgrade: (upgradeDb, oldVersion) => {\n        // We don't use 'break' in this switch statement, the fall-through behavior is what we want,\n        // because if there are multiple versions between the old version and the current version, we\n        // want ALL the migrations that correspond to those versions to run, not only the last one.\n        // eslint-disable-next-line default-case\n        switch (oldVersion) {\n          case 0:\n            upgradeDb.createObjectStore(OBJECT_STORE_NAME);\n        }\n      }\n    });\n  }\n  return dbPromise;\n}\n\n/** Gets record(s) from the objectStore that match the given key. */\nexport async function dbGet(\n  firebaseDependencies: FirebaseInternalDependencies\n): Promise<TokenDetails | undefined> {\n  const key = getKey(firebaseDependencies);\n  const db = await getDbPromise();\n  const tokenDetails = (await db\n    .transaction(OBJECT_STORE_NAME)\n    .objectStore(OBJECT_STORE_NAME)\n    .get(key)) as TokenDetails;\n\n  if (tokenDetails) {\n    return tokenDetails;\n  } else {\n    // Check if there is a tokenDetails object in the old DB.\n    const oldTokenDetails = await migrateOldDatabase(\n      firebaseDependencies.appConfig.senderId\n    );\n    if (oldTokenDetails) {\n      await dbSet(firebaseDependencies, oldTokenDetails);\n      return oldTokenDetails;\n    }\n  }\n}\n\n/** Assigns or overwrites the record for the given key with the given value. */\nexport async function dbSet(\n  firebaseDependencies: FirebaseInternalDependencies,\n  tokenDetails: TokenDetails\n): Promise<TokenDetails> {\n  const key = getKey(firebaseDependencies);\n  const db = await getDbPromise();\n  const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n  await tx.objectStore(OBJECT_STORE_NAME).put(tokenDetails, key);\n  await tx.done;\n  return tokenDetails;\n}\n\n/** Removes record(s) from the objectStore that match the given key. */\nexport async function dbRemove(\n  firebaseDependencies: FirebaseInternalDependencies\n): Promise<void> {\n  const key = getKey(firebaseDependencies);\n  const db = await getDbPromise();\n  const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n  await tx.objectStore(OBJECT_STORE_NAME).delete(key);\n  await tx.done;\n}\n\n/** Deletes the DB. Useful for tests. */\nexport async function dbDelete(): Promise<void> {\n  if (dbPromise) {\n    (await dbPromise).close();\n    await deleteDB(DATABASE_NAME);\n    dbPromise = null;\n  }\n}\n\nfunction getKey({ appConfig }: FirebaseInternalDependencies): string {\n  return appConfig.appId;\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ErrorFactory, ErrorMap } from '@firebase/util';\n\nexport const enum ErrorCode {\n  MISSING_APP_CONFIG_VALUES = 'missing-app-config-values',\n  AVAILABLE_IN_WINDOW = 'only-available-in-window',\n  AVAILABLE_IN_SW = 'only-available-in-sw',\n  PERMISSION_DEFAULT = 'permission-default',\n  PERMISSION_BLOCKED = 'permission-blocked',\n  UNSUPPORTED_BROWSER = 'unsupported-browser',\n  INDEXED_DB_UNSUPPORTED = 'indexed-db-unsupported',\n  FAILED_DEFAULT_REGISTRATION = 'failed-service-worker-registration',\n  TOKEN_SUBSCRIBE_FAILED = 'token-subscribe-failed',\n  TOKEN_SUBSCRIBE_NO_TOKEN = 'token-subscribe-no-token',\n  TOKEN_UNSUBSCRIBE_FAILED = 'token-unsubscribe-failed',\n  TOKEN_UPDATE_FAILED = 'token-update-failed',\n  TOKEN_UPDATE_NO_TOKEN = 'token-update-no-token',\n  INVALID_BG_HANDLER = 'invalid-bg-handler',\n  USE_SW_AFTER_GET_TOKEN = 'use-sw-after-get-token',\n  INVALID_SW_REGISTRATION = 'invalid-sw-registration',\n  USE_VAPID_KEY_AFTER_GET_TOKEN = 'use-vapid-key-after-get-token',\n  INVALID_VAPID_KEY = 'invalid-vapid-key'\n}\n\nexport const ERROR_MAP: ErrorMap<ErrorCode> = {\n  [ErrorCode.MISSING_APP_CONFIG_VALUES]:\n    'Missing App configuration value: \"{$valueName}\"',\n  [ErrorCode.AVAILABLE_IN_WINDOW]:\n    'This method is available in a Window context.',\n  [ErrorCode.AVAILABLE_IN_SW]:\n    'This method is available in a service worker context.',\n  [ErrorCode.PERMISSION_DEFAULT]:\n    'The notification permission was not granted and dismissed instead.',\n  [ErrorCode.PERMISSION_BLOCKED]:\n    'The notification permission was not granted and blocked instead.',\n  [ErrorCode.UNSUPPORTED_BROWSER]:\n    \"This browser doesn't support the API's required to use the Firebase SDK.\",\n  [ErrorCode.INDEXED_DB_UNSUPPORTED]:\n    \"This browser doesn't support indexedDb.open() (ex. Safari iFrame, Firefox Private Browsing, etc)\",\n  [ErrorCode.FAILED_DEFAULT_REGISTRATION]:\n    'We are unable to register the default service worker. {$browserErrorMessage}',\n  [ErrorCode.TOKEN_SUBSCRIBE_FAILED]:\n    'A problem occurred while subscribing the user to FCM: {$errorInfo}',\n  [ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN]:\n    'FCM returned no token when subscribing the user to push.',\n  [ErrorCode.TOKEN_UNSUBSCRIBE_FAILED]:\n    'A problem occurred while unsubscribing the ' +\n    'user from FCM: {$errorInfo}',\n  [ErrorCode.TOKEN_UPDATE_FAILED]:\n    'A problem occurred while updating the user from FCM: {$errorInfo}',\n  [ErrorCode.TOKEN_UPDATE_NO_TOKEN]:\n    'FCM returned no token when updating the user to push.',\n  [ErrorCode.USE_SW_AFTER_GET_TOKEN]:\n    'The useServiceWorker() method may only be called once and must be ' +\n    'called before calling getToken() to ensure your service worker is used.',\n  [ErrorCode.INVALID_SW_REGISTRATION]:\n    'The input to useServiceWorker() must be a ServiceWorkerRegistration.',\n  [ErrorCode.INVALID_BG_HANDLER]:\n    'The input to setBackgroundMessageHandler() must be a function.',\n  [ErrorCode.INVALID_VAPID_KEY]: 'The public VAPID key must be a string.',\n  [ErrorCode.USE_VAPID_KEY_AFTER_GET_TOKEN]:\n    'The usePublicVapidKey() method may only be called once and must be ' +\n    'called before calling getToken() to ensure your VAPID key is used.'\n};\n\ninterface ErrorParams {\n  [ErrorCode.MISSING_APP_CONFIG_VALUES]: {\n    valueName: string;\n  };\n  [ErrorCode.FAILED_DEFAULT_REGISTRATION]: { browserErrorMessage: string };\n  [ErrorCode.TOKEN_SUBSCRIBE_FAILED]: { errorInfo: string };\n  [ErrorCode.TOKEN_UNSUBSCRIBE_FAILED]: { errorInfo: string };\n  [ErrorCode.TOKEN_UPDATE_FAILED]: { errorInfo: string };\n}\n\nexport const ERROR_FACTORY = new ErrorFactory<ErrorCode, ErrorParams>(\n  'messaging',\n  'Messaging',\n  ERROR_MAP\n);\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DEFAULT_VAPID_KEY, ENDPOINT } from '../util/constants';\nimport { ERROR_FACTORY, ErrorCode } from '../util/errors';\nimport { SubscriptionOptions, TokenDetails } from '../interfaces/token-details';\n\nimport { AppConfig } from '../interfaces/app-config';\nimport { FirebaseInternalDependencies } from '../interfaces/internal-dependencies';\n\nexport interface ApiResponse {\n  token?: string;\n  error?: { message: string };\n}\n\nexport interface ApiRequestBody {\n  web: {\n    endpoint: string;\n    p256dh: string;\n    auth: string;\n    applicationPubKey?: string;\n  };\n}\n\nexport async function requestGetToken(\n  firebaseDependencies: FirebaseInternalDependencies,\n  subscriptionOptions: SubscriptionOptions\n): Promise<string> {\n  const headers = await getHeaders(firebaseDependencies);\n  const body = getBody(subscriptionOptions);\n\n  const subscribeOptions = {\n    method: 'POST',\n    headers,\n    body: JSON.stringify(body)\n  };\n\n  let responseData: ApiResponse;\n  try {\n    const response = await fetch(\n      getEndpoint(firebaseDependencies.appConfig),\n      subscribeOptions\n    );\n    responseData = await response.json();\n  } catch (err) {\n    throw ERROR_FACTORY.create(ErrorCode.TOKEN_SUBSCRIBE_FAILED, {\n      errorInfo: (err as Error)?.toString()\n    });\n  }\n\n  if (responseData.error) {\n    const message = responseData.error.message;\n    throw ERROR_FACTORY.create(ErrorCode.TOKEN_SUBSCRIBE_FAILED, {\n      errorInfo: message\n    });\n  }\n\n  if (!responseData.token) {\n    throw ERROR_FACTORY.create(ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN);\n  }\n\n  return responseData.token;\n}\n\nexport async function requestUpdateToken(\n  firebaseDependencies: FirebaseInternalDependencies,\n  tokenDetails: TokenDetails\n): Promise<string> {\n  const headers = await getHeaders(firebaseDependencies);\n  const body = getBody(tokenDetails.subscriptionOptions!);\n\n  const updateOptions = {\n    method: 'PATCH',\n    headers,\n    body: JSON.stringify(body)\n  };\n\n  let responseData: ApiResponse;\n  try {\n    const response = await fetch(\n      `${getEndpoint(firebaseDependencies.appConfig)}/${tokenDetails.token}`,\n      updateOptions\n    );\n    responseData = await response.json();\n  } catch (err) {\n    throw ERROR_FACTORY.create(ErrorCode.TOKEN_UPDATE_FAILED, {\n      errorInfo: (err as Error)?.toString()\n    });\n  }\n\n  if (responseData.error) {\n    const message = responseData.error.message;\n    throw ERROR_FACTORY.create(ErrorCode.TOKEN_UPDATE_FAILED, {\n      errorInfo: message\n    });\n  }\n\n  if (!responseData.token) {\n    throw ERROR_FACTORY.create(ErrorCode.TOKEN_UPDATE_NO_TOKEN);\n  }\n\n  return responseData.token;\n}\n\nexport async function requestDeleteToken(\n  firebaseDependencies: FirebaseInternalDependencies,\n  token: string\n): Promise<void> {\n  const headers = await getHeaders(firebaseDependencies);\n\n  const unsubscribeOptions = {\n    method: 'DELETE',\n    headers\n  };\n\n  try {\n    const response = await fetch(\n      `${getEndpoint(firebaseDependencies.appConfig)}/${token}`,\n      unsubscribeOptions\n    );\n    const responseData: ApiResponse = await response.json();\n    if (responseData.error) {\n      const message = responseData.error.message;\n      throw ERROR_FACTORY.create(ErrorCode.TOKEN_UNSUBSCRIBE_FAILED, {\n        errorInfo: message\n      });\n    }\n  } catch (err) {\n    throw ERROR_FACTORY.create(ErrorCode.TOKEN_UNSUBSCRIBE_FAILED, {\n      errorInfo: (err as Error)?.toString()\n    });\n  }\n}\n\nfunction getEndpoint({ projectId }: AppConfig): string {\n  return `${ENDPOINT}/projects/${projectId!}/registrations`;\n}\n\nasync function getHeaders({\n  appConfig,\n  installations\n}: FirebaseInternalDependencies): Promise<Headers> {\n  const authToken = await installations.getToken();\n\n  return new Headers({\n    'Content-Type': 'application/json',\n    Accept: 'application/json',\n    'x-goog-api-key': appConfig.apiKey!,\n    'x-goog-firebase-installations-auth': `FIS ${authToken}`\n  });\n}\n\nfunction getBody({\n  p256dh,\n  auth,\n  endpoint,\n  vapidKey\n}: SubscriptionOptions): ApiRequestBody {\n  const body: ApiRequestBody = {\n    web: {\n      endpoint,\n      auth,\n      p256dh\n    }\n  };\n\n  if (vapidKey !== DEFAULT_VAPID_KEY) {\n    body.web.applicationPubKey = vapidKey;\n  }\n\n  return body;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SubscriptionOptions, TokenDetails } from '../interfaces/token-details';\nimport {\n  arrayToBase64,\n  base64ToArray\n} from '../helpers/array-base64-translator';\nimport { dbGet, dbRemove, dbSet } from './idb-manager';\nimport {\n  requestDeleteToken,\n  requestGetToken,\n  requestUpdateToken\n} from './requests';\n\nimport { FirebaseInternalDependencies } from '../interfaces/internal-dependencies';\nimport { MessagingService } from '../messaging-service';\n\n// UpdateRegistration will be called once every week.\nconst TOKEN_EXPIRATION_MS = 7 * 24 * 60 * 60 * 1000; // 7 days\n\nexport async function getTokenInternal(\n  messaging: MessagingService\n): Promise<string> {\n  const pushSubscription = await getPushSubscription(\n    messaging.swRegistration!,\n    messaging.vapidKey!\n  );\n\n  const subscriptionOptions: SubscriptionOptions = {\n    vapidKey: messaging.vapidKey!,\n    swScope: messaging.swRegistration!.scope,\n    endpoint: pushSubscription.endpoint,\n    auth: arrayToBase64(pushSubscription.getKey('auth')!),\n    p256dh: arrayToBase64(pushSubscription.getKey('p256dh')!)\n  };\n\n  const tokenDetails = await dbGet(messaging.firebaseDependencies);\n  if (!tokenDetails) {\n    // No token, get a new one.\n    return getNewToken(messaging.firebaseDependencies, subscriptionOptions);\n  } else if (\n    !isTokenValid(tokenDetails.subscriptionOptions!, subscriptionOptions)\n  ) {\n    // Invalid token, get a new one.\n    try {\n      await requestDeleteToken(\n        messaging.firebaseDependencies!,\n        tokenDetails.token\n      );\n    } catch (e) {\n      // Suppress errors because of #2364\n      console.warn(e);\n    }\n\n    return getNewToken(messaging.firebaseDependencies!, subscriptionOptions);\n  } else if (Date.now() >= tokenDetails.createTime + TOKEN_EXPIRATION_MS) {\n    // Weekly token refresh\n    return updateToken(messaging, {\n      token: tokenDetails.token,\n      createTime: Date.now(),\n      subscriptionOptions\n    });\n  } else {\n    // Valid token, nothing to do.\n    return tokenDetails.token;\n  }\n}\n\n/**\n * This method deletes the token from the database, unsubscribes the token from FCM, and unregisters\n * the push subscription if it exists.\n */\nexport async function deleteTokenInternal(\n  messaging: MessagingService\n): Promise<boolean> {\n  const tokenDetails = await dbGet(messaging.firebaseDependencies);\n  if (tokenDetails) {\n    await requestDeleteToken(\n      messaging.firebaseDependencies,\n      tokenDetails.token\n    );\n    await dbRemove(messaging.firebaseDependencies);\n  }\n\n  // Unsubscribe from the push subscription.\n  const pushSubscription =\n    await messaging.swRegistration!.pushManager.getSubscription();\n  if (pushSubscription) {\n    return pushSubscription.unsubscribe();\n  }\n\n  // If there's no SW, consider it a success.\n  return true;\n}\n\nasync function updateToken(\n  messaging: MessagingService,\n  tokenDetails: TokenDetails\n): Promise<string> {\n  try {\n    const updatedToken = await requestUpdateToken(\n      messaging.firebaseDependencies,\n      tokenDetails\n    );\n\n    const updatedTokenDetails: TokenDetails = {\n      ...tokenDetails,\n      token: updatedToken,\n      createTime: Date.now()\n    };\n\n    await dbSet(messaging.firebaseDependencies, updatedTokenDetails);\n    return updatedToken;\n  } catch (e) {\n    await deleteTokenInternal(messaging);\n    throw e;\n  }\n}\n\nasync function getNewToken(\n  firebaseDependencies: FirebaseInternalDependencies,\n  subscriptionOptions: SubscriptionOptions\n): Promise<string> {\n  const token = await requestGetToken(\n    firebaseDependencies,\n    subscriptionOptions\n  );\n  const tokenDetails: TokenDetails = {\n    token,\n    createTime: Date.now(),\n    subscriptionOptions\n  };\n  await dbSet(firebaseDependencies, tokenDetails);\n  return tokenDetails.token;\n}\n\n/**\n * Gets a PushSubscription for the current user.\n */\nasync function getPushSubscription(\n  swRegistration: ServiceWorkerRegistration,\n  vapidKey: string\n): Promise<PushSubscription> {\n  const subscription = await swRegistration.pushManager.getSubscription();\n  if (subscription) {\n    return subscription;\n  }\n\n  return swRegistration.pushManager.subscribe({\n    userVisibleOnly: true,\n    // Chrome <= 75 doesn't support base64-encoded VAPID key. For backward compatibility, VAPID key\n    // submitted to pushManager#subscribe must be of type Uint8Array.\n    applicationServerKey: base64ToArray(vapidKey)\n  });\n}\n\n/**\n * Checks if the saved tokenDetails object matches the configuration provided.\n */\nfunction isTokenValid(\n  dbOptions: SubscriptionOptions,\n  currentOptions: SubscriptionOptions\n): boolean {\n  const isVapidKeyEqual = currentOptions.vapidKey === dbOptions.vapidKey;\n  const isEndpointEqual = currentOptions.endpoint === dbOptions.endpoint;\n  const isAuthEqual = currentOptions.auth === dbOptions.auth;\n  const isP256dhEqual = currentOptions.p256dh === dbOptions.p256dh;\n\n  return isVapidKeyEqual && isEndpointEqual && isAuthEqual && isP256dhEqual;\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MessagePayload } from '../interfaces/public-types';\nimport { MessagePayloadInternal } from '../interfaces/internal-message-payload';\n\nexport function externalizePayload(\n  internalPayload: MessagePayloadInternal\n): MessagePayload {\n  const payload: MessagePayload = {\n    from: internalPayload.from,\n    // eslint-disable-next-line camelcase\n    collapseKey: internalPayload.collapse_key,\n    // eslint-disable-next-line camelcase\n    messageId: internalPayload.fcmMessageId\n  } as MessagePayload;\n\n  propagateNotificationPayload(payload, internalPayload);\n  propagateDataPayload(payload, internalPayload);\n  propagateFcmOptions(payload, internalPayload);\n\n  return payload;\n}\n\nfunction propagateNotificationPayload(\n  payload: MessagePayload,\n  messagePayloadInternal: MessagePayloadInternal\n): void {\n  if (!messagePayloadInternal.notification) {\n    return;\n  }\n\n  payload.notification = {};\n\n  const title = messagePayloadInternal.notification!.title;\n  if (!!title) {\n    payload.notification!.title = title;\n  }\n\n  const body = messagePayloadInternal.notification!.body;\n  if (!!body) {\n    payload.notification!.body = body;\n  }\n\n  const image = messagePayloadInternal.notification!.image;\n  if (!!image) {\n    payload.notification!.image = image;\n  }\n\n  const icon = messagePayloadInternal.notification!.icon;\n  if (!!icon) {\n    payload.notification!.icon = icon;\n  }\n}\n\nfunction propagateDataPayload(\n  payload: MessagePayload,\n  messagePayloadInternal: MessagePayloadInternal\n): void {\n  if (!messagePayloadInternal.data) {\n    return;\n  }\n\n  payload.data = messagePayloadInternal.data as { [key: string]: string };\n}\n\nfunction propagateFcmOptions(\n  payload: MessagePayload,\n  messagePayloadInternal: MessagePayloadInternal\n): void {\n  // fcmOptions.link value is written into notification.click_action. see more in b/232072111\n  if (\n    !messagePayloadInternal.fcmOptions &&\n    !messagePayloadInternal.notification?.click_action\n  ) {\n    return;\n  }\n\n  payload.fcmOptions = {};\n\n  const link =\n    messagePayloadInternal.fcmOptions?.link ??\n    messagePayloadInternal.notification?.click_action;\n\n  if (!!link) {\n    payload.fcmOptions!.link = link;\n  }\n\n  // eslint-disable-next-line camelcase\n  const analyticsLabel = messagePayloadInternal.fcmOptions?.analytics_label;\n  if (!!analyticsLabel) {\n    payload.fcmOptions!.analyticsLabel = analyticsLabel;\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CONSOLE_CAMPAIGN_ID } from '../util/constants';\nimport { ConsoleMessageData } from '../interfaces/internal-message-payload';\n\nexport function isConsoleMessage(data: unknown): data is ConsoleMessageData {\n  // This message has a campaign ID, meaning it was sent using the Firebase Console.\n  return typeof data === 'object' && !!data && CONSOLE_CAMPAIGN_ID in data;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  DEFAULT_BACKOFF_TIME_MS,\n  EVENT_MESSAGE_DELIVERED,\n  FCM_LOG_SOURCE,\n  LOG_INTERVAL_IN_MS,\n  MAX_NUMBER_OF_EVENTS_PER_LOG_REQUEST,\n  MAX_RETRIES,\n  MessageType,\n  SDK_PLATFORM_WEB\n} from '../util/constants';\nimport {\n  FcmEvent,\n  LogEvent,\n  LogRequest,\n  LogResponse\n} from '../interfaces/logging-types';\n\nimport { MessagePayloadInternal } from '../interfaces/internal-message-payload';\nimport { MessagingService } from '../messaging-service';\n\nconst FIRELOG_ENDPOINT = _mergeStrings(\n  'hts/frbslgigp.ogepscmv/ieo/eaylg',\n  'tp:/ieaeogn-agolai.o/1frlglgc/o'\n);\n\nconst FCM_TRANSPORT_KEY = _mergeStrings(\n  'AzSCbw63g1R0nCw85jG8',\n  'Iaya3yLKwmgvh7cF0q4'\n);\n\nexport function startLoggingService(messaging: MessagingService): void {\n  if (!messaging.isLogServiceStarted) {\n    _processQueue(messaging, LOG_INTERVAL_IN_MS);\n    messaging.isLogServiceStarted = true;\n  }\n}\n\n/**\n *\n * @param messaging the messaging instance.\n * @param offsetInMs this method execute after `offsetInMs` elapsed .\n */\nexport function _processQueue(\n  messaging: MessagingService,\n  offsetInMs: number\n): void {\n  setTimeout(async () => {\n    if (!messaging.deliveryMetricsExportedToBigQueryEnabled) {\n      // flush events and terminate logging service\n      messaging.logEvents = [];\n      messaging.isLogServiceStarted = false;\n\n      return;\n    }\n\n    if (!messaging.logEvents.length) {\n      return _processQueue(messaging, LOG_INTERVAL_IN_MS);\n    }\n\n    await _dispatchLogEvents(messaging);\n  }, offsetInMs);\n}\n\nexport async function _dispatchLogEvents(\n  messaging: MessagingService\n): Promise<void> {\n  for (\n    let i = 0, n = messaging.logEvents.length;\n    i < n;\n    i += MAX_NUMBER_OF_EVENTS_PER_LOG_REQUEST\n  ) {\n    const logRequest = _createLogRequest(\n      messaging.logEvents.slice(i, i + MAX_NUMBER_OF_EVENTS_PER_LOG_REQUEST)\n    );\n\n    let retryCount = 0,\n      response = {} as Response;\n\n    do {\n      try {\n        response = await fetch(\n          FIRELOG_ENDPOINT.concat('?key=', FCM_TRANSPORT_KEY),\n          {\n            method: 'POST',\n            body: JSON.stringify(logRequest)\n          }\n        );\n\n        // don't retry on 200s or non retriable errors\n        if (response.ok || (!response.ok && !isRetriableError(response))) {\n          break;\n        }\n\n        if (!response.ok && isRetriableError(response)) {\n          // rethrow to retry with quota\n          throw new Error(\n            'a retriable Non-200 code is returned in fetch to Firelog endpoint. Retry'\n          );\n        }\n      } catch (error) {\n        const isLastAttempt = retryCount === MAX_RETRIES;\n        if (isLastAttempt) {\n          // existing the do-while interactive retry logic because retry quota has reached.\n          break;\n        }\n      }\n\n      let delayInMs: number;\n      try {\n        delayInMs = Number(\n          ((await response.json()) as LogResponse).nextRequestWaitMillis\n        );\n      } catch (e) {\n        delayInMs = DEFAULT_BACKOFF_TIME_MS;\n      }\n\n      await new Promise(resolve => setTimeout(resolve, delayInMs));\n\n      retryCount++;\n    } while (retryCount < MAX_RETRIES);\n  }\n\n  messaging.logEvents = [];\n  // schedule for next logging\n  _processQueue(messaging, LOG_INTERVAL_IN_MS);\n}\n\nfunction isRetriableError(response: Response): boolean {\n  const httpStatus = response.status;\n\n  return (\n    httpStatus === 429 ||\n    httpStatus === 500 ||\n    httpStatus === 503 ||\n    httpStatus === 504\n  );\n}\n\nexport async function stageLog(\n  messaging: MessagingService,\n  internalPayload: MessagePayloadInternal\n): Promise<void> {\n  const fcmEvent = createFcmEvent(\n    internalPayload,\n    await messaging.firebaseDependencies.installations.getId()\n  );\n\n  createAndEnqueueLogEvent(messaging, fcmEvent);\n}\n\nfunction createFcmEvent(\n  internalPayload: MessagePayloadInternal,\n  fid: string\n): FcmEvent {\n  const fcmEvent = {} as FcmEvent;\n\n  /* eslint-disable camelcase */\n  // some fields should always be non-null. Still check to ensure.\n  if (!!internalPayload.from) {\n    fcmEvent.project_number = internalPayload.from;\n  }\n\n  if (!!internalPayload.fcmMessageId) {\n    fcmEvent.message_id = internalPayload.fcmMessageId;\n  }\n\n  fcmEvent.instance_id = fid;\n\n  if (!!internalPayload.notification) {\n    fcmEvent.message_type = MessageType.DISPLAY_NOTIFICATION.toString();\n  } else {\n    fcmEvent.message_type = MessageType.DATA_MESSAGE.toString();\n  }\n\n  fcmEvent.sdk_platform = SDK_PLATFORM_WEB.toString();\n  fcmEvent.package_name = self.origin.replace(/(^\\w+:|^)\\/\\//, '');\n\n  if (!!internalPayload.collapse_key) {\n    fcmEvent.collapse_key = internalPayload.collapse_key;\n  }\n\n  fcmEvent.event = EVENT_MESSAGE_DELIVERED.toString();\n\n  if (!!internalPayload.fcmOptions?.analytics_label) {\n    fcmEvent.analytics_label = internalPayload.fcmOptions?.analytics_label;\n  }\n\n  /* eslint-enable camelcase */\n  return fcmEvent;\n}\n\nfunction createAndEnqueueLogEvent(\n  messaging: MessagingService,\n  fcmEvent: FcmEvent\n): void {\n  const logEvent = {} as LogEvent;\n\n  /* eslint-disable camelcase */\n  logEvent.event_time_ms = Math.floor(Date.now()).toString();\n  logEvent.source_extension_json_proto3 = JSON.stringify(fcmEvent);\n  // eslint-disable-next-line camelcase\n\n  messaging.logEvents.push(logEvent);\n}\n\nexport function _createLogRequest(logEventQueue: LogEvent[]): LogRequest {\n  const logRequest = {} as LogRequest;\n\n  /* eslint-disable camelcase */\n  logRequest.log_source = FCM_LOG_SOURCE.toString();\n  logRequest.log_event = logEventQueue;\n  /* eslint-enable camelcase */\n\n  return logRequest;\n}\n\nexport function _mergeStrings(s1: string, s2: string): string {\n  const resultArray = [];\n  for (let i = 0; i < s1.length; i++) {\n    resultArray.push(s1.charAt(i));\n    if (i < s2.length) {\n      resultArray.push(s2.charAt(i));\n    }\n  }\n\n  return resultArray.join('');\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ERROR_FACTORY, ErrorCode } from '../util/errors';\nimport { FirebaseApp, FirebaseOptions } from '@firebase/app';\n\nimport { AppConfig } from '../interfaces/app-config';\nimport { FirebaseError } from '@firebase/util';\n\nexport function extractAppConfig(app: FirebaseApp): AppConfig {\n  if (!app || !app.options) {\n    throw getMissingValueError('App Configuration Object');\n  }\n\n  if (!app.name) {\n    throw getMissingValueError('App Name');\n  }\n\n  // Required app config keys\n  const configKeys: ReadonlyArray<keyof FirebaseOptions> = [\n    'projectId',\n    'apiKey',\n    'appId',\n    'messagingSenderId'\n  ];\n\n  const { options } = app;\n  for (const keyName of configKeys) {\n    if (!options[keyName]) {\n      throw getMissingValueError(keyName);\n    }\n  }\n\n  return {\n    appName: app.name,\n    projectId: options.projectId!,\n    apiKey: options.apiKey!,\n    appId: options.appId!,\n    senderId: options.messagingSenderId!\n  };\n}\n\nfunction getMissingValueError(valueName: string): FirebaseError {\n  return ERROR_FACTORY.create(ErrorCode.MISSING_APP_CONFIG_VALUES, {\n    valueName\n  });\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseApp, _FirebaseService } from '@firebase/app';\nimport { MessagePayload, NextFn, Observer } from './interfaces/public-types';\n\nimport { FirebaseAnalyticsInternalName } from '@firebase/analytics-interop-types';\nimport { FirebaseInternalDependencies } from './interfaces/internal-dependencies';\nimport { LogEvent } from './interfaces/logging-types';\nimport { Provider } from '@firebase/component';\nimport { _FirebaseInstallationsInternal } from '@firebase/installations';\nimport { extractAppConfig } from './helpers/extract-app-config';\n\nexport class MessagingService implements _FirebaseService {\n  readonly app!: FirebaseApp;\n  readonly firebaseDependencies!: FirebaseInternalDependencies;\n\n  swRegistration?: ServiceWorkerRegistration;\n  vapidKey?: string;\n  // logging is only done with end user consent. Default to false.\n  deliveryMetricsExportedToBigQueryEnabled: boolean = false;\n\n  onBackgroundMessageHandler:\n    | NextFn<MessagePayload>\n    | Observer<MessagePayload>\n    | null = null;\n\n  onMessageHandler: NextFn<MessagePayload> | Observer<MessagePayload> | null =\n    null;\n\n  logEvents: LogEvent[] = [];\n  isLogServiceStarted: boolean = false;\n\n  constructor(\n    app: FirebaseApp,\n    installations: _FirebaseInstallationsInternal,\n    analyticsProvider: Provider<FirebaseAnalyticsInternalName>\n  ) {\n    const appConfig = extractAppConfig(app);\n\n    this.firebaseDependencies = {\n      app,\n      appConfig,\n      installations,\n      analyticsProvider\n    };\n  }\n\n  _delete(): Promise<void> {\n    return Promise.resolve();\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DEFAULT_SW_PATH, DEFAULT_SW_SCOPE } from '../util/constants';\nimport { ERROR_FACTORY, ErrorCode } from '../util/errors';\n\nimport { MessagingService } from '../messaging-service';\n\nexport async function registerDefaultSw(\n  messaging: MessagingService\n): Promise<void> {\n  try {\n    messaging.swRegistration = await navigator.serviceWorker.register(\n      DEFAULT_SW_PATH,\n      {\n        scope: DEFAULT_SW_SCOPE\n      }\n    );\n\n    // The timing when browser updates sw when sw has an update is unreliable from experiment. It\n    // leads to version conflict when the SDK upgrades to a newer version in the main page, but sw\n    // is stuck with the old version. For example,\n    // https://github.com/firebase/firebase-js-sdk/issues/2590 The following line reliably updates\n    // sw if there was an update.\n    messaging.swRegistration.update().catch(() => {\n      /* it is non blocking and we don't care if it failed */\n    });\n  } catch (e) {\n    throw ERROR_FACTORY.create(ErrorCode.FAILED_DEFAULT_REGISTRATION, {\n      browserErrorMessage: (e as Error)?.message\n    });\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ERROR_FACTORY, ErrorCode } from '../util/errors';\n\nimport { MessagingService } from '../messaging-service';\nimport { registerDefaultSw } from './registerDefaultSw';\n\nexport async function updateSwReg(\n  messaging: MessagingService,\n  swRegistration?: ServiceWorkerRegistration | undefined\n): Promise<void> {\n  if (!swRegistration && !messaging.swRegistration) {\n    await registerDefaultSw(messaging);\n  }\n\n  if (!swRegistration && !!messaging.swRegistration) {\n    return;\n  }\n\n  if (!(swRegistration instanceof ServiceWorkerRegistration)) {\n    throw ERROR_FACTORY.create(ErrorCode.INVALID_SW_REGISTRATION);\n  }\n\n  messaging.swRegistration = swRegistration;\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DEFAULT_VAPID_KEY } from '../util/constants';\nimport { MessagingService } from '../messaging-service';\n\nexport async function updateVapidKey(\n  messaging: MessagingService,\n  vapidKey?: string | undefined\n): Promise<void> {\n  if (!!vapidKey) {\n    messaging.vapidKey = vapidKey;\n  } else if (!messaging.vapidKey) {\n    messaging.vapidKey = DEFAULT_VAPID_KEY;\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ERROR_FACTORY, ErrorCode } from '../util/errors';\n\nimport { MessagingService } from '../messaging-service';\nimport { getTokenInternal } from '../internals/token-manager';\nimport { updateSwReg } from '../helpers/updateSwReg';\nimport { updateVapidKey } from '../helpers/updateVapidKey';\nimport { GetTokenOptions } from '../interfaces/public-types';\n\nexport async function getToken(\n  messaging: MessagingService,\n  options?: GetTokenOptions\n): Promise<string> {\n  if (!navigator) {\n    throw ERROR_FACTORY.create(ErrorCode.AVAILABLE_IN_WINDOW);\n  }\n\n  if (Notification.permission === 'default') {\n    await Notification.requestPermission();\n  }\n\n  if (Notification.permission !== 'granted') {\n    throw ERROR_FACTORY.create(ErrorCode.PERMISSION_BLOCKED);\n  }\n\n  await updateVapidKey(messaging, options?.vapidKey);\n  await updateSwReg(messaging, options?.serviceWorkerRegistration);\n\n  return getTokenInternal(messaging);\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  CONSOLE_CAMPAIGN_ID,\n  CONSOLE_CAMPAIGN_NAME,\n  CONSOLE_CAMPAIGN_TIME\n} from '../util/constants';\nimport {\n  ConsoleMessageData,\n  MessageType\n} from '../interfaces/internal-message-payload';\n\nimport { MessagingService } from '../messaging-service';\n\nexport async function logToScion(\n  messaging: MessagingService,\n  messageType: MessageType,\n  data: ConsoleMessageData\n): Promise<void> {\n  const eventType = getEventType(messageType);\n  const analytics =\n    await messaging.firebaseDependencies.analyticsProvider.get();\n  analytics.logEvent(eventType, {\n    /* eslint-disable camelcase */\n    message_id: data[CONSOLE_CAMPAIGN_ID],\n    message_name: data[CONSOLE_CAMPAIGN_NAME],\n    message_time: data[CONSOLE_CAMPAIGN_TIME],\n    message_device_time: Math.floor(Date.now() / 1000)\n    /* eslint-enable camelcase */\n  });\n}\n\nfunction getEventType(messageType: MessageType): string {\n  switch (messageType) {\n    case MessageType.NOTIFICATION_CLICKED:\n      return 'notification_open';\n    case MessageType.PUSH_RECEIVED:\n      return 'notification_foreground';\n    default:\n      throw new Error();\n  }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  MessagePayloadInternal,\n  MessageType\n} from '../interfaces/internal-message-payload';\n\nimport { CONSOLE_CAMPAIGN_ANALYTICS_ENABLED } from '../util/constants';\nimport { MessagingService } from '../messaging-service';\nimport { externalizePayload } from '../helpers/externalizePayload';\nimport { isConsoleMessage } from '../helpers/is-console-message';\nimport { logToScion } from '../helpers/logToScion';\n\nexport async function messageEventListener(\n  messaging: MessagingService,\n  event: MessageEvent\n): Promise<void> {\n  const internalPayload = event.data as MessagePayloadInternal;\n\n  if (!internalPayload.isFirebaseMessaging) {\n    return;\n  }\n\n  if (\n    messaging.onMessageHandler &&\n    internalPayload.messageType === MessageType.PUSH_RECEIVED\n  ) {\n    if (typeof messaging.onMessageHandler === 'function') {\n      messaging.onMessageHandler(externalizePayload(internalPayload));\n    } else {\n      messaging.onMessageHandler.next(externalizePayload(internalPayload));\n    }\n  }\n\n  // Log to Scion if applicable\n  const dataPayload = internalPayload.data;\n  if (\n    isConsoleMessage(dataPayload) &&\n    dataPayload[CONSOLE_CAMPAIGN_ANALYTICS_ENABLED] === '1'\n  ) {\n    await logToScion(messaging, internalPayload.messageType!, dataPayload);\n  }\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  Component,\n  ComponentContainer,\n  ComponentType,\n  InstanceFactory\n} from '@firebase/component';\nimport {\n  onNotificationClick,\n  onPush,\n  onSubChange\n} from '../listeners/sw-listeners';\n\nimport { GetTokenOptions } from '../interfaces/public-types';\nimport { MessagingInternal } from '@firebase/messaging-interop-types';\nimport { MessagingService } from '../messaging-service';\nimport { ServiceWorkerGlobalScope } from '../util/sw-types';\nimport { _registerComponent, registerVersion } from '@firebase/app';\nimport { getToken } from '../api/getToken';\nimport { messageEventListener } from '../listeners/window-listener';\n\nimport { name, version } from '../../package.json';\n\nconst WindowMessagingFactory: InstanceFactory<'messaging'> = (\n  container: ComponentContainer\n) => {\n  const messaging = new MessagingService(\n    container.getProvider('app').getImmediate(),\n    container.getProvider('installations-internal').getImmediate(),\n    container.getProvider('analytics-internal')\n  );\n\n  navigator.serviceWorker.addEventListener('message', e =>\n    messageEventListener(messaging as MessagingService, e)\n  );\n\n  return messaging;\n};\n\nconst WindowMessagingInternalFactory: InstanceFactory<'messaging-internal'> = (\n  container: ComponentContainer\n) => {\n  const messaging = container\n    .getProvider('messaging')\n    .getImmediate() as MessagingService;\n\n  const messagingInternal: MessagingInternal = {\n    getToken: (options?: GetTokenOptions) => getToken(messaging, options)\n  };\n\n  return messagingInternal;\n};\n\ndeclare const self: ServiceWorkerGlobalScope;\nconst SwMessagingFactory: InstanceFactory<'messaging'> = (\n  container: ComponentContainer\n) => {\n  const messaging = new MessagingService(\n    container.getProvider('app').getImmediate(),\n    container.getProvider('installations-internal').getImmediate(),\n    container.getProvider('analytics-internal')\n  );\n\n  self.addEventListener('push', e => {\n    e.waitUntil(onPush(e, messaging as MessagingService));\n  });\n  self.addEventListener('pushsubscriptionchange', e => {\n    e.waitUntil(onSubChange(e, messaging as MessagingService));\n  });\n  self.addEventListener('notificationclick', e => {\n    e.waitUntil(onNotificationClick(e));\n  });\n\n  return messaging;\n};\n\nexport function registerMessagingInWindow(): void {\n  _registerComponent(\n    new Component('messaging', WindowMessagingFactory, ComponentType.PUBLIC)\n  );\n\n  _registerComponent(\n    new Component(\n      'messaging-internal',\n      WindowMessagingInternalFactory,\n      ComponentType.PRIVATE\n    )\n  );\n\n  registerVersion(name, version);\n  // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\n  registerVersion(name, version, '__BUILD_TARGET__');\n}\n\n/**\n * The messaging instance registered in sw is named differently than that of in client. This is\n * because both `registerMessagingInWindow` and `registerMessagingInSw` would be called in\n * `messaging-compat` and component with the same name can only be registered once.\n */\nexport function registerMessagingInSw(): void {\n  _registerComponent(\n    new Component('messaging-sw', SwMessagingFactory, ComponentType.PUBLIC)\n  );\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  areCookiesEnabled,\n  isIndexedDBAvailable,\n  validateIndexedDBOpenable\n} from '@firebase/util';\n\n/**\n * Checks if all required APIs exist in the browser.\n * @returns a Promise that resolves to a boolean.\n *\n * @public\n */\nexport async function isWindowSupported(): Promise<boolean> {\n  try {\n    // This throws if open() is unsupported, so adding it to the conditional\n    // statement below can cause an uncaught error.\n    await validateIndexedDBOpenable();\n  } catch (e) {\n    return false;\n  }\n  // firebase-js-sdk/issues/2393 reveals that idb#open in Safari iframe and Firefox private browsing\n  // might be prohibited to run. In these contexts, an error would be thrown during the messaging\n  // instantiating phase, informing the developers to import/call isSupported for special handling.\n  return (\n    typeof window !== 'undefined' &&\n    isIndexedDBAvailable() &&\n    areCookiesEnabled() &&\n    'serviceWorker' in navigator &&\n    'PushManager' in window &&\n    'Notification' in window &&\n    'fetch' in window &&\n    ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\n    PushSubscription.prototype.hasOwnProperty('getKey')\n  );\n}\n\n/**\n * Checks whether all required APIs exist within SW Context\n * @returns a Promise that resolves to a boolean.\n *\n * @public\n */\nexport async function isSwSupported(): Promise<boolean> {\n  // firebase-js-sdk/issues/2393 reveals that idb#open in Safari iframe and Firefox private browsing\n  // might be prohibited to run. In these contexts, an error would be thrown during the messaging\n  // instantiating phase, informing the developers to import/call isSupported for special handling.\n  return (\n    isIndexedDBAvailable() &&\n    (await validateIndexedDBOpenable()) &&\n    'PushManager' in self &&\n    'Notification' in self &&\n    ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\n    PushSubscription.prototype.hasOwnProperty('getKey')\n  );\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ERROR_FACTORY, ErrorCode } from '../util/errors';\n\nimport { MessagingService } from '../messaging-service';\nimport { deleteTokenInternal } from '../internals/token-manager';\nimport { registerDefaultSw } from '../helpers/registerDefaultSw';\n\nexport async function deleteToken(\n  messaging: MessagingService\n): Promise<boolean> {\n  if (!navigator) {\n    throw ERROR_FACTORY.create(ErrorCode.AVAILABLE_IN_WINDOW);\n  }\n\n  if (!messaging.swRegistration) {\n    await registerDefaultSw(messaging);\n  }\n\n  return deleteTokenInternal(messaging);\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ERROR_FACTORY, ErrorCode } from './util/errors';\nimport { FirebaseApp, _getProvider, getApp } from '@firebase/app';\nimport {\n  GetTokenOptions,\n  MessagePayload,\n  Messaging\n} from './interfaces/public-types';\nimport {\n  NextFn,\n  Observer,\n  Unsubscribe,\n  getModularInstance\n} from '@firebase/util';\nimport { isSwSupported, isWindowSupported } from './api/isSupported';\n\nimport { MessagingService } from './messaging-service';\nimport { deleteToken as _deleteToken } from './api/deleteToken';\nimport { getToken as _getToken } from './api/getToken';\nimport { onBackgroundMessage as _onBackgroundMessage } from './api/onBackgroundMessage';\nimport { onMessage as _onMessage } from './api/onMessage';\nimport { _setDeliveryMetricsExportedToBigQueryEnabled } from './api/setDeliveryMetricsExportedToBigQueryEnabled';\n\n/**\n * Retrieves a Firebase Cloud Messaging instance.\n *\n * @returns The Firebase Cloud Messaging instance associated with the provided firebase app.\n *\n * @public\n */\nexport function getMessagingInWindow(app: FirebaseApp = getApp()): Messaging {\n  // Conscious decision to make this async check non-blocking during the messaging instance\n  // initialization phase for performance consideration. An error would be thrown latter for\n  // developer's information. Developers can then choose to import and call `isSupported` for\n  // special handling.\n  isWindowSupported().then(\n    isSupported => {\n      // If `isWindowSupported()` resolved, but returned false.\n      if (!isSupported) {\n        throw ERROR_FACTORY.create(ErrorCode.UNSUPPORTED_BROWSER);\n      }\n    },\n    _ => {\n      // If `isWindowSupported()` rejected.\n      throw ERROR_FACTORY.create(ErrorCode.INDEXED_DB_UNSUPPORTED);\n    }\n  );\n  return _getProvider(getModularInstance(app), 'messaging').getImmediate();\n}\n\n/**\n * Retrieves a Firebase Cloud Messaging instance.\n *\n * @returns The Firebase Cloud Messaging instance associated with the provided firebase app.\n *\n * @public\n */\nexport function getMessagingInSw(app: FirebaseApp = getApp()): Messaging {\n  // Conscious decision to make this async check non-blocking during the messaging instance\n  // initialization phase for performance consideration. An error would be thrown latter for\n  // developer's information. Developers can then choose to import and call `isSupported` for\n  // special handling.\n  isSwSupported().then(\n    isSupported => {\n      // If `isSwSupported()` resolved, but returned false.\n      if (!isSupported) {\n        throw ERROR_FACTORY.create(ErrorCode.UNSUPPORTED_BROWSER);\n      }\n    },\n    _ => {\n      // If `isSwSupported()` rejected.\n      throw ERROR_FACTORY.create(ErrorCode.INDEXED_DB_UNSUPPORTED);\n    }\n  );\n  return _getProvider(getModularInstance(app), 'messaging-sw').getImmediate();\n}\n\n/**\n * Subscribes the {@link Messaging} instance to push notifications. Returns an Firebase Cloud\n * Messaging registration token that can be used to send push messages to that {@link Messaging}\n * instance.\n *\n * If a notification permission isn't already granted, this method asks the user for permission. The\n * returned promise rejects if the user does not allow the app to show notifications.\n *\n * @param messaging - The {@link Messaging} instance.\n * @param options - Provides an optional vapid key and an optinoal service worker registration\n *\n * @returns The promise resolves with an FCM registration token.\n *\n * @public\n */\nexport async function getToken(\n  messaging: Messaging,\n  options?: GetTokenOptions\n): Promise<string> {\n  messaging = getModularInstance(messaging);\n  return _getToken(messaging as MessagingService, options);\n}\n\n/**\n * Deletes the registration token associated with this {@link Messaging} instance and unsubscribes\n * the {@link Messaging} instance from the push subscription.\n *\n * @param messaging - The {@link Messaging} instance.\n *\n * @returns The promise resolves when the token has been successfully deleted.\n *\n * @public\n */\nexport function deleteToken(messaging: Messaging): Promise<boolean> {\n  messaging = getModularInstance(messaging);\n  return _deleteToken(messaging as MessagingService);\n}\n\n/**\n * When a push message is received and the user is currently on a page for your origin, the\n * message is passed to the page and an `onMessage()` event is dispatched with the payload of\n * the push message.\n *\n *\n * @param messaging - The {@link Messaging} instance.\n * @param nextOrObserver - This function, or observer object with `next` defined,\n *     is called when a message is received and the user is currently viewing your page.\n * @returns To stop listening for messages execute this returned function.\n *\n * @public\n */\nexport function onMessage(\n  messaging: Messaging,\n  nextOrObserver: NextFn<MessagePayload> | Observer<MessagePayload>\n): Unsubscribe {\n  messaging = getModularInstance(messaging);\n  return _onMessage(messaging as MessagingService, nextOrObserver);\n}\n\n/**\n * Called when a message is received while the app is in the background. An app is considered to be\n * in the background if no active window is displayed.\n *\n * @param messaging - The {@link Messaging} instance.\n * @param nextOrObserver - This function, or observer object with `next` defined, is called when a\n * message is received and the app is currently in the background.\n *\n * @returns To stop listening for messages execute this returned function\n *\n * @public\n */\nexport function onBackgroundMessage(\n  messaging: Messaging,\n  nextOrObserver: NextFn<MessagePayload> | Observer<MessagePayload>\n): Unsubscribe {\n  messaging = getModularInstance(messaging);\n  return _onBackgroundMessage(messaging as MessagingService, nextOrObserver);\n}\n\n/**\n * Enables or disables Firebase Cloud Messaging message delivery metrics export to BigQuery. By\n * default, message delivery metrics are not exported to BigQuery. Use this method to enable or\n * disable the export at runtime.\n *\n * @param messaging - The `FirebaseMessaging` instance.\n * @param enable - Whether Firebase Cloud Messaging should export message delivery metrics to\n * BigQuery.\n *\n * @public\n */\nexport function experimentalSetDeliveryMetricsExportedToBigQueryEnabled(\n  messaging: Messaging,\n  enable: boolean\n): void {\n  messaging = getModularInstance(messaging);\n  return _setDeliveryMetricsExportedToBigQueryEnabled(messaging, enable);\n}\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t(require(\"react\")):\"function\"==typeof define&&define.amd?define([\"react\"],t):\"object\"==typeof exports?exports.ReactCrop=t(require(\"react\")):e.ReactCrop=t(e.React)}(this,(e=>(()=>{\"use strict\";var t={899:t=>{t.exports=e}},n={};function o(e){var r=n[e];if(void 0!==r)return r.exports;var i=n[e]={exports:{}};return t[e](i,i.exports,o),i.exports}o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})};var r={};return(()=>{o.r(r),o.d(r,{Component:()=>u,areCropsEqual:()=>h,centerCrop:()=>d,clamp:()=>a,containCrop:()=>p,convertToPercentCrop:()=>c,convertToPixelCrop:()=>l,default:()=>u,defaultCrop:()=>i,makeAspectCrop:()=>s,nudgeCrop:()=>g});var e=o(899),t=o.n(e);function n(e){var t,o,r=\"\";if(\"string\"==typeof e||\"number\"==typeof e)r+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(o=n(e[t]))&&(r&&(r+=\" \"),r+=o);else for(t in e)e[t]&&(r&&(r+=\" \"),r+=t);return r}const i={x:0,y:0,width:0,height:0,unit:\"px\"};function a(e,t,n){return Math.min(Math.max(e,t),n)}function h(e,t){return e.width===t.width&&e.height===t.height&&e.x===t.x&&e.y===t.y&&e.unit===t.unit}function s(e,t,n,o){const r=l(e,n,o);return e.width&&(r.height=r.width/t),e.height&&(r.width=r.height*t),r.y+r.height>o&&(r.height=o-r.y,r.width=r.height*t),r.x+r.width>n&&(r.width=n-r.x,r.height=r.width/t),\"%\"===e.unit?c(r,n,o):r}function d(e,t,n){const o=l(e,t,n);return o.x=(t-o.width)/2,o.y=(n-o.height)/2,\"%\"===e.unit?c(o,t,n):o}function c(e,t,n){return\"%\"===e.unit?{...i,...e,unit:\"%\"}:{unit:\"%\",x:e.x?e.x/t*100:0,y:e.y?e.y/n*100:0,width:e.width?e.width/t*100:0,height:e.height?e.height/n*100:0}}function l(e,t,n){return e.unit?\"px\"===e.unit?{...i,...e,unit:\"px\"}:{unit:\"px\",x:e.x?e.x*t/100:0,y:e.y?e.y*n/100:0,width:e.width?e.width*t/100:0,height:e.height?e.height*n/100:0}:{...i,...e,unit:\"px\"}}function p(e,t,n,o,r,i=0,a=0,h=o,s=r){const d={...e};let c=Math.min(i,o),l=Math.min(a,r),p=Math.min(h,o),g=Math.min(s,r);t&&(t>1?(c=a?a*t:c,l=c/t,p=h*t):(l=i?i/t:l,c=l*t,g=s/t)),d.y<0&&(d.height=Math.max(d.height+d.y,l),d.y=0),d.x<0&&(d.width=Math.max(d.width+d.x,c),d.x=0);const w=o-(d.x+d.width);w<0&&(d.x=Math.min(d.x,o-c),d.width+=w);const u=r-(d.y+d.height);if(u<0&&(d.y=Math.min(d.y,r-l),d.height+=u),d.width<c&&(\"sw\"!==n&&\"nw\"!=n||(d.x-=c-d.width),d.width=c),d.height<l&&(\"nw\"!==n&&\"ne\"!=n||(d.y-=l-d.height),d.height=l),d.width>p&&(\"sw\"!==n&&\"nw\"!=n||(d.x-=p-d.width),d.width=p),d.height>g&&(\"nw\"!==n&&\"ne\"!=n||(d.y-=g-d.height),d.height=g),t){const e=d.width/d.height;if(e<t){const e=Math.max(d.width/t,l);\"nw\"!==n&&\"ne\"!=n||(d.y-=e-d.height),d.height=e}else if(e>t){const e=Math.max(d.height*t,c);\"sw\"!==n&&\"nw\"!=n||(d.x-=e-d.width),d.width=e}}return d}function g(e,t,n,o){const r={...e};return\"ArrowLeft\"===t?\"nw\"===o?(r.x-=n,r.y-=n,r.width+=n,r.height+=n):\"w\"===o?(r.x-=n,r.width+=n):\"sw\"===o?(r.x-=n,r.width+=n,r.height+=n):\"ne\"===o?(r.y+=n,r.width-=n,r.height-=n):\"e\"===o?r.width-=n:\"se\"===o&&(r.width-=n,r.height-=n):\"ArrowRight\"===t&&(\"nw\"===o?(r.x+=n,r.y+=n,r.width-=n,r.height-=n):\"w\"===o?(r.x+=n,r.width-=n):\"sw\"===o?(r.x+=n,r.width-=n,r.height-=n):\"ne\"===o?(r.y-=n,r.width+=n,r.height+=n):\"e\"===o?r.width+=n:\"se\"===o&&(r.width+=n,r.height+=n)),\"ArrowUp\"===t?\"nw\"===o?(r.x-=n,r.y-=n,r.width+=n,r.height+=n):\"n\"===o?(r.y-=n,r.height+=n):\"ne\"===o?(r.y-=n,r.width+=n,r.height+=n):\"sw\"===o?(r.x+=n,r.width-=n,r.height-=n):\"s\"===o?r.height-=n:\"se\"===o&&(r.width-=n,r.height-=n):\"ArrowDown\"===t&&(\"nw\"===o?(r.x+=n,r.y+=n,r.width-=n,r.height-=n):\"n\"===o?(r.y+=n,r.height-=n):\"ne\"===o?(r.y+=n,r.width-=n,r.height-=n):\"sw\"===o?(r.x-=n,r.width+=n,r.height+=n):\"s\"===o?r.height+=n:\"se\"===o&&(r.width+=n,r.height+=n)),r}const w={capture:!0,passive:!1};class u extends e.PureComponent{constructor(){super(...arguments),this.docMoveBound=!1,this.mouseDownOnCrop=!1,this.dragStarted=!1,this.evData={startClientX:0,startClientY:0,startCropX:0,startCropY:0,clientX:0,clientY:0,isResize:!0},this.componentRef=(0,e.createRef)(),this.mediaRef=(0,e.createRef)(),this.initChangeCalled=!1,this.state={cropIsActive:!1,newCropIsBeingDrawn:!1},this.onCropPointerDown=e=>{const{crop:t,disabled:n}=this.props,o=this.getBox();if(!t)return;const r=l(t,o.width,o.height);if(n)return;e.cancelable&&e.preventDefault(),this.bindDocMove(),this.componentRef.current.focus({preventScroll:!0});const i=e.target.dataset.ord,a=Boolean(i);let h=e.clientX,s=e.clientY,d=r.x,c=r.y;if(i){const t=e.clientX-o.x,n=e.clientY-o.y;let a=0,l=0;\"ne\"===i||\"e\"==i?(a=t-(r.x+r.width),l=n-r.y,d=r.x,c=r.y+r.height):\"se\"===i||\"s\"===i?(a=t-(r.x+r.width),l=n-(r.y+r.height),d=r.x,c=r.y):\"sw\"===i||\"w\"==i?(a=t-r.x,l=n-(r.y+r.height),d=r.x+r.width,c=r.y):\"nw\"!==i&&\"n\"!=i||(a=t-r.x,l=n-r.y,d=r.x+r.width,c=r.y+r.height),h=d+o.x+a,s=c+o.y+l}this.evData={startClientX:h,startClientY:s,startCropX:d,startCropY:c,clientX:e.clientX,clientY:e.clientY,isResize:a,ord:i},this.mouseDownOnCrop=!0,this.setState({cropIsActive:!0})},this.onComponentPointerDown=e=>{const{crop:t,disabled:n,locked:o,keepSelection:r,onChange:i}=this.props,a=this.getBox();if(n||o||r&&t)return;e.cancelable&&e.preventDefault(),this.bindDocMove(),this.componentRef.current.focus({preventScroll:!0});const h=e.clientX-a.x,s=e.clientY-a.y,d={unit:\"px\",x:h,y:s,width:0,height:0};this.evData={startClientX:e.clientX,startClientY:e.clientY,startCropX:h,startCropY:s,clientX:e.clientX,clientY:e.clientY,isResize:!0},this.mouseDownOnCrop=!0,i(l(d,a.width,a.height),c(d,a.width,a.height)),this.setState({cropIsActive:!0,newCropIsBeingDrawn:!0})},this.onDocPointerMove=e=>{const{crop:t,disabled:n,onChange:o,onDragStart:r}=this.props,i=this.getBox();if(n||!t||!this.mouseDownOnCrop)return;e.cancelable&&e.preventDefault(),this.dragStarted||(this.dragStarted=!0,r&&r(e));const{evData:a}=this;let s;a.clientX=e.clientX,a.clientY=e.clientY,s=a.isResize?this.resizeCrop():this.dragCrop(),h(t,s)||o(l(s,i.width,i.height),c(s,i.width,i.height))},this.onComponentKeyDown=e=>{const{crop:t,disabled:n,onChange:o,onComplete:r}=this.props,i=this.getBox();if(n)return;const h=e.key;let s=!1;if(!t)return;const d=this.makePixelCrop(),p=(navigator.platform.match(\"Mac\")?e.metaKey:e.ctrlKey)?u.nudgeStepLarge:e.shiftKey?u.nudgeStepMedium:u.nudgeStep;if(\"ArrowLeft\"===h?(d.x-=p,s=!0):\"ArrowRight\"===h?(d.x+=p,s=!0):\"ArrowUp\"===h?(d.y-=p,s=!0):\"ArrowDown\"===h&&(d.y+=p,s=!0),s){e.cancelable&&e.preventDefault(),d.x=a(d.x,0,i.width-d.width),d.y=a(d.y,0,i.height-d.height);const t=l(d,i.width,i.height),n=c(d,i.width,i.height);o(t,n),r&&r(t,n)}},this.onHandlerKeyDown=(e,t)=>{const{aspect:n=0,crop:o,disabled:r,minWidth:i=0,minHeight:a=0,maxWidth:s,maxHeight:d,onChange:w,onComplete:m}=this.props,y=this.getBox();if(r||!o)return;if(\"ArrowUp\"!==e.key&&\"ArrowDown\"!==e.key&&\"ArrowLeft\"!==e.key&&\"ArrowRight\"!==e.key)return;e.stopPropagation(),e.preventDefault();const x=(navigator.platform.match(\"Mac\")?e.metaKey:e.ctrlKey)?u.nudgeStepLarge:e.shiftKey?u.nudgeStepMedium:u.nudgeStep,C=p(g(l(o,y.width,y.height),e.key,x,t),n,t,y.width,y.height,i,a,s,d);if(!h(o,C)){const e=c(C,y.width,y.height);w(C,e),m&&m(C,e)}},this.onDocPointerDone=e=>{const{crop:t,disabled:n,onComplete:o,onDragEnd:r}=this.props,i=this.getBox();this.unbindDocMove(),!n&&t&&this.mouseDownOnCrop&&(this.mouseDownOnCrop=!1,this.dragStarted=!1,r&&r(e),o&&o(l(t,i.width,i.height),c(t,i.width,i.height)),this.setState({cropIsActive:!1,newCropIsBeingDrawn:!1}))},this.onDragFocus=e=>{var t;null===(t=this.componentRef.current)||void 0===t||t.scrollTo(0,0)}}get document(){return document}getBox(){const e=this.mediaRef.current;if(!e)return{x:0,y:0,width:0,height:0};const{x:t,y:n,width:o,height:r}=e.getBoundingClientRect();return{x:t,y:n,width:o,height:r}}componentDidUpdate(e){const{crop:t,onComplete:n}=this.props;if(n&&!e.crop&&t){const{width:e,height:o}=this.getBox();e&&o&&n(l(t,e,o),c(t,e,o))}}componentWillUnmount(){this.resizeObserver&&this.resizeObserver.disconnect()}bindDocMove(){this.docMoveBound||(this.document.addEventListener(\"pointermove\",this.onDocPointerMove,w),this.document.addEventListener(\"pointerup\",this.onDocPointerDone,w),this.document.addEventListener(\"pointercancel\",this.onDocPointerDone,w),this.docMoveBound=!0)}unbindDocMove(){this.docMoveBound&&(this.document.removeEventListener(\"pointermove\",this.onDocPointerMove,w),this.document.removeEventListener(\"pointerup\",this.onDocPointerDone,w),this.document.removeEventListener(\"pointercancel\",this.onDocPointerDone,w),this.docMoveBound=!1)}getCropStyle(){const{crop:e}=this.props;if(e)return{top:`${e.y}${e.unit}`,left:`${e.x}${e.unit}`,width:`${e.width}${e.unit}`,height:`${e.height}${e.unit}`}}dragCrop(){const{evData:e}=this,t=this.getBox(),n=this.makePixelCrop(),o=e.clientX-e.startClientX,r=e.clientY-e.startClientY;return n.x=a(e.startCropX+o,0,t.width-n.width),n.y=a(e.startCropY+r,0,t.height-n.height),n}getPointRegion(e){const{evData:t}=this,n=t.clientX-e.x,o=t.clientY-e.y<t.startCropY;return n<t.startCropX?o?\"nw\":\"sw\":o?\"ne\":\"se\"}resizeCrop(){const{evData:e}=this,t=this.getBox(),{aspect:n=0,minWidth:o=0,minHeight:r=0,maxWidth:i,maxHeight:a}=this.props,h=this.getPointRegion(t),s=this.makePixelCrop(),d=e.ord?e.ord:h,c=e.clientX-e.startClientX,l=e.clientY-e.startClientY,g={unit:\"px\",x:0,y:0,width:0,height:0};\"ne\"===h?(g.x=e.startCropX,g.width=c,n?(g.height=g.width/n,g.y=e.startCropY-g.height):(g.height=Math.abs(l),g.y=e.startCropY-g.height)):\"se\"===h?(g.x=e.startCropX,g.y=e.startCropY,g.width=c,g.height=n?g.width/n:l):\"sw\"===h?(g.x=e.startCropX+c,g.y=e.startCropY,g.width=Math.abs(c),g.height=n?g.width/n:l):\"nw\"===h&&(g.x=e.startCropX+c,g.width=Math.abs(c),n?(g.height=g.width/n,g.y=e.startCropY-g.height):(g.height=Math.abs(l),g.y=e.startCropY+l));const w=p(g,n,h,t.width,t.height,o,r,i,a);return n||u.xyOrds.indexOf(d)>-1?(s.x=w.x,s.y=w.y,s.width=w.width,s.height=w.height):u.xOrds.indexOf(d)>-1?(s.x=w.x,s.width=w.width):u.yOrds.indexOf(d)>-1&&(s.y=w.y,s.height=w.height),s}createCropSelection(){const{ariaLabels:e=u.defaultProps.ariaLabels,disabled:n,locked:o,renderSelectionAddon:r,ruleOfThirds:i,crop:a}=this.props,h=this.getCropStyle();if(a)return t().createElement(\"div\",{style:h,className:\"ReactCrop__crop-selection\",onPointerDown:this.onCropPointerDown,\"aria-label\":e.cropArea,tabIndex:0,onKeyDown:this.onComponentKeyDown,role:\"group\"},!n&&!o&&t().createElement(\"div\",{className:\"ReactCrop__drag-elements\",onFocus:this.onDragFocus},t().createElement(\"div\",{className:\"ReactCrop__drag-bar ord-n\",\"data-ord\":\"n\"}),t().createElement(\"div\",{className:\"ReactCrop__drag-bar ord-e\",\"data-ord\":\"e\"}),t().createElement(\"div\",{className:\"ReactCrop__drag-bar ord-s\",\"data-ord\":\"s\"}),t().createElement(\"div\",{className:\"ReactCrop__drag-bar ord-w\",\"data-ord\":\"w\"}),t().createElement(\"div\",{className:\"ReactCrop__drag-handle ord-nw\",\"data-ord\":\"nw\",tabIndex:0,\"aria-label\":e.nwDragHandle,onKeyDown:e=>this.onHandlerKeyDown(e,\"nw\"),role:\"button\"}),t().createElement(\"div\",{className:\"ReactCrop__drag-handle ord-n\",\"data-ord\":\"n\",tabIndex:0,\"aria-label\":e.nDragHandle,onKeyDown:e=>this.onHandlerKeyDown(e,\"n\"),role:\"button\"}),t().createElement(\"div\",{className:\"ReactCrop__drag-handle ord-ne\",\"data-ord\":\"ne\",tabIndex:0,\"aria-label\":e.neDragHandle,onKeyDown:e=>this.onHandlerKeyDown(e,\"ne\"),role:\"button\"}),t().createElement(\"div\",{className:\"ReactCrop__drag-handle ord-e\",\"data-ord\":\"e\",tabIndex:0,\"aria-label\":e.eDragHandle,onKeyDown:e=>this.onHandlerKeyDown(e,\"e\"),role:\"button\"}),t().createElement(\"div\",{className:\"ReactCrop__drag-handle ord-se\",\"data-ord\":\"se\",tabIndex:0,\"aria-label\":e.seDragHandle,onKeyDown:e=>this.onHandlerKeyDown(e,\"se\"),role:\"button\"}),t().createElement(\"div\",{className:\"ReactCrop__drag-handle ord-s\",\"data-ord\":\"s\",tabIndex:0,\"aria-label\":e.sDragHandle,onKeyDown:e=>this.onHandlerKeyDown(e,\"s\"),role:\"button\"}),t().createElement(\"div\",{className:\"ReactCrop__drag-handle ord-sw\",\"data-ord\":\"sw\",tabIndex:0,\"aria-label\":e.swDragHandle,onKeyDown:e=>this.onHandlerKeyDown(e,\"sw\"),role:\"button\"}),t().createElement(\"div\",{className:\"ReactCrop__drag-handle ord-w\",\"data-ord\":\"w\",tabIndex:0,\"aria-label\":e.wDragHandle,onKeyDown:e=>this.onHandlerKeyDown(e,\"w\"),role:\"button\"})),r&&t().createElement(\"div\",{className:\"ReactCrop__selection-addon\",onMouseDown:e=>e.stopPropagation()},r(this.state)),i&&t().createElement(t().Fragment,null,t().createElement(\"div\",{className:\"ReactCrop__rule-of-thirds-hz\"}),t().createElement(\"div\",{className:\"ReactCrop__rule-of-thirds-vt\"})))}makePixelCrop(){const e={...i,...this.props.crop||{}},t=this.getBox();return l(e,t.width,t.height)}render(){const{aspect:e,children:o,circularCrop:r,className:i,crop:a,disabled:h,locked:s,style:d,ruleOfThirds:c}=this.props,{cropIsActive:l,newCropIsBeingDrawn:p}=this.state,g=a?this.createCropSelection():null,w=function(){for(var e,t,o=0,r=\"\";o<arguments.length;)(e=arguments[o++])&&(t=n(e))&&(r&&(r+=\" \"),r+=t);return r}(\"ReactCrop\",i,{\"ReactCrop--active\":l,\"ReactCrop--disabled\":h,\"ReactCrop--locked\":s,\"ReactCrop--new-crop\":p,\"ReactCrop--fixed-aspect\":a&&e,\"ReactCrop--circular-crop\":a&&r,\"ReactCrop--rule-of-thirds\":a&&c,\"ReactCrop--invisible-crop\":!this.dragStarted&&a&&!a.width&&!a.height});return t().createElement(\"div\",{ref:this.componentRef,className:w,style:d},t().createElement(\"div\",{ref:this.mediaRef,className:\"ReactCrop__child-wrapper\",onPointerDown:this.onComponentPointerDown},o),g)}}u.xOrds=[\"e\",\"w\"],u.yOrds=[\"n\",\"s\"],u.xyOrds=[\"nw\",\"ne\",\"se\",\"sw\"],u.nudgeStep=1,u.nudgeStepMedium=10,u.nudgeStepLarge=100,u.defaultProps={ariaLabels:{cropArea:\"Use the arrow keys to move the crop selection area\",nwDragHandle:\"Use the arrow keys to move the north west drag handle to change the crop selection area\",nDragHandle:\"Use the up and down arrow keys to move the north drag handle to change the crop selection area\",neDragHandle:\"Use the arrow keys to move the north east drag handle to change the crop selection area\",eDragHandle:\"Use the up and down arrow keys to move the east drag handle to change the crop selection area\",seDragHandle:\"Use the arrow keys to move the south east drag handle to change the crop selection area\",sDragHandle:\"Use the up and down arrow keys to move the south drag handle to change the crop selection area\",swDragHandle:\"Use the arrow keys to move the south west drag handle to change the crop selection area\",wDragHandle:\"Use the up and down arrow keys to move the west drag handle to change the crop selection area\"}}})(),r})()));","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  ComponentContainer,\n  ComponentType,\n  Provider,\n  Name\n} from '@firebase/component';\nimport { PlatformLoggerService, VersionService } from './types';\n\nexport class PlatformLoggerServiceImpl implements PlatformLoggerService {\n  constructor(private readonly container: ComponentContainer) {}\n  // In initial implementation, this will be called by installations on\n  // auth token refresh, and installations will send this string.\n  getPlatformInfoString(): string {\n    const providers = this.container.getProviders();\n    // Loop through providers and get library/version pairs from any that are\n    // version components.\n    return providers\n      .map(provider => {\n        if (isVersionServiceProvider(provider)) {\n          const service = provider.getImmediate() as VersionService;\n          return `${service.library}/${service.version}`;\n        } else {\n          return null;\n        }\n      })\n      .filter(logString => logString)\n      .join(' ');\n  }\n}\n/**\n *\n * @param provider check if this provider provides a VersionService\n *\n * NOTE: Using Provider<'app-version'> is a hack to indicate that the provider\n * provides VersionService. The provider is not necessarily a 'app-version'\n * provider.\n */\nfunction isVersionServiceProvider(provider: Provider<Name>): boolean {\n  const component = provider.getComponent();\n  return component?.type === ComponentType.VERSION;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Logger } from '@firebase/logger';\n\nexport const logger = new Logger('@firebase/app');\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { name as appName } from '../package.json';\nimport { name as appCompatName } from '../../app-compat/package.json';\nimport { name as analyticsCompatName } from '../../../packages/analytics-compat/package.json';\nimport { name as analyticsName } from '../../../packages/analytics/package.json';\nimport { name as appCheckCompatName } from '../../../packages/app-check-compat/package.json';\nimport { name as appCheckName } from '../../../packages/app-check/package.json';\nimport { name as authName } from '../../../packages/auth/package.json';\nimport { name as authCompatName } from '../../../packages/auth-compat/package.json';\nimport { name as databaseName } from '../../../packages/database/package.json';\nimport { name as databaseCompatName } from '../../../packages/database-compat/package.json';\nimport { name as functionsName } from '../../../packages/functions/package.json';\nimport { name as functionsCompatName } from '../../../packages/functions-compat/package.json';\nimport { name as installationsName } from '../../../packages/installations/package.json';\nimport { name as installationsCompatName } from '../../../packages/installations-compat/package.json';\nimport { name as messagingName } from '../../../packages/messaging/package.json';\nimport { name as messagingCompatName } from '../../../packages/messaging-compat/package.json';\nimport { name as performanceName } from '../../../packages/performance/package.json';\nimport { name as performanceCompatName } from '../../../packages/performance-compat/package.json';\nimport { name as remoteConfigName } from '../../../packages/remote-config/package.json';\nimport { name as remoteConfigCompatName } from '../../../packages/remote-config-compat/package.json';\nimport { name as storageName } from '../../../packages/storage/package.json';\nimport { name as storageCompatName } from '../../../packages/storage-compat/package.json';\nimport { name as firestoreName } from '../../../packages/firestore/package.json';\nimport { name as firestoreCompatName } from '../../../packages/firestore-compat/package.json';\nimport { name as packageName } from '../../../packages/firebase/package.json';\n\n/**\n * The default app name\n *\n * @internal\n */\nexport const DEFAULT_ENTRY_NAME = '[DEFAULT]';\n\nexport const PLATFORM_LOG_STRING = {\n  [appName]: 'fire-core',\n  [appCompatName]: 'fire-core-compat',\n  [analyticsName]: 'fire-analytics',\n  [analyticsCompatName]: 'fire-analytics-compat',\n  [appCheckName]: 'fire-app-check',\n  [appCheckCompatName]: 'fire-app-check-compat',\n  [authName]: 'fire-auth',\n  [authCompatName]: 'fire-auth-compat',\n  [databaseName]: 'fire-rtdb',\n  [databaseCompatName]: 'fire-rtdb-compat',\n  [functionsName]: 'fire-fn',\n  [functionsCompatName]: 'fire-fn-compat',\n  [installationsName]: 'fire-iid',\n  [installationsCompatName]: 'fire-iid-compat',\n  [messagingName]: 'fire-fcm',\n  [messagingCompatName]: 'fire-fcm-compat',\n  [performanceName]: 'fire-perf',\n  [performanceCompatName]: 'fire-perf-compat',\n  [remoteConfigName]: 'fire-rc',\n  [remoteConfigCompatName]: 'fire-rc-compat',\n  [storageName]: 'fire-gcs',\n  [storageCompatName]: 'fire-gcs-compat',\n  [firestoreName]: 'fire-fst',\n  [firestoreCompatName]: 'fire-fst-compat',\n  'fire-js': 'fire-js', // Platform identifier for JS SDK.\n  [packageName]: 'fire-js-all'\n} as const;\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseApp } from './public-types';\nimport { Component, Provider, Name } from '@firebase/component';\nimport { logger } from './logger';\nimport { DEFAULT_ENTRY_NAME } from './constants';\nimport { FirebaseAppImpl } from './firebaseApp';\n\n/**\n * @internal\n */\nexport const _apps = new Map<string, FirebaseApp>();\n\n/**\n * Registered components.\n *\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const _components = new Map<string, Component<any>>();\n\n/**\n * @param component - the component being added to this app's container\n *\n * @internal\n */\nexport function _addComponent<T extends Name>(\n  app: FirebaseApp,\n  component: Component<T>\n): void {\n  try {\n    (app as FirebaseAppImpl).container.addComponent(component);\n  } catch (e) {\n    logger.debug(\n      `Component ${component.name} failed to register with FirebaseApp ${app.name}`,\n      e\n    );\n  }\n}\n\n/**\n *\n * @internal\n */\nexport function _addOrOverwriteComponent(\n  app: FirebaseApp,\n  component: Component\n): void {\n  (app as FirebaseAppImpl).container.addOrOverwriteComponent(component);\n}\n\n/**\n *\n * @param component - the component to register\n * @returns whether or not the component is registered successfully\n *\n * @internal\n */\nexport function _registerComponent<T extends Name>(\n  component: Component<T>\n): boolean {\n  const componentName = component.name;\n  if (_components.has(componentName)) {\n    logger.debug(\n      `There were multiple attempts to register component ${componentName}.`\n    );\n\n    return false;\n  }\n\n  _components.set(componentName, component);\n\n  // add the component to existing app instances\n  for (const app of _apps.values()) {\n    _addComponent(app as FirebaseAppImpl, component);\n  }\n\n  return true;\n}\n\n/**\n *\n * @param app - FirebaseApp instance\n * @param name - service name\n *\n * @returns the provider for the service with the matching name\n *\n * @internal\n */\nexport function _getProvider<T extends Name>(\n  app: FirebaseApp,\n  name: T\n): Provider<T> {\n  const heartbeatController = (app as FirebaseAppImpl).container\n    .getProvider('heartbeat')\n    .getImmediate({ optional: true });\n  if (heartbeatController) {\n    void heartbeatController.triggerHeartbeat();\n  }\n  return (app as FirebaseAppImpl).container.getProvider(name);\n}\n\n/**\n *\n * @param app - FirebaseApp instance\n * @param name - service name\n * @param instanceIdentifier - service instance identifier in case the service supports multiple instances\n *\n * @internal\n */\nexport function _removeServiceInstance<T extends Name>(\n  app: FirebaseApp,\n  name: T,\n  instanceIdentifier: string = DEFAULT_ENTRY_NAME\n): void {\n  _getProvider(app, name).clearInstance(instanceIdentifier);\n}\n\n/**\n * Test only\n *\n * @internal\n */\nexport function _clearComponents(): void {\n  _components.clear();\n}\n\n/**\n * Exported in order to be used in app-compat package\n */\nexport { DEFAULT_ENTRY_NAME as _DEFAULT_ENTRY_NAME };\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ErrorFactory, ErrorMap } from '@firebase/util';\n\nexport const enum AppError {\n  NO_APP = 'no-app',\n  BAD_APP_NAME = 'bad-app-name',\n  DUPLICATE_APP = 'duplicate-app',\n  APP_DELETED = 'app-deleted',\n  NO_OPTIONS = 'no-options',\n  INVALID_APP_ARGUMENT = 'invalid-app-argument',\n  INVALID_LOG_ARGUMENT = 'invalid-log-argument',\n  IDB_OPEN = 'idb-open',\n  IDB_GET = 'idb-get',\n  IDB_WRITE = 'idb-set',\n  IDB_DELETE = 'idb-delete'\n}\n\nconst ERRORS: ErrorMap<AppError> = {\n  [AppError.NO_APP]:\n    \"No Firebase App '{$appName}' has been created - \" +\n    'call Firebase App.initializeApp()',\n  [AppError.BAD_APP_NAME]: \"Illegal App name: '{$appName}\",\n  [AppError.DUPLICATE_APP]:\n    \"Firebase App named '{$appName}' already exists with different options or config\",\n  [AppError.APP_DELETED]: \"Firebase App named '{$appName}' already deleted\",\n  [AppError.NO_OPTIONS]:\n    'Need to provide options, when not being deployed to hosting via source.',\n  [AppError.INVALID_APP_ARGUMENT]:\n    'firebase.{$appName}() takes either no argument or a ' +\n    'Firebase App instance.',\n  [AppError.INVALID_LOG_ARGUMENT]:\n    'First argument to `onLog` must be null or a function.',\n  [AppError.IDB_OPEN]:\n    'Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.',\n  [AppError.IDB_GET]:\n    'Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.',\n  [AppError.IDB_WRITE]:\n    'Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.',\n  [AppError.IDB_DELETE]:\n    'Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.'\n};\n\ninterface ErrorParams {\n  [AppError.NO_APP]: { appName: string };\n  [AppError.BAD_APP_NAME]: { appName: string };\n  [AppError.DUPLICATE_APP]: { appName: string };\n  [AppError.APP_DELETED]: { appName: string };\n  [AppError.INVALID_APP_ARGUMENT]: { appName: string };\n  [AppError.IDB_OPEN]: { originalErrorMessage?: string };\n  [AppError.IDB_GET]: { originalErrorMessage?: string };\n  [AppError.IDB_WRITE]: { originalErrorMessage?: string };\n  [AppError.IDB_DELETE]: { originalErrorMessage?: string };\n}\n\nexport const ERROR_FACTORY = new ErrorFactory<AppError, ErrorParams>(\n  'app',\n  'Firebase',\n  ERRORS\n);\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  FirebaseApp,\n  FirebaseOptions,\n  FirebaseAppSettings\n} from './public-types';\nimport {\n  ComponentContainer,\n  Component,\n  ComponentType\n} from '@firebase/component';\nimport { ERROR_FACTORY, AppError } from './errors';\n\nexport class FirebaseAppImpl implements FirebaseApp {\n  private readonly _options: FirebaseOptions;\n  private readonly _name: string;\n  /**\n   * Original config values passed in as a constructor parameter.\n   * It is only used to compare with another config object to support idempotent initializeApp().\n   *\n   * Updating automaticDataCollectionEnabled on the App instance will not change its value in _config.\n   */\n  private readonly _config: Required<FirebaseAppSettings>;\n  private _automaticDataCollectionEnabled: boolean;\n  private _isDeleted = false;\n  private readonly _container: ComponentContainer;\n\n  constructor(\n    options: FirebaseOptions,\n    config: Required<FirebaseAppSettings>,\n    container: ComponentContainer\n  ) {\n    this._options = { ...options };\n    this._config = { ...config };\n    this._name = config.name;\n    this._automaticDataCollectionEnabled =\n      config.automaticDataCollectionEnabled;\n    this._container = container;\n    this.container.addComponent(\n      new Component('app', () => this, ComponentType.PUBLIC)\n    );\n  }\n\n  get automaticDataCollectionEnabled(): boolean {\n    this.checkDestroyed();\n    return this._automaticDataCollectionEnabled;\n  }\n\n  set automaticDataCollectionEnabled(val: boolean) {\n    this.checkDestroyed();\n    this._automaticDataCollectionEnabled = val;\n  }\n\n  get name(): string {\n    this.checkDestroyed();\n    return this._name;\n  }\n\n  get options(): FirebaseOptions {\n    this.checkDestroyed();\n    return this._options;\n  }\n\n  get config(): Required<FirebaseAppSettings> {\n    this.checkDestroyed();\n    return this._config;\n  }\n\n  get container(): ComponentContainer {\n    return this._container;\n  }\n\n  get isDeleted(): boolean {\n    return this._isDeleted;\n  }\n\n  set isDeleted(val: boolean) {\n    this._isDeleted = val;\n  }\n\n  /**\n   * This function will throw an Error if the App has already been deleted -\n   * use before performing API actions on the App.\n   */\n  private checkDestroyed(): void {\n    if (this.isDeleted) {\n      throw ERROR_FACTORY.create(AppError.APP_DELETED, { appName: this._name });\n    }\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  FirebaseApp,\n  FirebaseOptions,\n  FirebaseAppSettings\n} from './public-types';\nimport { DEFAULT_ENTRY_NAME, PLATFORM_LOG_STRING } from './constants';\nimport { ERROR_FACTORY, AppError } from './errors';\nimport {\n  ComponentContainer,\n  Component,\n  Name,\n  ComponentType\n} from '@firebase/component';\nimport { version } from '../../firebase/package.json';\nimport { FirebaseAppImpl } from './firebaseApp';\nimport { _apps, _components, _registerComponent } from './internal';\nimport { logger } from './logger';\nimport {\n  LogLevelString,\n  setLogLevel as setLogLevelImpl,\n  LogCallback,\n  LogOptions,\n  setUserLogHandler\n} from '@firebase/logger';\nimport { deepEqual, getDefaultAppConfig } from '@firebase/util';\n\nexport { FirebaseError } from '@firebase/util';\n\n/**\n * The current SDK version.\n *\n * @public\n */\nexport const SDK_VERSION = version;\n\n/**\n * Creates and initializes a {@link @firebase/app#FirebaseApp} instance.\n *\n * See\n * {@link\n *   https://firebase.google.com/docs/web/setup#add_firebase_to_your_app\n *   | Add Firebase to your app} and\n * {@link\n *   https://firebase.google.com/docs/web/setup#multiple-projects\n *   | Initialize multiple projects} for detailed documentation.\n *\n * @example\n * ```javascript\n *\n * // Initialize default app\n * // Retrieve your own options values by adding a web app on\n * // https://console.firebase.google.com\n * initializeApp({\n *   apiKey: \"AIza....\",                             // Auth / General Use\n *   authDomain: \"YOUR_APP.firebaseapp.com\",         // Auth with popup/redirect\n *   databaseURL: \"https://YOUR_APP.firebaseio.com\", // Realtime Database\n *   storageBucket: \"YOUR_APP.appspot.com\",          // Storage\n *   messagingSenderId: \"123456789\"                  // Cloud Messaging\n * });\n * ```\n *\n * @example\n * ```javascript\n *\n * // Initialize another app\n * const otherApp = initializeApp({\n *   databaseURL: \"https://<OTHER_DATABASE_NAME>.firebaseio.com\",\n *   storageBucket: \"<OTHER_STORAGE_BUCKET>.appspot.com\"\n * }, \"otherApp\");\n * ```\n *\n * @param options - Options to configure the app's services.\n * @param name - Optional name of the app to initialize. If no name\n *   is provided, the default is `\"[DEFAULT]\"`.\n *\n * @returns The initialized app.\n *\n * @public\n */\nexport function initializeApp(\n  options: FirebaseOptions,\n  name?: string\n): FirebaseApp;\n/**\n * Creates and initializes a FirebaseApp instance.\n *\n * @param options - Options to configure the app's services.\n * @param config - FirebaseApp Configuration\n *\n * @public\n */\nexport function initializeApp(\n  options: FirebaseOptions,\n  config?: FirebaseAppSettings\n): FirebaseApp;\n/**\n * Creates and initializes a FirebaseApp instance.\n *\n * @public\n */\nexport function initializeApp(): FirebaseApp;\nexport function initializeApp(\n  _options?: FirebaseOptions,\n  rawConfig = {}\n): FirebaseApp {\n  let options = _options;\n\n  if (typeof rawConfig !== 'object') {\n    const name = rawConfig;\n    rawConfig = { name };\n  }\n\n  const config: Required<FirebaseAppSettings> = {\n    name: DEFAULT_ENTRY_NAME,\n    automaticDataCollectionEnabled: false,\n    ...rawConfig\n  };\n  const name = config.name;\n\n  if (typeof name !== 'string' || !name) {\n    throw ERROR_FACTORY.create(AppError.BAD_APP_NAME, {\n      appName: String(name)\n    });\n  }\n\n  options ||= getDefaultAppConfig();\n\n  if (!options) {\n    throw ERROR_FACTORY.create(AppError.NO_OPTIONS);\n  }\n\n  const existingApp = _apps.get(name) as FirebaseAppImpl;\n  if (existingApp) {\n    // return the existing app if options and config deep equal the ones in the existing app.\n    if (\n      deepEqual(options, existingApp.options) &&\n      deepEqual(config, existingApp.config)\n    ) {\n      return existingApp;\n    } else {\n      throw ERROR_FACTORY.create(AppError.DUPLICATE_APP, { appName: name });\n    }\n  }\n\n  const container = new ComponentContainer(name);\n  for (const component of _components.values()) {\n    container.addComponent(component);\n  }\n\n  const newApp = new FirebaseAppImpl(options, config, container);\n\n  _apps.set(name, newApp);\n\n  return newApp;\n}\n\n/**\n * Retrieves a {@link @firebase/app#FirebaseApp} instance.\n *\n * When called with no arguments, the default app is returned. When an app name\n * is provided, the app corresponding to that name is returned.\n *\n * An exception is thrown if the app being retrieved has not yet been\n * initialized.\n *\n * @example\n * ```javascript\n * // Return the default app\n * const app = getApp();\n * ```\n *\n * @example\n * ```javascript\n * // Return a named app\n * const otherApp = getApp(\"otherApp\");\n * ```\n *\n * @param name - Optional name of the app to return. If no name is\n *   provided, the default is `\"[DEFAULT]\"`.\n *\n * @returns The app corresponding to the provided app name.\n *   If no app name is provided, the default app is returned.\n *\n * @public\n */\nexport function getApp(name: string = DEFAULT_ENTRY_NAME): FirebaseApp {\n  const app = _apps.get(name);\n  if (!app && name === DEFAULT_ENTRY_NAME) {\n    return initializeApp();\n  }\n  if (!app) {\n    throw ERROR_FACTORY.create(AppError.NO_APP, { appName: name });\n  }\n\n  return app;\n}\n\n/**\n * A (read-only) array of all initialized apps.\n * @public\n */\nexport function getApps(): FirebaseApp[] {\n  return Array.from(_apps.values());\n}\n\n/**\n * Renders this app unusable and frees the resources of all associated\n * services.\n *\n * @example\n * ```javascript\n * deleteApp(app)\n *   .then(function() {\n *     console.log(\"App deleted successfully\");\n *   })\n *   .catch(function(error) {\n *     console.log(\"Error deleting app:\", error);\n *   });\n * ```\n *\n * @public\n */\nexport async function deleteApp(app: FirebaseApp): Promise<void> {\n  const name = app.name;\n  if (_apps.has(name)) {\n    _apps.delete(name);\n    await Promise.all(\n      (app as FirebaseAppImpl).container\n        .getProviders()\n        .map(provider => provider.delete())\n    );\n    (app as FirebaseAppImpl).isDeleted = true;\n  }\n}\n\n/**\n * Registers a library's name and version for platform logging purposes.\n * @param library - Name of 1p or 3p library (e.g. firestore, angularfire)\n * @param version - Current version of that library.\n * @param variant - Bundle variant, e.g., node, rn, etc.\n *\n * @public\n */\nexport function registerVersion(\n  libraryKeyOrName: string,\n  version: string,\n  variant?: string\n): void {\n  // TODO: We can use this check to whitelist strings when/if we set up\n  // a good whitelist system.\n  let library = PLATFORM_LOG_STRING[libraryKeyOrName] ?? libraryKeyOrName;\n  if (variant) {\n    library += `-${variant}`;\n  }\n  const libraryMismatch = library.match(/\\s|\\//);\n  const versionMismatch = version.match(/\\s|\\//);\n  if (libraryMismatch || versionMismatch) {\n    const warning = [\n      `Unable to register library \"${library}\" with version \"${version}\":`\n    ];\n    if (libraryMismatch) {\n      warning.push(\n        `library name \"${library}\" contains illegal characters (whitespace or \"/\")`\n      );\n    }\n    if (libraryMismatch && versionMismatch) {\n      warning.push('and');\n    }\n    if (versionMismatch) {\n      warning.push(\n        `version name \"${version}\" contains illegal characters (whitespace or \"/\")`\n      );\n    }\n    logger.warn(warning.join(' '));\n    return;\n  }\n  _registerComponent(\n    new Component(\n      `${library}-version` as Name,\n      () => ({ library, version }),\n      ComponentType.VERSION\n    )\n  );\n}\n\n/**\n * Sets log handler for all Firebase SDKs.\n * @param logCallback - An optional custom log handler that executes user code whenever\n * the Firebase SDK makes a logging call.\n *\n * @public\n */\nexport function onLog(\n  logCallback: LogCallback | null,\n  options?: LogOptions\n): void {\n  if (logCallback !== null && typeof logCallback !== 'function') {\n    throw ERROR_FACTORY.create(AppError.INVALID_LOG_ARGUMENT);\n  }\n  setUserLogHandler(logCallback, options);\n}\n\n/**\n * Sets log level for all Firebase SDKs.\n *\n * All of the log types above the current log level are captured (i.e. if\n * you set the log level to `info`, errors are logged, but `debug` and\n * `verbose` logs are not).\n *\n * @public\n */\nexport function setLogLevel(logLevel: LogLevelString): void {\n  setLogLevelImpl(logLevel);\n}\n","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseError } from '@firebase/util';\nimport { DBSchema, openDB, IDBPDatabase } from 'idb';\nimport { AppError, ERROR_FACTORY } from './errors';\nimport { FirebaseApp } from './public-types';\nimport { HeartbeatsInIndexedDB } from './types';\nimport { logger } from './logger';\n\nconst DB_NAME = 'firebase-heartbeat-database';\nconst DB_VERSION = 1;\nconst STORE_NAME = 'firebase-heartbeat-store';\n\ninterface AppDB extends DBSchema {\n  'firebase-heartbeat-store': {\n    key: string;\n    value: HeartbeatsInIndexedDB;\n  };\n}\n\nlet dbPromise: Promise<IDBPDatabase<AppDB>> | null = null;\nfunction getDbPromise(): Promise<IDBPDatabase<AppDB>> {\n  if (!dbPromise) {\n    dbPromise = openDB<AppDB>(DB_NAME, DB_VERSION, {\n      upgrade: (db, oldVersion) => {\n        // We don't use 'break' in this switch statement, the fall-through\n        // behavior is what we want, because if there are multiple versions between\n        // the old version and the current version, we want ALL the migrations\n        // that correspond to those versions to run, not only the last one.\n        // eslint-disable-next-line default-case\n        switch (oldVersion) {\n          case 0:\n            db.createObjectStore(STORE_NAME);\n        }\n      }\n    }).catch(e => {\n      throw ERROR_FACTORY.create(AppError.IDB_OPEN, {\n        originalErrorMessage: e.message\n      });\n    });\n  }\n  return dbPromise;\n}\n\nexport async function readHeartbeatsFromIndexedDB(\n  app: FirebaseApp\n): Promise<HeartbeatsInIndexedDB | undefined> {\n  try {\n    const db = await getDbPromise();\n    return db\n      .transaction(STORE_NAME)\n      .objectStore(STORE_NAME)\n      .get(computeKey(app)) as Promise<HeartbeatsInIndexedDB | undefined>;\n  } catch (e) {\n    if (e instanceof FirebaseError) {\n      logger.warn(e.message);\n    } else {\n      const idbGetError = ERROR_FACTORY.create(AppError.IDB_GET, {\n        originalErrorMessage: (e as Error)?.message\n      });\n      logger.warn(idbGetError.message);\n    }\n  }\n}\n\nexport async function writeHeartbeatsToIndexedDB(\n  app: FirebaseApp,\n  heartbeatObject: HeartbeatsInIndexedDB\n): Promise<void> {\n  try {\n    const db = await getDbPromise();\n    const tx = db.transaction(STORE_NAME, 'readwrite');\n    const objectStore = tx.objectStore(STORE_NAME);\n    await objectStore.put(heartbeatObject, computeKey(app));\n    return tx.done;\n  } catch (e) {\n    if (e instanceof FirebaseError) {\n      logger.warn(e.message);\n    } else {\n      const idbGetError = ERROR_FACTORY.create(AppError.IDB_WRITE, {\n        originalErrorMessage: (e as Error)?.message\n      });\n      logger.warn(idbGetError.message);\n    }\n  }\n}\n\nfunction computeKey(app: FirebaseApp): string {\n  return `${app.name}!${app.options.appId}`;\n}\n","/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ComponentContainer } from '@firebase/component';\nimport {\n  base64urlEncodeWithoutPadding,\n  isIndexedDBAvailable,\n  validateIndexedDBOpenable\n} from '@firebase/util';\nimport {\n  readHeartbeatsFromIndexedDB,\n  writeHeartbeatsToIndexedDB\n} from './indexeddb';\nimport { FirebaseApp } from './public-types';\nimport {\n  HeartbeatsByUserAgent,\n  HeartbeatService,\n  HeartbeatsInIndexedDB,\n  HeartbeatStorage,\n  SingleDateHeartbeat\n} from './types';\n\nconst MAX_HEADER_BYTES = 1024;\n// 30 days\nconst STORED_HEARTBEAT_RETENTION_MAX_MILLIS = 30 * 24 * 60 * 60 * 1000;\n\nexport class HeartbeatServiceImpl implements HeartbeatService {\n  /**\n   * The persistence layer for heartbeats\n   * Leave public for easier testing.\n   */\n  _storage: HeartbeatStorageImpl;\n\n  /**\n   * In-memory cache for heartbeats, used by getHeartbeatsHeader() to generate\n   * the header string.\n   * Stores one record per date. This will be consolidated into the standard\n   * format of one record per user agent string before being sent as a header.\n   * Populated from indexedDB when the controller is instantiated and should\n   * be kept in sync with indexedDB.\n   * Leave public for easier testing.\n   */\n  _heartbeatsCache: HeartbeatsInIndexedDB | null = null;\n\n  /**\n   * the initialization promise for populating heartbeatCache.\n   * If getHeartbeatsHeader() is called before the promise resolves\n   * (hearbeatsCache == null), it should wait for this promise\n   * Leave public for easier testing.\n   */\n  _heartbeatsCachePromise: Promise<HeartbeatsInIndexedDB>;\n  constructor(private readonly container: ComponentContainer) {\n    const app = this.container.getProvider('app').getImmediate();\n    this._storage = new HeartbeatStorageImpl(app);\n    this._heartbeatsCachePromise = this._storage.read().then(result => {\n      this._heartbeatsCache = result;\n      return result;\n    });\n  }\n\n  /**\n   * Called to report a heartbeat. The function will generate\n   * a HeartbeatsByUserAgent object, update heartbeatsCache, and persist it\n   * to IndexedDB.\n   * Note that we only store one heartbeat per day. So if a heartbeat for today is\n   * already logged, subsequent calls to this function in the same day will be ignored.\n   */\n  async triggerHeartbeat(): Promise<void> {\n    const platformLogger = this.container\n      .getProvider('platform-logger')\n      .getImmediate();\n\n    // This is the \"Firebase user agent\" string from the platform logger\n    // service, not the browser user agent.\n    const agent = platformLogger.getPlatformInfoString();\n    const date = getUTCDateString();\n    if (this._heartbeatsCache === null) {\n      this._heartbeatsCache = await this._heartbeatsCachePromise;\n    }\n    // Do not store a heartbeat if one is already stored for this day\n    // or if a header has already been sent today.\n    if (\n      this._heartbeatsCache.lastSentHeartbeatDate === date ||\n      this._heartbeatsCache.heartbeats.some(\n        singleDateHeartbeat => singleDateHeartbeat.date === date\n      )\n    ) {\n      return;\n    } else {\n      // There is no entry for this date. Create one.\n      this._heartbeatsCache.heartbeats.push({ date, agent });\n    }\n    // Remove entries older than 30 days.\n    this._heartbeatsCache.heartbeats = this._heartbeatsCache.heartbeats.filter(\n      singleDateHeartbeat => {\n        const hbTimestamp = new Date(singleDateHeartbeat.date).valueOf();\n        const now = Date.now();\n        return now - hbTimestamp <= STORED_HEARTBEAT_RETENTION_MAX_MILLIS;\n      }\n    );\n    return this._storage.overwrite(this._heartbeatsCache);\n  }\n\n  /**\n   * Returns a base64 encoded string which can be attached to the heartbeat-specific header directly.\n   * It also clears all heartbeats from memory as well as in IndexedDB.\n   *\n   * NOTE: Consuming product SDKs should not send the header if this method\n   * returns an empty string.\n   */\n  async getHeartbeatsHeader(): Promise<string> {\n    if (this._heartbeatsCache === null) {\n      await this._heartbeatsCachePromise;\n    }\n    // If it's still null or the array is empty, there is no data to send.\n    if (\n      this._heartbeatsCache === null ||\n      this._heartbeatsCache.heartbeats.length === 0\n    ) {\n      return '';\n    }\n    const date = getUTCDateString();\n    // Extract as many heartbeats from the cache as will fit under the size limit.\n    const { heartbeatsToSend, unsentEntries } = extractHeartbeatsForHeader(\n      this._heartbeatsCache.heartbeats\n    );\n    const headerString = base64urlEncodeWithoutPadding(\n      JSON.stringify({ version: 2, heartbeats: heartbeatsToSend })\n    );\n    // Store last sent date to prevent another being logged/sent for the same day.\n    this._heartbeatsCache.lastSentHeartbeatDate = date;\n    if (unsentEntries.length > 0) {\n      // Store any unsent entries if they exist.\n      this._heartbeatsCache.heartbeats = unsentEntries;\n      // This seems more likely than emptying the array (below) to lead to some odd state\n      // since the cache isn't empty and this will be called again on the next request,\n      // and is probably safest if we await it.\n      await this._storage.overwrite(this._heartbeatsCache);\n    } else {\n      this._heartbeatsCache.heartbeats = [];\n      // Do not wait for this, to reduce latency.\n      void this._storage.overwrite(this._heartbeatsCache);\n    }\n    return headerString;\n  }\n}\n\nfunction getUTCDateString(): string {\n  const today = new Date();\n  // Returns date format 'YYYY-MM-DD'\n  return today.toISOString().substring(0, 10);\n}\n\nexport function extractHeartbeatsForHeader(\n  heartbeatsCache: SingleDateHeartbeat[],\n  maxSize = MAX_HEADER_BYTES\n): {\n  heartbeatsToSend: HeartbeatsByUserAgent[];\n  unsentEntries: SingleDateHeartbeat[];\n} {\n  // Heartbeats grouped by user agent in the standard format to be sent in\n  // the header.\n  const heartbeatsToSend: HeartbeatsByUserAgent[] = [];\n  // Single date format heartbeats that are not sent.\n  let unsentEntries = heartbeatsCache.slice();\n  for (const singleDateHeartbeat of heartbeatsCache) {\n    // Look for an existing entry with the same user agent.\n    const heartbeatEntry = heartbeatsToSend.find(\n      hb => hb.agent === singleDateHeartbeat.agent\n    );\n    if (!heartbeatEntry) {\n      // If no entry for this user agent exists, create one.\n      heartbeatsToSend.push({\n        agent: singleDateHeartbeat.agent,\n        dates: [singleDateHeartbeat.date]\n      });\n      if (countBytes(heartbeatsToSend) > maxSize) {\n        // If the header would exceed max size, remove the added heartbeat\n        // entry and stop adding to the header.\n        heartbeatsToSend.pop();\n        break;\n      }\n    } else {\n      heartbeatEntry.dates.push(singleDateHeartbeat.date);\n      // If the header would exceed max size, remove the added date\n      // and stop adding to the header.\n      if (countBytes(heartbeatsToSend) > maxSize) {\n        heartbeatEntry.dates.pop();\n        break;\n      }\n    }\n    // Pop unsent entry from queue. (Skipped if adding the entry exceeded\n    // quota and the loop breaks early.)\n    unsentEntries = unsentEntries.slice(1);\n  }\n  return {\n    heartbeatsToSend,\n    unsentEntries\n  };\n}\n\nexport class HeartbeatStorageImpl implements HeartbeatStorage {\n  private _canUseIndexedDBPromise: Promise<boolean>;\n  constructor(public app: FirebaseApp) {\n    this._canUseIndexedDBPromise = this.runIndexedDBEnvironmentCheck();\n  }\n  async runIndexedDBEnvironmentCheck(): Promise<boolean> {\n    if (!isIndexedDBAvailable()) {\n      return false;\n    } else {\n      return validateIndexedDBOpenable()\n        .then(() => true)\n        .catch(() => false);\n    }\n  }\n  /**\n   * Read all heartbeats.\n   */\n  async read(): Promise<HeartbeatsInIndexedDB> {\n    const canUseIndexedDB = await this._canUseIndexedDBPromise;\n    if (!canUseIndexedDB) {\n      return { heartbeats: [] };\n    } else {\n      const idbHeartbeatObject = await readHeartbeatsFromIndexedDB(this.app);\n      return idbHeartbeatObject || { heartbeats: [] };\n    }\n  }\n  // overwrite the storage with the provided heartbeats\n  async overwrite(heartbeatsObject: HeartbeatsInIndexedDB): Promise<void> {\n    const canUseIndexedDB = await this._canUseIndexedDBPromise;\n    if (!canUseIndexedDB) {\n      return;\n    } else {\n      const existingHeartbeatsObject = await this.read();\n      return writeHeartbeatsToIndexedDB(this.app, {\n        lastSentHeartbeatDate:\n          heartbeatsObject.lastSentHeartbeatDate ??\n          existingHeartbeatsObject.lastSentHeartbeatDate,\n        heartbeats: heartbeatsObject.heartbeats\n      });\n    }\n  }\n  // add heartbeats\n  async add(heartbeatsObject: HeartbeatsInIndexedDB): Promise<void> {\n    const canUseIndexedDB = await this._canUseIndexedDBPromise;\n    if (!canUseIndexedDB) {\n      return;\n    } else {\n      const existingHeartbeatsObject = await this.read();\n      return writeHeartbeatsToIndexedDB(this.app, {\n        lastSentHeartbeatDate:\n          heartbeatsObject.lastSentHeartbeatDate ??\n          existingHeartbeatsObject.lastSentHeartbeatDate,\n        heartbeats: [\n          ...existingHeartbeatsObject.heartbeats,\n          ...heartbeatsObject.heartbeats\n        ]\n      });\n    }\n  }\n}\n\n/**\n * Calculate bytes of a HeartbeatsByUserAgent array after being wrapped\n * in a platform logging header JSON object, stringified, and converted\n * to base 64.\n */\nexport function countBytes(heartbeatsCache: HeartbeatsByUserAgent[]): number {\n  // base64 has a restricted set of characters, all of which should be 1 byte.\n  return base64urlEncodeWithoutPadding(\n    // heartbeatsCache wrapper properties\n    JSON.stringify({ version: 2, heartbeats: heartbeatsCache })\n  ).length;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Component, ComponentType } from '@firebase/component';\nimport { PlatformLoggerServiceImpl } from './platformLoggerService';\nimport { name, version } from '../package.json';\nimport { _registerComponent } from './internal';\nimport { registerVersion } from './api';\nimport { HeartbeatServiceImpl } from './heartbeatService';\n\nexport function registerCoreComponents(variant?: string): void {\n  _registerComponent(\n    new Component(\n      'platform-logger',\n      container => new PlatformLoggerServiceImpl(container),\n      ComponentType.PRIVATE\n    )\n  );\n  _registerComponent(\n    new Component(\n      'heartbeat',\n      container => new HeartbeatServiceImpl(container),\n      ComponentType.PRIVATE\n    )\n  );\n\n  // Register `app` package.\n  registerVersion(name, version, variant);\n  // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\n  registerVersion(name, version, '__BUILD_TARGET__');\n  // Register platform SDK identifier (no version).\n  registerVersion('fire-js', '');\n}\n","/**\n * Firebase App\n *\n * @remarks This package coordinates the communication between the different Firebase components\n * @packageDocumentation\n */\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { registerCoreComponents } from './registerCoreComponents';\n\nexport * from './api';\nexport * from './internal';\nexport * from './public-types';\n\nregisterCoreComponents('__RUNTIME_ENV__');\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n  InstantiationMode,\n  InstanceFactory,\n  ComponentType,\n  Dictionary,\n  Name,\n  onInstanceCreatedCallback\n} from './types';\n\n/**\n * Component for service name T, e.g. `auth`, `auth-internal`\n */\nexport class Component<T extends Name = Name> {\n  multipleInstances = false;\n  /**\n   * Properties to be added to the service namespace\n   */\n  serviceProps: Dictionary = {};\n\n  instantiationMode = InstantiationMode.LAZY;\n\n  onInstanceCreated: onInstanceCreatedCallback<T> | null = null;\n\n  /**\n   *\n   * @param name The public service name, e.g. app, auth, firestore, database\n   * @param instanceFactory Service factory responsible for creating the public interface\n   * @param type whether the service provided by the component is public or private\n   */\n  constructor(\n    readonly name: T,\n    readonly instanceFactory: InstanceFactory<T>,\n    readonly type: ComponentType\n  ) {}\n\n  setInstantiationMode(mode: InstantiationMode): this {\n    this.instantiationMode = mode;\n    return this;\n  }\n\n  setMultipleInstances(multipleInstances: boolean): this {\n    this.multipleInstances = multipleInstances;\n    return this;\n  }\n\n  setServiceProps(props: Dictionary): this {\n    this.serviceProps = props;\n    return this;\n  }\n\n  setInstanceCreatedCallback(callback: onInstanceCreatedCallback<T>): this {\n    this.onInstanceCreated = callback;\n    return this;\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const DEFAULT_ENTRY_NAME = '[DEFAULT]';\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Deferred } from '@firebase/util';\nimport { ComponentContainer } from './component_container';\nimport { DEFAULT_ENTRY_NAME } from './constants';\nimport {\n  InitializeOptions,\n  InstantiationMode,\n  Name,\n  NameServiceMapping,\n  OnInitCallBack\n} from './types';\nimport { Component } from './component';\n\n/**\n * Provider for instance for service name T, e.g. 'auth', 'auth-internal'\n * NameServiceMapping[T] is an alias for the type of the instance\n */\nexport class Provider<T extends Name> {\n  private component: Component<T> | null = null;\n  private readonly instances: Map<string, NameServiceMapping[T]> = new Map();\n  private readonly instancesDeferred: Map<\n    string,\n    Deferred<NameServiceMapping[T]>\n  > = new Map();\n  private readonly instancesOptions: Map<string, Record<string, unknown>> =\n    new Map();\n  private onInitCallbacks: Map<string, Set<OnInitCallBack<T>>> = new Map();\n\n  constructor(\n    private readonly name: T,\n    private readonly container: ComponentContainer\n  ) {}\n\n  /**\n   * @param identifier A provider can provide mulitple instances of a service\n   * if this.component.multipleInstances is true.\n   */\n  get(identifier?: string): Promise<NameServiceMapping[T]> {\n    // if multipleInstances is not supported, use the default name\n    const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\n\n    if (!this.instancesDeferred.has(normalizedIdentifier)) {\n      const deferred = new Deferred<NameServiceMapping[T]>();\n      this.instancesDeferred.set(normalizedIdentifier, deferred);\n\n      if (\n        this.isInitialized(normalizedIdentifier) ||\n        this.shouldAutoInitialize()\n      ) {\n        // initialize the service if it can be auto-initialized\n        try {\n          const instance = this.getOrInitializeService({\n            instanceIdentifier: normalizedIdentifier\n          });\n          if (instance) {\n            deferred.resolve(instance);\n          }\n        } catch (e) {\n          // when the instance factory throws an exception during get(), it should not cause\n          // a fatal error. We just return the unresolved promise in this case.\n        }\n      }\n    }\n\n    return this.instancesDeferred.get(normalizedIdentifier)!.promise;\n  }\n\n  /**\n   *\n   * @param options.identifier A provider can provide mulitple instances of a service\n   * if this.component.multipleInstances is true.\n   * @param options.optional If optional is false or not provided, the method throws an error when\n   * the service is not immediately available.\n   * If optional is true, the method returns null if the service is not immediately available.\n   */\n  getImmediate(options: {\n    identifier?: string;\n    optional: true;\n  }): NameServiceMapping[T] | null;\n  getImmediate(options?: {\n    identifier?: string;\n    optional?: false;\n  }): NameServiceMapping[T];\n  getImmediate(options?: {\n    identifier?: string;\n    optional?: boolean;\n  }): NameServiceMapping[T] | null {\n    // if multipleInstances is not supported, use the default name\n    const normalizedIdentifier = this.normalizeInstanceIdentifier(\n      options?.identifier\n    );\n    const optional = options?.optional ?? false;\n\n    if (\n      this.isInitialized(normalizedIdentifier) ||\n      this.shouldAutoInitialize()\n    ) {\n      try {\n        return this.getOrInitializeService({\n          instanceIdentifier: normalizedIdentifier\n        });\n      } catch (e) {\n        if (optional) {\n          return null;\n        } else {\n          throw e;\n        }\n      }\n    } else {\n      // In case a component is not initialized and should/can not be auto-initialized at the moment, return null if the optional flag is set, or throw\n      if (optional) {\n        return null;\n      } else {\n        throw Error(`Service ${this.name} is not available`);\n      }\n    }\n  }\n\n  getComponent(): Component<T> | null {\n    return this.component;\n  }\n\n  setComponent(component: Component<T>): void {\n    if (component.name !== this.name) {\n      throw Error(\n        `Mismatching Component ${component.name} for Provider ${this.name}.`\n      );\n    }\n\n    if (this.component) {\n      throw Error(`Component for ${this.name} has already been provided`);\n    }\n\n    this.component = component;\n\n    // return early without attempting to initialize the component if the component requires explicit initialization (calling `Provider.initialize()`)\n    if (!this.shouldAutoInitialize()) {\n      return;\n    }\n\n    // if the service is eager, initialize the default instance\n    if (isComponentEager(component)) {\n      try {\n        this.getOrInitializeService({ instanceIdentifier: DEFAULT_ENTRY_NAME });\n      } catch (e) {\n        // when the instance factory for an eager Component throws an exception during the eager\n        // initialization, it should not cause a fatal error.\n        // TODO: Investigate if we need to make it configurable, because some component may want to cause\n        // a fatal error in this case?\n      }\n    }\n\n    // Create service instances for the pending promises and resolve them\n    // NOTE: if this.multipleInstances is false, only the default instance will be created\n    // and all promises with resolve with it regardless of the identifier.\n    for (const [\n      instanceIdentifier,\n      instanceDeferred\n    ] of this.instancesDeferred.entries()) {\n      const normalizedIdentifier =\n        this.normalizeInstanceIdentifier(instanceIdentifier);\n\n      try {\n        // `getOrInitializeService()` should always return a valid instance since a component is guaranteed. use ! to make typescript happy.\n        const instance = this.getOrInitializeService({\n          instanceIdentifier: normalizedIdentifier\n        })!;\n        instanceDeferred.resolve(instance);\n      } catch (e) {\n        // when the instance factory throws an exception, it should not cause\n        // a fatal error. We just leave the promise unresolved.\n      }\n    }\n  }\n\n  clearInstance(identifier: string = DEFAULT_ENTRY_NAME): void {\n    this.instancesDeferred.delete(identifier);\n    this.instancesOptions.delete(identifier);\n    this.instances.delete(identifier);\n  }\n\n  // app.delete() will call this method on every provider to delete the services\n  // TODO: should we mark the provider as deleted?\n  async delete(): Promise<void> {\n    const services = Array.from(this.instances.values());\n\n    await Promise.all([\n      ...services\n        .filter(service => 'INTERNAL' in service) // legacy services\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        .map(service => (service as any).INTERNAL!.delete()),\n      ...services\n        .filter(service => '_delete' in service) // modularized services\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        .map(service => (service as any)._delete())\n    ]);\n  }\n\n  isComponentSet(): boolean {\n    return this.component != null;\n  }\n\n  isInitialized(identifier: string = DEFAULT_ENTRY_NAME): boolean {\n    return this.instances.has(identifier);\n  }\n\n  getOptions(identifier: string = DEFAULT_ENTRY_NAME): Record<string, unknown> {\n    return this.instancesOptions.get(identifier) || {};\n  }\n\n  initialize(opts: InitializeOptions = {}): NameServiceMapping[T] {\n    const { options = {} } = opts;\n    const normalizedIdentifier = this.normalizeInstanceIdentifier(\n      opts.instanceIdentifier\n    );\n    if (this.isInitialized(normalizedIdentifier)) {\n      throw Error(\n        `${this.name}(${normalizedIdentifier}) has already been initialized`\n      );\n    }\n\n    if (!this.isComponentSet()) {\n      throw Error(`Component ${this.name} has not been registered yet`);\n    }\n\n    const instance = this.getOrInitializeService({\n      instanceIdentifier: normalizedIdentifier,\n      options\n    })!;\n\n    // resolve any pending promise waiting for the service instance\n    for (const [\n      instanceIdentifier,\n      instanceDeferred\n    ] of this.instancesDeferred.entries()) {\n      const normalizedDeferredIdentifier =\n        this.normalizeInstanceIdentifier(instanceIdentifier);\n      if (normalizedIdentifier === normalizedDeferredIdentifier) {\n        instanceDeferred.resolve(instance);\n      }\n    }\n\n    return instance;\n  }\n\n  /**\n   *\n   * @param callback - a function that will be invoked  after the provider has been initialized by calling provider.initialize().\n   * The function is invoked SYNCHRONOUSLY, so it should not execute any longrunning tasks in order to not block the program.\n   *\n   * @param identifier An optional instance identifier\n   * @returns a function to unregister the callback\n   */\n  onInit(callback: OnInitCallBack<T>, identifier?: string): () => void {\n    const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\n    const existingCallbacks =\n      this.onInitCallbacks.get(normalizedIdentifier) ??\n      new Set<OnInitCallBack<T>>();\n    existingCallbacks.add(callback);\n    this.onInitCallbacks.set(normalizedIdentifier, existingCallbacks);\n\n    const existingInstance = this.instances.get(normalizedIdentifier);\n    if (existingInstance) {\n      callback(existingInstance, normalizedIdentifier);\n    }\n\n    return () => {\n      existingCallbacks.delete(callback);\n    };\n  }\n\n  /**\n   * Invoke onInit callbacks synchronously\n   * @param instance the service instance`\n   */\n  private invokeOnInitCallbacks(\n    instance: NameServiceMapping[T],\n    identifier: string\n  ): void {\n    const callbacks = this.onInitCallbacks.get(identifier);\n    if (!callbacks) {\n      return;\n    }\n    for (const callback of callbacks) {\n      try {\n        callback(instance, identifier);\n      } catch {\n        // ignore errors in the onInit callback\n      }\n    }\n  }\n\n  private getOrInitializeService({\n    instanceIdentifier,\n    options = {}\n  }: {\n    instanceIdentifier: string;\n    options?: Record<string, unknown>;\n  }): NameServiceMapping[T] | null {\n    let instance = this.instances.get(instanceIdentifier);\n    if (!instance && this.component) {\n      instance = this.component.instanceFactory(this.container, {\n        instanceIdentifier: normalizeIdentifierForFactory(instanceIdentifier),\n        options\n      });\n      this.instances.set(instanceIdentifier, instance);\n      this.instancesOptions.set(instanceIdentifier, options);\n\n      /**\n       * Invoke onInit listeners.\n       * Note this.component.onInstanceCreated is different, which is used by the component creator,\n       * while onInit listeners are registered by consumers of the provider.\n       */\n      this.invokeOnInitCallbacks(instance, instanceIdentifier);\n\n      /**\n       * Order is important\n       * onInstanceCreated() should be called after this.instances.set(instanceIdentifier, instance); which\n       * makes `isInitialized()` return true.\n       */\n      if (this.component.onInstanceCreated) {\n        try {\n          this.component.onInstanceCreated(\n            this.container,\n            instanceIdentifier,\n            instance\n          );\n        } catch {\n          // ignore errors in the onInstanceCreatedCallback\n        }\n      }\n    }\n\n    return instance || null;\n  }\n\n  private normalizeInstanceIdentifier(\n    identifier: string = DEFAULT_ENTRY_NAME\n  ): string {\n    if (this.component) {\n      return this.component.multipleInstances ? identifier : DEFAULT_ENTRY_NAME;\n    } else {\n      return identifier; // assume multiple instances are supported before the component is provided.\n    }\n  }\n\n  private shouldAutoInitialize(): boolean {\n    return (\n      !!this.component &&\n      this.component.instantiationMode !== InstantiationMode.EXPLICIT\n    );\n  }\n}\n\n// undefined should be passed to the service factory for the default instance\nfunction normalizeIdentifierForFactory(identifier: string): string | undefined {\n  return identifier === DEFAULT_ENTRY_NAME ? undefined : identifier;\n}\n\nfunction isComponentEager<T extends Name>(component: Component<T>): boolean {\n  return component.instantiationMode === InstantiationMode.EAGER;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Provider } from './provider';\nimport { Component } from './component';\nimport { Name } from './types';\n\n/**\n * ComponentContainer that provides Providers for service name T, e.g. `auth`, `auth-internal`\n */\nexport class ComponentContainer {\n  private readonly providers = new Map<string, Provider<Name>>();\n\n  constructor(private readonly name: string) {}\n\n  /**\n   *\n   * @param component Component being added\n   * @param overwrite When a component with the same name has already been registered,\n   * if overwrite is true: overwrite the existing component with the new component and create a new\n   * provider with the new component. It can be useful in tests where you want to use different mocks\n   * for different tests.\n   * if overwrite is false: throw an exception\n   */\n  addComponent<T extends Name>(component: Component<T>): void {\n    const provider = this.getProvider(component.name);\n    if (provider.isComponentSet()) {\n      throw new Error(\n        `Component ${component.name} has already been registered with ${this.name}`\n      );\n    }\n\n    provider.setComponent(component);\n  }\n\n  addOrOverwriteComponent<T extends Name>(component: Component<T>): void {\n    const provider = this.getProvider(component.name);\n    if (provider.isComponentSet()) {\n      // delete the existing provider from the container, so we can register the new component\n      this.providers.delete(component.name);\n    }\n\n    this.addComponent(component);\n  }\n\n  /**\n   * getProvider provides a type safe interface where it can only be called with a field name\n   * present in NameServiceMapping interface.\n   *\n   * Firebase SDKs providing services should extend NameServiceMapping interface to register\n   * themselves.\n   */\n  getProvider<T extends Name>(name: T): Provider<T> {\n    if (this.providers.has(name)) {\n      return this.providers.get(name) as unknown as Provider<T>;\n    }\n\n    // create a Provider for a service that hasn't registered with Firebase\n    const provider = new Provider<T>(name, this);\n    this.providers.set(name, provider as unknown as Provider<Name>);\n\n    return provider as Provider<T>;\n  }\n\n  getProviders(): Array<Provider<Name>> {\n    return Array.from(this.providers.values());\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { version } from '../../package.json';\n\nexport const PENDING_TIMEOUT_MS = 10000;\n\nexport const PACKAGE_VERSION = `w:${version}`;\nexport const INTERNAL_AUTH_VERSION = 'FIS_v2';\n\nexport const INSTALLATIONS_API_URL =\n  'https://firebaseinstallations.googleapis.com/v1';\n\nexport const TOKEN_EXPIRATION_BUFFER = 60 * 60 * 1000; // One hour\n\nexport const SERVICE = 'installations';\nexport const SERVICE_NAME = 'Installations';\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ErrorFactory, FirebaseError } from '@firebase/util';\nimport { SERVICE, SERVICE_NAME } from './constants';\n\nexport const enum ErrorCode {\n  MISSING_APP_CONFIG_VALUES = 'missing-app-config-values',\n  NOT_REGISTERED = 'not-registered',\n  INSTALLATION_NOT_FOUND = 'installation-not-found',\n  REQUEST_FAILED = 'request-failed',\n  APP_OFFLINE = 'app-offline',\n  DELETE_PENDING_REGISTRATION = 'delete-pending-registration'\n}\n\nconst ERROR_DESCRIPTION_MAP: { readonly [key in ErrorCode]: string } = {\n  [ErrorCode.MISSING_APP_CONFIG_VALUES]:\n    'Missing App configuration value: \"{$valueName}\"',\n  [ErrorCode.NOT_REGISTERED]: 'Firebase Installation is not registered.',\n  [ErrorCode.INSTALLATION_NOT_FOUND]: 'Firebase Installation not found.',\n  [ErrorCode.REQUEST_FAILED]:\n    '{$requestName} request failed with error \"{$serverCode} {$serverStatus}: {$serverMessage}\"',\n  [ErrorCode.APP_OFFLINE]: 'Could not process request. Application offline.',\n  [ErrorCode.DELETE_PENDING_REGISTRATION]:\n    \"Can't delete installation while there is a pending registration request.\"\n};\n\ninterface ErrorParams {\n  [ErrorCode.MISSING_APP_CONFIG_VALUES]: {\n    valueName: string;\n  };\n  [ErrorCode.REQUEST_FAILED]: {\n    requestName: string;\n    [index: string]: string | number; // to make Typescript 3.8 happy\n  } & ServerErrorData;\n}\n\nexport const ERROR_FACTORY = new ErrorFactory<ErrorCode, ErrorParams>(\n  SERVICE,\n  SERVICE_NAME,\n  ERROR_DESCRIPTION_MAP\n);\n\nexport interface ServerErrorData {\n  serverCode: number;\n  serverMessage: string;\n  serverStatus: string;\n}\n\nexport type ServerError = FirebaseError & { customData: ServerErrorData };\n\n/** Returns true if error is a FirebaseError that is based on an error from the server. */\nexport function isServerError(error: unknown): error is ServerError {\n  return (\n    error instanceof FirebaseError &&\n    error.code.includes(ErrorCode.REQUEST_FAILED)\n  );\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseError } from '@firebase/util';\nimport { GenerateAuthTokenResponse } from '../interfaces/api-response';\nimport {\n  CompletedAuthToken,\n  RegisteredInstallationEntry,\n  RequestStatus\n} from '../interfaces/installation-entry';\nimport {\n  INSTALLATIONS_API_URL,\n  INTERNAL_AUTH_VERSION\n} from '../util/constants';\nimport { ERROR_FACTORY, ErrorCode } from '../util/errors';\nimport { AppConfig } from '../interfaces/installation-impl';\n\nexport function getInstallationsEndpoint({ projectId }: AppConfig): string {\n  return `${INSTALLATIONS_API_URL}/projects/${projectId}/installations`;\n}\n\nexport function extractAuthTokenInfoFromResponse(\n  response: GenerateAuthTokenResponse\n): CompletedAuthToken {\n  return {\n    token: response.token,\n    requestStatus: RequestStatus.COMPLETED,\n    expiresIn: getExpiresInFromResponseExpiresIn(response.expiresIn),\n    creationTime: Date.now()\n  };\n}\n\nexport async function getErrorFromResponse(\n  requestName: string,\n  response: Response\n): Promise<FirebaseError> {\n  const responseJson: ErrorResponse = await response.json();\n  const errorData = responseJson.error;\n  return ERROR_FACTORY.create(ErrorCode.REQUEST_FAILED, {\n    requestName,\n    serverCode: errorData.code,\n    serverMessage: errorData.message,\n    serverStatus: errorData.status\n  });\n}\n\nexport function getHeaders({ apiKey }: AppConfig): Headers {\n  return new Headers({\n    'Content-Type': 'application/json',\n    Accept: 'application/json',\n    'x-goog-api-key': apiKey\n  });\n}\n\nexport function getHeadersWithAuth(\n  appConfig: AppConfig,\n  { refreshToken }: RegisteredInstallationEntry\n): Headers {\n  const headers = getHeaders(appConfig);\n  headers.append('Authorization', getAuthorizationHeader(refreshToken));\n  return headers;\n}\n\nexport interface ErrorResponse {\n  error: {\n    code: number;\n    message: string;\n    status: string;\n  };\n}\n\n/**\n * Calls the passed in fetch wrapper and returns the response.\n * If the returned response has a status of 5xx, re-runs the function once and\n * returns the response.\n */\nexport async function retryIfServerError(\n  fn: () => Promise<Response>\n): Promise<Response> {\n  const result = await fn();\n\n  if (result.status >= 500 && result.status < 600) {\n    // Internal Server Error. Retry request.\n    return fn();\n  }\n\n  return result;\n}\n\nfunction getExpiresInFromResponseExpiresIn(responseExpiresIn: string): number {\n  // This works because the server will never respond with fractions of a second.\n  return Number(responseExpiresIn.replace('s', '000'));\n}\n\nfunction getAuthorizationHeader(refreshToken: string): string {\n  return `${INTERNAL_AUTH_VERSION} ${refreshToken}`;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CreateInstallationResponse } from '../interfaces/api-response';\nimport {\n  InProgressInstallationEntry,\n  RegisteredInstallationEntry,\n  RequestStatus\n} from '../interfaces/installation-entry';\nimport { INTERNAL_AUTH_VERSION, PACKAGE_VERSION } from '../util/constants';\nimport {\n  extractAuthTokenInfoFromResponse,\n  getErrorFromResponse,\n  getHeaders,\n  getInstallationsEndpoint,\n  retryIfServerError\n} from './common';\nimport { FirebaseInstallationsImpl } from '../interfaces/installation-impl';\n\nexport async function createInstallationRequest(\n  { appConfig, heartbeatServiceProvider }: FirebaseInstallationsImpl,\n  { fid }: InProgressInstallationEntry\n): Promise<RegisteredInstallationEntry> {\n  const endpoint = getInstallationsEndpoint(appConfig);\n\n  const headers = getHeaders(appConfig);\n\n  // If heartbeat service exists, add the heartbeat string to the header.\n  const heartbeatService = heartbeatServiceProvider.getImmediate({\n    optional: true\n  });\n  if (heartbeatService) {\n    const heartbeatsHeader = await heartbeatService.getHeartbeatsHeader();\n    if (heartbeatsHeader) {\n      headers.append('x-firebase-client', heartbeatsHeader);\n    }\n  }\n\n  const body = {\n    fid,\n    authVersion: INTERNAL_AUTH_VERSION,\n    appId: appConfig.appId,\n    sdkVersion: PACKAGE_VERSION\n  };\n\n  const request: RequestInit = {\n    method: 'POST',\n    headers,\n    body: JSON.stringify(body)\n  };\n\n  const response = await retryIfServerError(() => fetch(endpoint, request));\n  if (response.ok) {\n    const responseValue: CreateInstallationResponse = await response.json();\n    const registeredInstallationEntry: RegisteredInstallationEntry = {\n      fid: responseValue.fid || fid,\n      registrationStatus: RequestStatus.COMPLETED,\n      refreshToken: responseValue.refreshToken,\n      authToken: extractAuthTokenInfoFromResponse(responseValue.authToken)\n    };\n    return registeredInstallationEntry;\n  } else {\n    throw await getErrorFromResponse('Create Installation', response);\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** Returns a promise that resolves after given time passes. */\nexport function sleep(ms: number): Promise<void> {\n  return new Promise<void>(resolve => {\n    setTimeout(resolve, ms);\n  });\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { bufferToBase64UrlSafe } from './buffer-to-base64-url-safe';\n\nexport const VALID_FID_PATTERN = /^[cdef][\\w-]{21}$/;\nexport const INVALID_FID = '';\n\n/**\n * Generates a new FID using random values from Web Crypto API.\n * Returns an empty string if FID generation fails for any reason.\n */\nexport function generateFid(): string {\n  try {\n    // A valid FID has exactly 22 base64 characters, which is 132 bits, or 16.5\n    // bytes. our implementation generates a 17 byte array instead.\n    const fidByteArray = new Uint8Array(17);\n    const crypto =\n      self.crypto || (self as unknown as { msCrypto: Crypto }).msCrypto;\n    crypto.getRandomValues(fidByteArray);\n\n    // Replace the first 4 random bits with the constant FID header of 0b0111.\n    fidByteArray[0] = 0b01110000 + (fidByteArray[0] % 0b00010000);\n\n    const fid = encode(fidByteArray);\n\n    return VALID_FID_PATTERN.test(fid) ? fid : INVALID_FID;\n  } catch {\n    // FID generation errored\n    return INVALID_FID;\n  }\n}\n\n/** Converts a FID Uint8Array to a base64 string representation. */\nfunction encode(fidByteArray: Uint8Array): string {\n  const b64String = bufferToBase64UrlSafe(fidByteArray);\n\n  // Remove the 23rd character that was added because of the extra 4 bits at the\n  // end of our 17 byte array, and the '=' padding.\n  return b64String.substr(0, 22);\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport function bufferToBase64UrlSafe(array: Uint8Array): string {\n  const b64 = btoa(String.fromCharCode(...array));\n  return b64.replace(/\\+/g, '-').replace(/\\//g, '_');\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AppConfig } from '../interfaces/installation-impl';\n\n/** Returns a string key that can be used to identify the app. */\nexport function getKey(appConfig: AppConfig): string {\n  return `${appConfig.appName}!${appConfig.appId}`;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getKey } from '../util/get-key';\nimport { AppConfig } from '../interfaces/installation-impl';\nimport { IdChangeCallbackFn } from '../api';\n\nconst fidChangeCallbacks: Map<string, Set<IdChangeCallbackFn>> = new Map();\n\n/**\n * Calls the onIdChange callbacks with the new FID value, and broadcasts the\n * change to other tabs.\n */\nexport function fidChanged(appConfig: AppConfig, fid: string): void {\n  const key = getKey(appConfig);\n\n  callFidChangeCallbacks(key, fid);\n  broadcastFidChange(key, fid);\n}\n\nexport function addCallback(\n  appConfig: AppConfig,\n  callback: IdChangeCallbackFn\n): void {\n  // Open the broadcast channel if it's not already open,\n  // to be able to listen to change events from other tabs.\n  getBroadcastChannel();\n\n  const key = getKey(appConfig);\n\n  let callbackSet = fidChangeCallbacks.get(key);\n  if (!callbackSet) {\n    callbackSet = new Set();\n    fidChangeCallbacks.set(key, callbackSet);\n  }\n  callbackSet.add(callback);\n}\n\nexport function removeCallback(\n  appConfig: AppConfig,\n  callback: IdChangeCallbackFn\n): void {\n  const key = getKey(appConfig);\n\n  const callbackSet = fidChangeCallbacks.get(key);\n\n  if (!callbackSet) {\n    return;\n  }\n\n  callbackSet.delete(callback);\n  if (callbackSet.size === 0) {\n    fidChangeCallbacks.delete(key);\n  }\n\n  // Close broadcast channel if there are no more callbacks.\n  closeBroadcastChannel();\n}\n\nfunction callFidChangeCallbacks(key: string, fid: string): void {\n  const callbacks = fidChangeCallbacks.get(key);\n  if (!callbacks) {\n    return;\n  }\n\n  for (const callback of callbacks) {\n    callback(fid);\n  }\n}\n\nfunction broadcastFidChange(key: string, fid: string): void {\n  const channel = getBroadcastChannel();\n  if (channel) {\n    channel.postMessage({ key, fid });\n  }\n  closeBroadcastChannel();\n}\n\nlet broadcastChannel: BroadcastChannel | null = null;\n/** Opens and returns a BroadcastChannel if it is supported by the browser. */\nfunction getBroadcastChannel(): BroadcastChannel | null {\n  if (!broadcastChannel && 'BroadcastChannel' in self) {\n    broadcastChannel = new BroadcastChannel('[Firebase] FID Change');\n    broadcastChannel.onmessage = e => {\n      callFidChangeCallbacks(e.data.key, e.data.fid);\n    };\n  }\n  return broadcastChannel;\n}\n\nfunction closeBroadcastChannel(): void {\n  if (fidChangeCallbacks.size === 0 && broadcastChannel) {\n    broadcastChannel.close();\n    broadcastChannel = null;\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DBSchema, IDBPDatabase, openDB } from 'idb';\nimport { AppConfig } from '../interfaces/installation-impl';\nimport { InstallationEntry } from '../interfaces/installation-entry';\nimport { getKey } from '../util/get-key';\nimport { fidChanged } from './fid-changed';\n\nconst DATABASE_NAME = 'firebase-installations-database';\nconst DATABASE_VERSION = 1;\nconst OBJECT_STORE_NAME = 'firebase-installations-store';\n\ninterface InstallationsDB extends DBSchema {\n  'firebase-installations-store': {\n    key: string;\n    value: InstallationEntry | undefined;\n  };\n}\n\nlet dbPromise: Promise<IDBPDatabase<InstallationsDB>> | null = null;\nfunction getDbPromise(): Promise<IDBPDatabase<InstallationsDB>> {\n  if (!dbPromise) {\n    dbPromise = openDB(DATABASE_NAME, DATABASE_VERSION, {\n      upgrade: (db, oldVersion) => {\n        // We don't use 'break' in this switch statement, the fall-through\n        // behavior is what we want, because if there are multiple versions between\n        // the old version and the current version, we want ALL the migrations\n        // that correspond to those versions to run, not only the last one.\n        // eslint-disable-next-line default-case\n        switch (oldVersion) {\n          case 0:\n            db.createObjectStore(OBJECT_STORE_NAME);\n        }\n      }\n    });\n  }\n  return dbPromise;\n}\n\n/** Gets record(s) from the objectStore that match the given key. */\nexport async function get(\n  appConfig: AppConfig\n): Promise<InstallationEntry | undefined> {\n  const key = getKey(appConfig);\n  const db = await getDbPromise();\n  return db\n    .transaction(OBJECT_STORE_NAME)\n    .objectStore(OBJECT_STORE_NAME)\n    .get(key) as Promise<InstallationEntry>;\n}\n\n/** Assigns or overwrites the record for the given key with the given value. */\nexport async function set<ValueType extends InstallationEntry>(\n  appConfig: AppConfig,\n  value: ValueType\n): Promise<ValueType> {\n  const key = getKey(appConfig);\n  const db = await getDbPromise();\n  const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n  const objectStore = tx.objectStore(OBJECT_STORE_NAME);\n  const oldValue = (await objectStore.get(key)) as InstallationEntry;\n  await objectStore.put(value, key);\n  await tx.done;\n\n  if (!oldValue || oldValue.fid !== value.fid) {\n    fidChanged(appConfig, value.fid);\n  }\n\n  return value;\n}\n\n/** Removes record(s) from the objectStore that match the given key. */\nexport async function remove(appConfig: AppConfig): Promise<void> {\n  const key = getKey(appConfig);\n  const db = await getDbPromise();\n  const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n  await tx.objectStore(OBJECT_STORE_NAME).delete(key);\n  await tx.done;\n}\n\n/**\n * Atomically updates a record with the result of updateFn, which gets\n * called with the current value. If newValue is undefined, the record is\n * deleted instead.\n * @return Updated value\n */\nexport async function update<ValueType extends InstallationEntry | undefined>(\n  appConfig: AppConfig,\n  updateFn: (previousValue: InstallationEntry | undefined) => ValueType\n): Promise<ValueType> {\n  const key = getKey(appConfig);\n  const db = await getDbPromise();\n  const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n  const store = tx.objectStore(OBJECT_STORE_NAME);\n  const oldValue: InstallationEntry | undefined = (await store.get(\n    key\n  )) as InstallationEntry;\n  const newValue = updateFn(oldValue);\n\n  if (newValue === undefined) {\n    await store.delete(key);\n  } else {\n    await store.put(newValue, key);\n  }\n  await tx.done;\n\n  if (newValue && (!oldValue || oldValue.fid !== newValue.fid)) {\n    fidChanged(appConfig, newValue.fid);\n  }\n\n  return newValue;\n}\n\nexport async function clear(): Promise<void> {\n  const db = await getDbPromise();\n  const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n  await tx.objectStore(OBJECT_STORE_NAME).clear();\n  await tx.done;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createInstallationRequest } from '../functions/create-installation-request';\nimport {\n  AppConfig,\n  FirebaseInstallationsImpl\n} from '../interfaces/installation-impl';\nimport {\n  InProgressInstallationEntry,\n  InstallationEntry,\n  RegisteredInstallationEntry,\n  RequestStatus\n} from '../interfaces/installation-entry';\nimport { PENDING_TIMEOUT_MS } from '../util/constants';\nimport { ERROR_FACTORY, ErrorCode, isServerError } from '../util/errors';\nimport { sleep } from '../util/sleep';\nimport { generateFid, INVALID_FID } from './generate-fid';\nimport { remove, set, update } from './idb-manager';\n\nexport interface InstallationEntryWithRegistrationPromise {\n  installationEntry: InstallationEntry;\n  /** Exist iff the installationEntry is not registered. */\n  registrationPromise?: Promise<RegisteredInstallationEntry>;\n}\n\n/**\n * Updates and returns the InstallationEntry from the database.\n * Also triggers a registration request if it is necessary and possible.\n */\nexport async function getInstallationEntry(\n  installations: FirebaseInstallationsImpl\n): Promise<InstallationEntryWithRegistrationPromise> {\n  let registrationPromise: Promise<RegisteredInstallationEntry> | undefined;\n\n  const installationEntry = await update(installations.appConfig, oldEntry => {\n    const installationEntry = updateOrCreateInstallationEntry(oldEntry);\n    const entryWithPromise = triggerRegistrationIfNecessary(\n      installations,\n      installationEntry\n    );\n    registrationPromise = entryWithPromise.registrationPromise;\n    return entryWithPromise.installationEntry;\n  });\n\n  if (installationEntry.fid === INVALID_FID) {\n    // FID generation failed. Waiting for the FID from the server.\n    return { installationEntry: await registrationPromise! };\n  }\n\n  return {\n    installationEntry,\n    registrationPromise\n  };\n}\n\n/**\n * Creates a new Installation Entry if one does not exist.\n * Also clears timed out pending requests.\n */\nfunction updateOrCreateInstallationEntry(\n  oldEntry: InstallationEntry | undefined\n): InstallationEntry {\n  const entry: InstallationEntry = oldEntry || {\n    fid: generateFid(),\n    registrationStatus: RequestStatus.NOT_STARTED\n  };\n\n  return clearTimedOutRequest(entry);\n}\n\n/**\n * If the Firebase Installation is not registered yet, this will trigger the\n * registration and return an InProgressInstallationEntry.\n *\n * If registrationPromise does not exist, the installationEntry is guaranteed\n * to be registered.\n */\nfunction triggerRegistrationIfNecessary(\n  installations: FirebaseInstallationsImpl,\n  installationEntry: InstallationEntry\n): InstallationEntryWithRegistrationPromise {\n  if (installationEntry.registrationStatus === RequestStatus.NOT_STARTED) {\n    if (!navigator.onLine) {\n      // Registration required but app is offline.\n      const registrationPromiseWithError = Promise.reject(\n        ERROR_FACTORY.create(ErrorCode.APP_OFFLINE)\n      );\n      return {\n        installationEntry,\n        registrationPromise: registrationPromiseWithError\n      };\n    }\n\n    // Try registering. Change status to IN_PROGRESS.\n    const inProgressEntry: InProgressInstallationEntry = {\n      fid: installationEntry.fid,\n      registrationStatus: RequestStatus.IN_PROGRESS,\n      registrationTime: Date.now()\n    };\n    const registrationPromise = registerInstallation(\n      installations,\n      inProgressEntry\n    );\n    return { installationEntry: inProgressEntry, registrationPromise };\n  } else if (\n    installationEntry.registrationStatus === RequestStatus.IN_PROGRESS\n  ) {\n    return {\n      installationEntry,\n      registrationPromise: waitUntilFidRegistration(installations)\n    };\n  } else {\n    return { installationEntry };\n  }\n}\n\n/** This will be executed only once for each new Firebase Installation. */\nasync function registerInstallation(\n  installations: FirebaseInstallationsImpl,\n  installationEntry: InProgressInstallationEntry\n): Promise<RegisteredInstallationEntry> {\n  try {\n    const registeredInstallationEntry = await createInstallationRequest(\n      installations,\n      installationEntry\n    );\n    return set(installations.appConfig, registeredInstallationEntry);\n  } catch (e) {\n    if (isServerError(e) && e.customData.serverCode === 409) {\n      // Server returned a \"FID can not be used\" error.\n      // Generate a new ID next time.\n      await remove(installations.appConfig);\n    } else {\n      // Registration failed. Set FID as not registered.\n      await set(installations.appConfig, {\n        fid: installationEntry.fid,\n        registrationStatus: RequestStatus.NOT_STARTED\n      });\n    }\n    throw e;\n  }\n}\n\n/** Call if FID registration is pending in another request. */\nasync function waitUntilFidRegistration(\n  installations: FirebaseInstallationsImpl\n): Promise<RegisteredInstallationEntry> {\n  // Unfortunately, there is no way of reliably observing when a value in\n  // IndexedDB changes (yet, see https://github.com/WICG/indexed-db-observers),\n  // so we need to poll.\n\n  let entry: InstallationEntry = await updateInstallationRequest(\n    installations.appConfig\n  );\n  while (entry.registrationStatus === RequestStatus.IN_PROGRESS) {\n    // createInstallation request still in progress.\n    await sleep(100);\n\n    entry = await updateInstallationRequest(installations.appConfig);\n  }\n\n  if (entry.registrationStatus === RequestStatus.NOT_STARTED) {\n    // The request timed out or failed in a different call. Try again.\n    const { installationEntry, registrationPromise } =\n      await getInstallationEntry(installations);\n\n    if (registrationPromise) {\n      return registrationPromise;\n    } else {\n      // if there is no registrationPromise, entry is registered.\n      return installationEntry as RegisteredInstallationEntry;\n    }\n  }\n\n  return entry;\n}\n\n/**\n * Called only if there is a CreateInstallation request in progress.\n *\n * Updates the InstallationEntry in the DB based on the status of the\n * CreateInstallation request.\n *\n * Returns the updated InstallationEntry.\n */\nfunction updateInstallationRequest(\n  appConfig: AppConfig\n): Promise<InstallationEntry> {\n  return update(appConfig, oldEntry => {\n    if (!oldEntry) {\n      throw ERROR_FACTORY.create(ErrorCode.INSTALLATION_NOT_FOUND);\n    }\n    return clearTimedOutRequest(oldEntry);\n  });\n}\n\nfunction clearTimedOutRequest(entry: InstallationEntry): InstallationEntry {\n  if (hasInstallationRequestTimedOut(entry)) {\n    return {\n      fid: entry.fid,\n      registrationStatus: RequestStatus.NOT_STARTED\n    };\n  }\n\n  return entry;\n}\n\nfunction hasInstallationRequestTimedOut(\n  installationEntry: InstallationEntry\n): boolean {\n  return (\n    installationEntry.registrationStatus === RequestStatus.IN_PROGRESS &&\n    installationEntry.registrationTime + PENDING_TIMEOUT_MS < Date.now()\n  );\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { GenerateAuthTokenResponse } from '../interfaces/api-response';\nimport {\n  CompletedAuthToken,\n  RegisteredInstallationEntry\n} from '../interfaces/installation-entry';\nimport { PACKAGE_VERSION } from '../util/constants';\nimport {\n  extractAuthTokenInfoFromResponse,\n  getErrorFromResponse,\n  getHeadersWithAuth,\n  getInstallationsEndpoint,\n  retryIfServerError\n} from './common';\nimport {\n  FirebaseInstallationsImpl,\n  AppConfig\n} from '../interfaces/installation-impl';\n\nexport async function generateAuthTokenRequest(\n  { appConfig, heartbeatServiceProvider }: FirebaseInstallationsImpl,\n  installationEntry: RegisteredInstallationEntry\n): Promise<CompletedAuthToken> {\n  const endpoint = getGenerateAuthTokenEndpoint(appConfig, installationEntry);\n\n  const headers = getHeadersWithAuth(appConfig, installationEntry);\n\n  // If heartbeat service exists, add the heartbeat string to the header.\n  const heartbeatService = heartbeatServiceProvider.getImmediate({\n    optional: true\n  });\n  if (heartbeatService) {\n    const heartbeatsHeader = await heartbeatService.getHeartbeatsHeader();\n    if (heartbeatsHeader) {\n      headers.append('x-firebase-client', heartbeatsHeader);\n    }\n  }\n\n  const body = {\n    installation: {\n      sdkVersion: PACKAGE_VERSION,\n      appId: appConfig.appId\n    }\n  };\n\n  const request: RequestInit = {\n    method: 'POST',\n    headers,\n    body: JSON.stringify(body)\n  };\n\n  const response = await retryIfServerError(() => fetch(endpoint, request));\n  if (response.ok) {\n    const responseValue: GenerateAuthTokenResponse = await response.json();\n    const completedAuthToken: CompletedAuthToken =\n      extractAuthTokenInfoFromResponse(responseValue);\n    return completedAuthToken;\n  } else {\n    throw await getErrorFromResponse('Generate Auth Token', response);\n  }\n}\n\nfunction getGenerateAuthTokenEndpoint(\n  appConfig: AppConfig,\n  { fid }: RegisteredInstallationEntry\n): string {\n  return `${getInstallationsEndpoint(appConfig)}/${fid}/authTokens:generate`;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { generateAuthTokenRequest } from '../functions/generate-auth-token-request';\nimport {\n  AppConfig,\n  FirebaseInstallationsImpl\n} from '../interfaces/installation-impl';\nimport {\n  AuthToken,\n  CompletedAuthToken,\n  InProgressAuthToken,\n  InstallationEntry,\n  RegisteredInstallationEntry,\n  RequestStatus\n} from '../interfaces/installation-entry';\nimport { PENDING_TIMEOUT_MS, TOKEN_EXPIRATION_BUFFER } from '../util/constants';\nimport { ERROR_FACTORY, ErrorCode, isServerError } from '../util/errors';\nimport { sleep } from '../util/sleep';\nimport { remove, set, update } from './idb-manager';\n\n/**\n * Returns a valid authentication token for the installation. Generates a new\n * token if one doesn't exist, is expired or about to expire.\n *\n * Should only be called if the Firebase Installation is registered.\n */\nexport async function refreshAuthToken(\n  installations: FirebaseInstallationsImpl,\n  forceRefresh = false\n): Promise<CompletedAuthToken> {\n  let tokenPromise: Promise<CompletedAuthToken> | undefined;\n  const entry = await update(installations.appConfig, oldEntry => {\n    if (!isEntryRegistered(oldEntry)) {\n      throw ERROR_FACTORY.create(ErrorCode.NOT_REGISTERED);\n    }\n\n    const oldAuthToken = oldEntry.authToken;\n    if (!forceRefresh && isAuthTokenValid(oldAuthToken)) {\n      // There is a valid token in the DB.\n      return oldEntry;\n    } else if (oldAuthToken.requestStatus === RequestStatus.IN_PROGRESS) {\n      // There already is a token request in progress.\n      tokenPromise = waitUntilAuthTokenRequest(installations, forceRefresh);\n      return oldEntry;\n    } else {\n      // No token or token expired.\n      if (!navigator.onLine) {\n        throw ERROR_FACTORY.create(ErrorCode.APP_OFFLINE);\n      }\n\n      const inProgressEntry = makeAuthTokenRequestInProgressEntry(oldEntry);\n      tokenPromise = fetchAuthTokenFromServer(installations, inProgressEntry);\n      return inProgressEntry;\n    }\n  });\n\n  const authToken = tokenPromise\n    ? await tokenPromise\n    : (entry.authToken as CompletedAuthToken);\n  return authToken;\n}\n\n/**\n * Call only if FID is registered and Auth Token request is in progress.\n *\n * Waits until the current pending request finishes. If the request times out,\n * tries once in this thread as well.\n */\nasync function waitUntilAuthTokenRequest(\n  installations: FirebaseInstallationsImpl,\n  forceRefresh: boolean\n): Promise<CompletedAuthToken> {\n  // Unfortunately, there is no way of reliably observing when a value in\n  // IndexedDB changes (yet, see https://github.com/WICG/indexed-db-observers),\n  // so we need to poll.\n\n  let entry = await updateAuthTokenRequest(installations.appConfig);\n  while (entry.authToken.requestStatus === RequestStatus.IN_PROGRESS) {\n    // generateAuthToken still in progress.\n    await sleep(100);\n\n    entry = await updateAuthTokenRequest(installations.appConfig);\n  }\n\n  const authToken = entry.authToken;\n  if (authToken.requestStatus === RequestStatus.NOT_STARTED) {\n    // The request timed out or failed in a different call. Try again.\n    return refreshAuthToken(installations, forceRefresh);\n  } else {\n    return authToken;\n  }\n}\n\n/**\n * Called only if there is a GenerateAuthToken request in progress.\n *\n * Updates the InstallationEntry in the DB based on the status of the\n * GenerateAuthToken request.\n *\n * Returns the updated InstallationEntry.\n */\nfunction updateAuthTokenRequest(\n  appConfig: AppConfig\n): Promise<RegisteredInstallationEntry> {\n  return update(appConfig, oldEntry => {\n    if (!isEntryRegistered(oldEntry)) {\n      throw ERROR_FACTORY.create(ErrorCode.NOT_REGISTERED);\n    }\n\n    const oldAuthToken = oldEntry.authToken;\n    if (hasAuthTokenRequestTimedOut(oldAuthToken)) {\n      return {\n        ...oldEntry,\n        authToken: { requestStatus: RequestStatus.NOT_STARTED }\n      };\n    }\n\n    return oldEntry;\n  });\n}\n\nasync function fetchAuthTokenFromServer(\n  installations: FirebaseInstallationsImpl,\n  installationEntry: RegisteredInstallationEntry\n): Promise<CompletedAuthToken> {\n  try {\n    const authToken = await generateAuthTokenRequest(\n      installations,\n      installationEntry\n    );\n    const updatedInstallationEntry: RegisteredInstallationEntry = {\n      ...installationEntry,\n      authToken\n    };\n    await set(installations.appConfig, updatedInstallationEntry);\n    return authToken;\n  } catch (e) {\n    if (\n      isServerError(e) &&\n      (e.customData.serverCode === 401 || e.customData.serverCode === 404)\n    ) {\n      // Server returned a \"FID not found\" or a \"Invalid authentication\" error.\n      // Generate a new ID next time.\n      await remove(installations.appConfig);\n    } else {\n      const updatedInstallationEntry: RegisteredInstallationEntry = {\n        ...installationEntry,\n        authToken: { requestStatus: RequestStatus.NOT_STARTED }\n      };\n      await set(installations.appConfig, updatedInstallationEntry);\n    }\n    throw e;\n  }\n}\n\nfunction isEntryRegistered(\n  installationEntry: InstallationEntry | undefined\n): installationEntry is RegisteredInstallationEntry {\n  return (\n    installationEntry !== undefined &&\n    installationEntry.registrationStatus === RequestStatus.COMPLETED\n  );\n}\n\nfunction isAuthTokenValid(authToken: AuthToken): boolean {\n  return (\n    authToken.requestStatus === RequestStatus.COMPLETED &&\n    !isAuthTokenExpired(authToken)\n  );\n}\n\nfunction isAuthTokenExpired(authToken: CompletedAuthToken): boolean {\n  const now = Date.now();\n  return (\n    now < authToken.creationTime ||\n    authToken.creationTime + authToken.expiresIn < now + TOKEN_EXPIRATION_BUFFER\n  );\n}\n\n/** Returns an updated InstallationEntry with an InProgressAuthToken. */\nfunction makeAuthTokenRequestInProgressEntry(\n  oldEntry: RegisteredInstallationEntry\n): RegisteredInstallationEntry {\n  const inProgressAuthToken: InProgressAuthToken = {\n    requestStatus: RequestStatus.IN_PROGRESS,\n    requestTime: Date.now()\n  };\n  return {\n    ...oldEntry,\n    authToken: inProgressAuthToken\n  };\n}\n\nfunction hasAuthTokenRequestTimedOut(authToken: AuthToken): boolean {\n  return (\n    authToken.requestStatus === RequestStatus.IN_PROGRESS &&\n    authToken.requestTime + PENDING_TIMEOUT_MS < Date.now()\n  );\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getInstallationEntry } from '../helpers/get-installation-entry';\nimport { refreshAuthToken } from '../helpers/refresh-auth-token';\nimport { FirebaseInstallationsImpl } from '../interfaces/installation-impl';\nimport { Installations } from '../interfaces/public-types';\n\n/**\n * Returns a Firebase Installations auth token, identifying the current\n * Firebase Installation.\n * @param installations - The `Installations` instance.\n * @param forceRefresh - Force refresh regardless of token expiration.\n *\n * @public\n */\nexport async function getToken(\n  installations: Installations,\n  forceRefresh = false\n): Promise<string> {\n  const installationsImpl = installations as FirebaseInstallationsImpl;\n  await completeInstallationRegistration(installationsImpl);\n\n  // At this point we either have a Registered Installation in the DB, or we've\n  // already thrown an error.\n  const authToken = await refreshAuthToken(installationsImpl, forceRefresh);\n  return authToken.token;\n}\n\nasync function completeInstallationRegistration(\n  installations: FirebaseInstallationsImpl\n): Promise<void> {\n  const { registrationPromise } = await getInstallationEntry(installations);\n\n  if (registrationPromise) {\n    // A createInstallation request is in progress. Wait until it finishes.\n    await registrationPromise;\n  }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getInstallationEntry } from '../helpers/get-installation-entry';\nimport { refreshAuthToken } from '../helpers/refresh-auth-token';\nimport { FirebaseInstallationsImpl } from '../interfaces/installation-impl';\nimport { Installations } from '../interfaces/public-types';\n\n/**\n * Creates a Firebase Installation if there isn't one for the app and\n * returns the Installation ID.\n * @param installations - The `Installations` instance.\n *\n * @public\n */\nexport async function getId(installations: Installations): Promise<string> {\n  const installationsImpl = installations as FirebaseInstallationsImpl;\n  const { installationEntry, registrationPromise } = await getInstallationEntry(\n    installationsImpl\n  );\n\n  if (registrationPromise) {\n    registrationPromise.catch(console.error);\n  } else {\n    // If the installation is already registered, update the authentication\n    // token if needed.\n    refreshAuthToken(installationsImpl).catch(console.error);\n  }\n\n  return installationEntry.fid;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AppConfig } from '../interfaces/installation-impl';\nimport { RegisteredInstallationEntry } from '../interfaces/installation-entry';\nimport {\n  getErrorFromResponse,\n  getHeadersWithAuth,\n  getInstallationsEndpoint,\n  retryIfServerError\n} from './common';\n\nexport async function deleteInstallationRequest(\n  appConfig: AppConfig,\n  installationEntry: RegisteredInstallationEntry\n): Promise<void> {\n  const endpoint = getDeleteEndpoint(appConfig, installationEntry);\n\n  const headers = getHeadersWithAuth(appConfig, installationEntry);\n  const request: RequestInit = {\n    method: 'DELETE',\n    headers\n  };\n\n  const response = await retryIfServerError(() => fetch(endpoint, request));\n  if (!response.ok) {\n    throw await getErrorFromResponse('Delete Installation', response);\n  }\n}\n\nfunction getDeleteEndpoint(\n  appConfig: AppConfig,\n  { fid }: RegisteredInstallationEntry\n): string {\n  return `${getInstallationsEndpoint(appConfig)}/${fid}`;\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseApp, FirebaseOptions } from '@firebase/app';\nimport { FirebaseError } from '@firebase/util';\nimport { AppConfig } from '../interfaces/installation-impl';\nimport { ERROR_FACTORY, ErrorCode } from '../util/errors';\n\nexport function extractAppConfig(app: FirebaseApp): AppConfig {\n  if (!app || !app.options) {\n    throw getMissingValueError('App Configuration');\n  }\n\n  if (!app.name) {\n    throw getMissingValueError('App Name');\n  }\n\n  // Required app config keys\n  const configKeys: Array<keyof FirebaseOptions> = [\n    'projectId',\n    'apiKey',\n    'appId'\n  ];\n\n  for (const keyName of configKeys) {\n    if (!app.options[keyName]) {\n      throw getMissingValueError(keyName);\n    }\n  }\n\n  return {\n    appName: app.name,\n    projectId: app.options.projectId!,\n    apiKey: app.options.apiKey!,\n    appId: app.options.appId!\n  };\n}\n\nfunction getMissingValueError(valueName: string): FirebaseError {\n  return ERROR_FACTORY.create(ErrorCode.MISSING_APP_CONFIG_VALUES, {\n    valueName\n  });\n}\n","/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { _registerComponent, _getProvider } from '@firebase/app';\nimport {\n  Component,\n  ComponentType,\n  InstanceFactory,\n  ComponentContainer\n} from '@firebase/component';\nimport { getId, getToken } from '../api/index';\nimport { _FirebaseInstallationsInternal } from '../interfaces/public-types';\nimport { FirebaseInstallationsImpl } from '../interfaces/installation-impl';\nimport { extractAppConfig } from '../helpers/extract-app-config';\n\nconst INSTALLATIONS_NAME = 'installations';\nconst INSTALLATIONS_NAME_INTERNAL = 'installations-internal';\n\nconst publicFactory: InstanceFactory<'installations'> = (\n  container: ComponentContainer\n) => {\n  const app = container.getProvider('app').getImmediate();\n  // Throws if app isn't configured properly.\n  const appConfig = extractAppConfig(app);\n  const heartbeatServiceProvider = _getProvider(app, 'heartbeat');\n\n  const installationsImpl: FirebaseInstallationsImpl = {\n    app,\n    appConfig,\n    heartbeatServiceProvider,\n    _delete: () => Promise.resolve()\n  };\n  return installationsImpl;\n};\n\nconst internalFactory: InstanceFactory<'installations-internal'> = (\n  container: ComponentContainer\n) => {\n  const app = container.getProvider('app').getImmediate();\n  // Internal FIS instance relies on public FIS instance.\n  const installations = _getProvider(app, INSTALLATIONS_NAME).getImmediate();\n\n  const installationsInternal: _FirebaseInstallationsInternal = {\n    getId: () => getId(installations),\n    getToken: (forceRefresh?: boolean) => getToken(installations, forceRefresh)\n  };\n  return installationsInternal;\n};\n\nexport function registerInstallations(): void {\n  _registerComponent(\n    new Component(INSTALLATIONS_NAME, publicFactory, ComponentType.PUBLIC)\n  );\n  _registerComponent(\n    new Component(\n      INSTALLATIONS_NAME_INTERNAL,\n      internalFactory,\n      ComponentType.PRIVATE\n    )\n  );\n}\n","/**\n * Firebase Installations\n *\n * @packageDocumentation\n */\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { registerInstallations } from './functions/config';\nimport { registerVersion } from '@firebase/app';\nimport { name, version } from '../package.json';\n\nexport * from './api';\nexport * from './interfaces/public-types';\n\nregisterInstallations();\nregisterVersion(name, version);\n// BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\nregisterVersion(name, version, '__BUILD_TARGET__');\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport type LogLevelString =\n  | 'debug'\n  | 'verbose'\n  | 'info'\n  | 'warn'\n  | 'error'\n  | 'silent';\n\nexport interface LogOptions {\n  level: LogLevelString;\n}\n\nexport type LogCallback = (callbackParams: LogCallbackParams) => void;\n\nexport interface LogCallbackParams {\n  level: LogLevelString;\n  message: string;\n  args: unknown[];\n  type: string;\n}\n\n/**\n * A container for all of the Logger instances\n */\nexport const instances: Logger[] = [];\n\n/**\n * The JS SDK supports 5 log levels and also allows a user the ability to\n * silence the logs altogether.\n *\n * The order is a follows:\n * DEBUG < VERBOSE < INFO < WARN < ERROR\n *\n * All of the log types above the current log level will be captured (i.e. if\n * you set the log level to `INFO`, errors will still be logged, but `DEBUG` and\n * `VERBOSE` logs will not)\n */\nexport enum LogLevel {\n  DEBUG,\n  VERBOSE,\n  INFO,\n  WARN,\n  ERROR,\n  SILENT\n}\n\nconst levelStringToEnum: { [key in LogLevelString]: LogLevel } = {\n  'debug': LogLevel.DEBUG,\n  'verbose': LogLevel.VERBOSE,\n  'info': LogLevel.INFO,\n  'warn': LogLevel.WARN,\n  'error': LogLevel.ERROR,\n  'silent': LogLevel.SILENT\n};\n\n/**\n * The default log level\n */\nconst defaultLogLevel: LogLevel = LogLevel.INFO;\n\n/**\n * We allow users the ability to pass their own log handler. We will pass the\n * type of log, the current log level, and any other arguments passed (i.e. the\n * messages that the user wants to log) to this function.\n */\nexport type LogHandler = (\n  loggerInstance: Logger,\n  logType: LogLevel,\n  ...args: unknown[]\n) => void;\n\n/**\n * By default, `console.debug` is not displayed in the developer console (in\n * chrome). To avoid forcing users to have to opt-in to these logs twice\n * (i.e. once for firebase, and once in the console), we are sending `DEBUG`\n * logs to the `console.log` function.\n */\nconst ConsoleMethod = {\n  [LogLevel.DEBUG]: 'log',\n  [LogLevel.VERBOSE]: 'log',\n  [LogLevel.INFO]: 'info',\n  [LogLevel.WARN]: 'warn',\n  [LogLevel.ERROR]: 'error'\n};\n\n/**\n * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR\n * messages on to their corresponding console counterparts (if the log method\n * is supported by the current log level)\n */\nconst defaultLogHandler: LogHandler = (instance, logType, ...args): void => {\n  if (logType < instance.logLevel) {\n    return;\n  }\n  const now = new Date().toISOString();\n  const method = ConsoleMethod[logType as keyof typeof ConsoleMethod];\n  if (method) {\n    console[method as 'log' | 'info' | 'warn' | 'error'](\n      `[${now}]  ${instance.name}:`,\n      ...args\n    );\n  } else {\n    throw new Error(\n      `Attempted to log a message with an invalid logType (value: ${logType})`\n    );\n  }\n};\n\nexport class Logger {\n  /**\n   * Gives you an instance of a Logger to capture messages according to\n   * Firebase's logging scheme.\n   *\n   * @param name The name that the logs will be associated with\n   */\n  constructor(public name: string) {\n    /**\n     * Capture the current instance for later use\n     */\n    instances.push(this);\n  }\n\n  /**\n   * The log level of the given Logger instance.\n   */\n  private _logLevel = defaultLogLevel;\n\n  get logLevel(): LogLevel {\n    return this._logLevel;\n  }\n\n  set logLevel(val: LogLevel) {\n    if (!(val in LogLevel)) {\n      throw new TypeError(`Invalid value \"${val}\" assigned to \\`logLevel\\``);\n    }\n    this._logLevel = val;\n  }\n\n  // Workaround for setter/getter having to be the same type.\n  setLogLevel(val: LogLevel | LogLevelString): void {\n    this._logLevel = typeof val === 'string' ? levelStringToEnum[val] : val;\n  }\n\n  /**\n   * The main (internal) log handler for the Logger instance.\n   * Can be set to a new function in internal package code but not by user.\n   */\n  private _logHandler: LogHandler = defaultLogHandler;\n  get logHandler(): LogHandler {\n    return this._logHandler;\n  }\n  set logHandler(val: LogHandler) {\n    if (typeof val !== 'function') {\n      throw new TypeError('Value assigned to `logHandler` must be a function');\n    }\n    this._logHandler = val;\n  }\n\n  /**\n   * The optional, additional, user-defined log handler for the Logger instance.\n   */\n  private _userLogHandler: LogHandler | null = null;\n  get userLogHandler(): LogHandler | null {\n    return this._userLogHandler;\n  }\n  set userLogHandler(val: LogHandler | null) {\n    this._userLogHandler = val;\n  }\n\n  /**\n   * The functions below are all based on the `console` interface\n   */\n\n  debug(...args: unknown[]): void {\n    this._userLogHandler && this._userLogHandler(this, LogLevel.DEBUG, ...args);\n    this._logHandler(this, LogLevel.DEBUG, ...args);\n  }\n  log(...args: unknown[]): void {\n    this._userLogHandler &&\n      this._userLogHandler(this, LogLevel.VERBOSE, ...args);\n    this._logHandler(this, LogLevel.VERBOSE, ...args);\n  }\n  info(...args: unknown[]): void {\n    this._userLogHandler && this._userLogHandler(this, LogLevel.INFO, ...args);\n    this._logHandler(this, LogLevel.INFO, ...args);\n  }\n  warn(...args: unknown[]): void {\n    this._userLogHandler && this._userLogHandler(this, LogLevel.WARN, ...args);\n    this._logHandler(this, LogLevel.WARN, ...args);\n  }\n  error(...args: unknown[]): void {\n    this._userLogHandler && this._userLogHandler(this, LogLevel.ERROR, ...args);\n    this._logHandler(this, LogLevel.ERROR, ...args);\n  }\n}\n\nexport function setLogLevel(level: LogLevelString | LogLevel): void {\n  instances.forEach(inst => {\n    inst.setLogLevel(level);\n  });\n}\n\nexport function setUserLogHandler(\n  logCallback: LogCallback | null,\n  options?: LogOptions\n): void {\n  for (const instance of instances) {\n    let customLogLevel: LogLevel | null = null;\n    if (options && options.level) {\n      customLogLevel = levelStringToEnum[options.level];\n    }\n    if (logCallback === null) {\n      instance.userLogHandler = null;\n    } else {\n      instance.userLogHandler = (\n        instance: Logger,\n        level: LogLevel,\n        ...args: unknown[]\n      ) => {\n        const message = args\n          .map(arg => {\n            if (arg == null) {\n              return null;\n            } else if (typeof arg === 'string') {\n              return arg;\n            } else if (typeof arg === 'number' || typeof arg === 'boolean') {\n              return arg.toString();\n            } else if (arg instanceof Error) {\n              return arg.message;\n            } else {\n              try {\n                return JSON.stringify(arg);\n              } catch (ignored) {\n                return null;\n              }\n            }\n          })\n          .filter(arg => arg)\n          .join(' ');\n        if (level >= (customLogLevel ?? instance.logLevel)) {\n          logCallback({\n            level: LogLevel[level].toLowerCase() as LogLevelString,\n            message,\n            args,\n            type: instance.name\n          });\n        }\n      };\n    }\n  }\n}\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n    return (idbProxyableTypes ||\n        (idbProxyableTypes = [\n            IDBDatabase,\n            IDBObjectStore,\n            IDBIndex,\n            IDBCursor,\n            IDBTransaction,\n        ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n    return (cursorAdvanceMethods ||\n        (cursorAdvanceMethods = [\n            IDBCursor.prototype.advance,\n            IDBCursor.prototype.continue,\n            IDBCursor.prototype.continuePrimaryKey,\n        ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n    const promise = new Promise((resolve, reject) => {\n        const unlisten = () => {\n            request.removeEventListener('success', success);\n            request.removeEventListener('error', error);\n        };\n        const success = () => {\n            resolve(wrap(request.result));\n            unlisten();\n        };\n        const error = () => {\n            reject(request.error);\n            unlisten();\n        };\n        request.addEventListener('success', success);\n        request.addEventListener('error', error);\n    });\n    promise\n        .then((value) => {\n        // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n        // (see wrapFunction).\n        if (value instanceof IDBCursor) {\n            cursorRequestMap.set(value, request);\n        }\n        // Catching to avoid \"Uncaught Promise exceptions\"\n    })\n        .catch(() => { });\n    // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n    // is because we create many promises from a single IDBRequest.\n    reverseTransformCache.set(promise, request);\n    return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n    // Early bail if we've already created a done promise for this transaction.\n    if (transactionDoneMap.has(tx))\n        return;\n    const done = new Promise((resolve, reject) => {\n        const unlisten = () => {\n            tx.removeEventListener('complete', complete);\n            tx.removeEventListener('error', error);\n            tx.removeEventListener('abort', error);\n        };\n        const complete = () => {\n            resolve();\n            unlisten();\n        };\n        const error = () => {\n            reject(tx.error || new DOMException('AbortError', 'AbortError'));\n            unlisten();\n        };\n        tx.addEventListener('complete', complete);\n        tx.addEventListener('error', error);\n        tx.addEventListener('abort', error);\n    });\n    // Cache it for later retrieval.\n    transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n    get(target, prop, receiver) {\n        if (target instanceof IDBTransaction) {\n            // Special handling for transaction.done.\n            if (prop === 'done')\n                return transactionDoneMap.get(target);\n            // Polyfill for objectStoreNames because of Edge.\n            if (prop === 'objectStoreNames') {\n                return target.objectStoreNames || transactionStoreNamesMap.get(target);\n            }\n            // Make tx.store return the only store in the transaction, or undefined if there are many.\n            if (prop === 'store') {\n                return receiver.objectStoreNames[1]\n                    ? undefined\n                    : receiver.objectStore(receiver.objectStoreNames[0]);\n            }\n        }\n        // Else transform whatever we get back.\n        return wrap(target[prop]);\n    },\n    set(target, prop, value) {\n        target[prop] = value;\n        return true;\n    },\n    has(target, prop) {\n        if (target instanceof IDBTransaction &&\n            (prop === 'done' || prop === 'store')) {\n            return true;\n        }\n        return prop in target;\n    },\n};\nfunction replaceTraps(callback) {\n    idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n    // Due to expected object equality (which is enforced by the caching in `wrap`), we\n    // only create one new func per func.\n    // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n    if (func === IDBDatabase.prototype.transaction &&\n        !('objectStoreNames' in IDBTransaction.prototype)) {\n        return function (storeNames, ...args) {\n            const tx = func.call(unwrap(this), storeNames, ...args);\n            transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n            return wrap(tx);\n        };\n    }\n    // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n    // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n    // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n    // with real promises, so each advance methods returns a new promise for the cursor object, or\n    // undefined if the end of the cursor has been reached.\n    if (getCursorAdvanceMethods().includes(func)) {\n        return function (...args) {\n            // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n            // the original object.\n            func.apply(unwrap(this), args);\n            return wrap(cursorRequestMap.get(this));\n        };\n    }\n    return function (...args) {\n        // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n        // the original object.\n        return wrap(func.apply(unwrap(this), args));\n    };\n}\nfunction transformCachableValue(value) {\n    if (typeof value === 'function')\n        return wrapFunction(value);\n    // This doesn't return, it just creates a 'done' promise for the transaction,\n    // which is later returned for transaction.done (see idbObjectHandler).\n    if (value instanceof IDBTransaction)\n        cacheDonePromiseForTransaction(value);\n    if (instanceOfAny(value, getIdbProxyableTypes()))\n        return new Proxy(value, idbProxyTraps);\n    // Return the same value back if we're not going to transform it.\n    return value;\n}\nfunction wrap(value) {\n    // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n    // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n    if (value instanceof IDBRequest)\n        return promisifyRequest(value);\n    // If we've already transformed this value before, reuse the transformed value.\n    // This is faster, but it also provides object equality.\n    if (transformCache.has(value))\n        return transformCache.get(value);\n    const newValue = transformCachableValue(value);\n    // Not all types are transformed.\n    // These may be primitive types, so they can't be WeakMap keys.\n    if (newValue !== value) {\n        transformCache.set(value, newValue);\n        reverseTransformCache.set(newValue, value);\n    }\n    return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n    const request = indexedDB.open(name, version);\n    const openPromise = wrap(request);\n    if (upgrade) {\n        request.addEventListener('upgradeneeded', (event) => {\n            upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction));\n        });\n    }\n    if (blocked)\n        request.addEventListener('blocked', () => blocked());\n    openPromise\n        .then((db) => {\n        if (terminated)\n            db.addEventListener('close', () => terminated());\n        if (blocking)\n            db.addEventListener('versionchange', () => blocking());\n    })\n        .catch(() => { });\n    return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n    const request = indexedDB.deleteDatabase(name);\n    if (blocked)\n        request.addEventListener('blocked', () => blocked());\n    return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n    if (!(target instanceof IDBDatabase &&\n        !(prop in target) &&\n        typeof prop === 'string')) {\n        return;\n    }\n    if (cachedMethods.get(prop))\n        return cachedMethods.get(prop);\n    const targetFuncName = prop.replace(/FromIndex$/, '');\n    const useIndex = prop !== targetFuncName;\n    const isWrite = writeMethods.includes(targetFuncName);\n    if (\n    // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n    !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n        !(isWrite || readMethods.includes(targetFuncName))) {\n        return;\n    }\n    const method = async function (storeName, ...args) {\n        // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n        const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n        let target = tx.store;\n        if (useIndex)\n            target = target.index(args.shift());\n        // Must reject if op rejects.\n        // If it's a write operation, must reject if tx.done rejects.\n        // Must reject with op rejection first.\n        // Must resolve with op value.\n        // Must handle both promises (no unhandled rejections)\n        return (await Promise.all([\n            target[targetFuncName](...args),\n            isWrite && tx.done,\n        ]))[0];\n    };\n    cachedMethods.set(prop, method);\n    return method;\n}\nreplaceTraps((oldTraps) => ({\n    ...oldTraps,\n    get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n    has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n"],"names":["stringToByteArray","str","out","p","i","length","c","charCodeAt","base64","byteToCharMap_","charToByteMap_","byteToCharMapWebSafe_","charToByteMapWebSafe_","ENCODED_VALS_BASE","ENCODED_VALS","this","ENCODED_VALS_WEBSAFE","HAS_NATIVE_SUPPORT","atob","encodeByteArray","input","webSafe","Array","isArray","Error","init_","byteToCharMap","output","byte1","haveByte2","byte2","haveByte3","byte3","outByte1","outByte2","outByte3","outByte4","push","join","encodeString","btoa","decodeString","bytes","pos","c1","String","fromCharCode","c2","u","c3","byteArrayToString","decodeStringToByteArray","charToByteMap","charAt","byte4","base64urlEncodeWithoutPadding","utf8Bytes","base64Encode","replace","base64Decode","e","console","error","isBrowserExtension","runtime","chrome","browser","undefined","id","isIndexedDBAvailable","indexedDB","validateIndexedDBOpenable","Promise","resolve","reject","preExist","DB_CHECK_NAME","request","self","open","onsuccess","result","close","deleteDatabase","onupgradeneeded","onerror","message","areCookiesEnabled","navigator","cookieEnabled","getDefaultsFromGlobal","window","global","getGlobal","__FIREBASE_DEFAULTS__","getDefaults","process","defaultsJsonString","JSON","parse","getDefaultsFromEnvVariable","document","match","cookie","decoded","getDefaultsFromCookie","info","getDefaultAppConfig","config","Deferred","promise","callback","value","catch","FirebaseError","code","customData","name","Object","setPrototypeOf","prototype","captureStackTrace","ErrorFactory","create","service","serviceName","errors","fullCode","template","replaceTemplate","fullMessage","data","PATTERN","_","key","deepEqual","a","b","aKeys","keys","bKeys","k","includes","aProp","bProp","isObject","thing","MAX_VALUE_MILLIS","calculateBackoffMillis","backoffCount","intervalMillis","backoffFactor","currBaseValue","Math","pow","randomWait","round","random","min","getModularInstance","_delegate","_interopRequireDefault","require","exports","_createSvgIcon","_jsxRuntime","_default","default","jsx","d","getCardUtilityClass","slot","generateUtilityClass","generateUtilityClasses","_excluded","CardRoot","styled","Paper","overridesResolver","props","styles","root","overflow","React","inProps","ref","useThemeProps","className","raised","other","_objectWithoutPropertiesLoose","ownerState","_extends","classes","composeClasses","useUtilityClasses","_jsx","clsx","elevation","createSvgIcon","getChipUtilityClass","ChipRoot","color","iconColor","clickable","onDelete","size","variant","chipClasses","avatar","capitalize","icon","deleteIcon","deletable","theme","deleteIconColor","alpha","palette","text","primary","textColor","mode","grey","maxWidth","fontFamily","typography","fontSize","pxToRem","display","alignItems","justifyContent","height","vars","backgroundColor","action","selected","borderRadius","whiteSpace","transition","transitions","cursor","outline","textDecoration","border","padding","verticalAlign","boxSizing","opacity","disabledOpacity","pointerEvents","marginLeft","marginRight","width","Chip","defaultAvatarColor","contrastText","dark","secondary","defaultIconColor","WebkitTapHighlightColor","primaryChannel","margin","contrastTextChannel","main","selectedChannel","selectedOpacity","focusOpacity","userSelect","hoverOpacity","boxShadow","shadows","defaultBorder","hover","focus","mainChannel","ChipLabel","label","textOverflow","paddingLeft","paddingRight","isDeleteKeyboardEvent","keyboardEvent","avatarProp","clickableProp","ComponentProp","component","deleteIconProp","disabled","iconProp","onClick","onKeyDown","onKeyUp","chipRef","handleRef","useForkRef","handleDeleteIconClick","event","stopPropagation","ButtonBase","slots","moreProps","focusVisibleClassName","focusVisible","disableRipple","CancelIcon","_jsxs","as","currentTarget","target","preventDefault","current","blur","children","ListItemTextRoot","listItemTextClasses","inset","multiline","dense","flex","minWidth","marginTop","marginBottom","ListItemText","disableTypography","primaryProp","primaryTypographyProps","secondaryProp","secondaryTypographyProps","ListContext","getListItemTextUtilityClass","type","Typography","getWindow","node","toString","ownerDocument","defaultView","isElement","Element","isHTMLElement","HTMLElement","isShadowRoot","ShadowRoot","max","getUAString","uaData","userAgentData","brands","map","item","brand","version","userAgent","isLayoutViewport","test","getBoundingClientRect","element","includeScale","isFixedStrategy","clientRect","scaleX","scaleY","offsetWidth","offsetHeight","visualViewport","addVisualOffsets","x","left","offsetLeft","y","top","offsetTop","right","bottom","getWindowScroll","win","scrollLeft","pageXOffset","scrollTop","pageYOffset","getNodeName","nodeName","toLowerCase","getDocumentElement","documentElement","getWindowScrollBarX","getComputedStyle","isScrollParent","_getComputedStyle","overflowX","overflowY","getCompositeRect","elementOrVirtualElement","offsetParent","isFixed","isOffsetParentAnElement","offsetParentIsScaled","rect","isElementScaled","scroll","offsets","getNodeScroll","clientLeft","clientTop","getLayoutRect","abs","getParentNode","assignedSlot","parentNode","host","getScrollParent","indexOf","body","listScrollParents","list","_element$ownerDocumen","scrollParent","isBody","concat","updatedList","isTableElement","getTrueOffsetParent","position","getOffsetParent","isFirefox","currentNode","css","transform","perspective","contain","willChange","filter","getContainingBlock","auto","basePlacements","start","end","viewport","popper","variationPlacements","reduce","acc","placement","placements","modifierPhases","order","modifiers","Map","visited","Set","sort","modifier","add","requires","requiresIfExists","forEach","dep","has","depModifier","get","set","debounce","fn","pending","then","DEFAULT_OPTIONS","strategy","areValidElements","_len","arguments","args","_key","some","popperGenerator","generatorOptions","_generatorOptions","_generatorOptions$def","defaultModifiers","_generatorOptions$def2","defaultOptions","reference","options","state","orderedModifiers","assign","modifiersData","elements","attributes","effectCleanupFns","isDestroyed","instance","setOptions","setOptionsAction","cleanupModifierEffects","scrollParents","contextElement","phase","orderModifiers","merged","existing","mergeByName","m","enabled","_ref3","_ref3$options","effect","cleanupFn","noopFn","update","forceUpdate","_state$elements","rects","reset","index","_state$orderedModifie","_state$orderedModifie2","_options","destroy","onFirstUpdate","passive","getBasePlacement","split","getVariation","getMainAxisFromPlacement","computeOffsets","_ref","basePlacement","variation","commonX","commonY","mainAxis","len","unsetSides","mapToStyles","_ref2","_Object$assign2","popperRect","gpuAcceleration","adaptive","roundOffsets","_offsets$x","_offsets$y","hasX","hasOwnProperty","hasY","sideX","sideY","heightProp","widthProp","_Object$assign","commonStyles","_ref4","dpr","devicePixelRatio","roundOffsetsByDPR","_options$offset","offset","invertDistance","skidding","distance","distanceAndSkiddingToXY","_data$state$placement","popperOffsets","hash","getOppositePlacement","matched","getOppositeVariationPlacement","contains","parent","child","rootNode","getRootNode","next","isSameNode","rectToClientRect","getClientRectFromMixedType","clippingParent","html","clientWidth","clientHeight","layoutViewport","getViewportRect","getInnerBoundingClientRect","winScroll","scrollWidth","scrollHeight","direction","getDocumentRect","getClippingRect","boundary","rootBoundary","mainClippingParents","clippingParents","clipperElement","getClippingParents","firstClippingParent","clippingRect","accRect","mergePaddingObject","paddingObject","expandToHashMap","hashMap","detectOverflow","_options$placement","_options$strategy","_options$boundary","_options$rootBoundary","_options$elementConte","elementContext","_options$altBoundary","altBoundary","_options$padding","altContext","clippingClientRect","referenceClientRect","popperClientRect","elementClientRect","overflowOffsets","offsetData","multiply","axis","within","mathMax","mathMin","_options$mainAxis","checkMainAxis","_options$altAxis","altAxis","checkAltAxis","_options$tether","tether","_options$tetherOffset","tetherOffset","isBasePlacement","referenceRect","tetherOffsetValue","normalizedTetherOffsetValue","offsetModifierState","_offsetModifierState$","mainSide","altSide","additive","minLen","maxLen","arrowElement","arrow","arrowRect","arrowPaddingObject","arrowPaddingMin","arrowPaddingMax","arrowLen","minOffset","maxOffset","arrowOffsetParent","clientOffset","offsetModifierValue","tetherMax","preventedOffset","_offsetModifierState$2","_mainSide","_altSide","_offset","_min","_max","isOriginSide","_offsetModifierValue","_tetherMin","_tetherMax","_preventedOffset","v","withinMaxClamp","_state$modifiersData$","toPaddingObject","minProp","maxProp","endDiff","startDiff","clientSize","centerToReference","center","axisProp","centerOffset","_options$element","querySelector","getSideOffsets","preventedOffsets","isAnySideFullyClipped","side","createPopper","_options$scroll","_options$resize","resize","addEventListener","removeEventListener","_ref5","_options$gpuAccelerat","_options$adaptive","_options$roundOffsets","style","removeAttribute","setAttribute","initialStyles","property","attribute","_skip","specifiedFallbackPlacements","fallbackPlacements","_options$flipVariatio","flipVariations","allowedAutoPlacements","preferredPlacement","oppositePlacement","getExpandedFallbackPlacements","_options$allowedAutoP","allPlacements","allowedPlacements","overflows","computeAutoPlacement","checksMap","makeFallbackChecks","firstFittingPlacement","_basePlacement","isStartVariation","isVertical","mainVariationSide","altVariationSide","checks","every","check","_loop","_i","fittingPlacement","find","slice","preventOverflow","referenceOverflow","popperAltOverflow","referenceClippingOffsets","popperEscapeOffsets","isReferenceHidden","hasPopperEscaped","getPopperUnstyledUtilityClass","_excluded2","resolveAnchorEl","anchorEl","defaultPopperOptions","PopperTooltip","disablePortal","initialPlacement","popperOptions","popperRefProp","popperRef","slotProps","TransitionProps","tooltipRef","ownRef","handlePopperRef","handlePopperRefRef","useEnhancedEffect","rtlPlacement","flipPlacement","setPlacement","popperModifiers","childProps","Root","rootProps","useSlotProps","elementType","externalSlotProps","externalForwardedProps","additionalProps","role","containerProp","container","keepMounted","exited","setExited","Portal","in","onEnter","onExited","PopperRoot","PopperUnstyled","_slots$root","useTheme","_useThemeProps","components","componentsProps","RootComponent","getTooltipUtilityClass","TooltipPopper","Popper","disableInteractive","popperInteractive","popperArrow","popperClose","zIndex","tooltip","tooltipClasses","transformOrigin","isRtl","TooltipTooltip","touch","tooltipArrow","Tooltip","bg","shape","common","white","wordWrap","fontWeight","fontWeightMedium","lineHeight","fontWeightRegular","TooltipArrow","content","hystersisOpen","hystersisTimer","composeEventHandler","handler","eventHandler","_slots$popper","_slots$transition","_slots$tooltip","_slots$arrow","_slotProps$popper","_ref6","_slotProps$popper2","_slotProps$transition","_slotProps$tooltip","_ref7","_slotProps$tooltip2","_slotProps$arrow","_ref8","_slotProps$arrow2","describeChild","disableFocusListener","disableHoverListener","disableInteractiveProp","disableTouchListener","enterDelay","enterNextDelay","enterTouchDelay","followCursor","idProp","leaveDelay","leaveTouchDelay","onClose","onOpen","openProp","PopperComponentProp","PopperComponent","PopperProps","title","TransitionComponent","TransitionComponentProp","Grow","childNode","setChildNode","arrowRef","setArrowRef","ignoreNonTouchEvents","closeTimer","enterTimer","leaveTimer","touchTimer","useControlled","controlled","openState","setOpenState","useId","prevUserSelect","stopTouchInteraction","WebkitUserSelect","clearTimeout","handleOpen","handleClose","useEventCallback","setTimeout","duration","shortest","handleEnter","handleLeave","useIsFocusVisible","isFocusVisibleRef","handleBlurVisible","onBlur","handleFocusVisible","onFocus","focusVisibleRef","setChildIsFocusVisible","handleBlur","handleFocus","detectTouchStart","childrenProps","onTouchStart","handleMouseOver","handleMouseLeave","handleKeyDown","nativeEvent","positionRef","nameOrDescProps","titleIsString","onMouseMove","clientX","clientY","interactiveWrapperListeners","onTouchEnd","onMouseOver","onMouseLeave","_PopperProps$popperOp","tooltipModifiers","Boolean","Transition","TooltipComponent","ArrowComponent","Arrow","popperProps","appendOwnerState","transitionProps","tooltipProps","tooltipArrowProps","TransitionPropsInner","timeout","shorter","ANALYTICS_TYPE","FETCH_TIMEOUT_MILLIS","DYNAMIC_CONFIG_URL","GTAG_URL","logger","Logger","promiseAllSettled","promises","all","insertScriptTag","dataLayerName","measurementId","script","createElement","src","async","head","appendChild","gtagOnConfig","gtagCore","initializationPromisesMap","dynamicConfigPromisesList","measurementIdToAppId","gtagParams","correspondingAppId","dynamicConfigResults","foundConfig","appId","gtagOnEvent","initializationPromisesToWaitFor","gaSendToList","sendToId","initializationPromise","values","wrapOrCreateGtag","gtagFunctionName","_args","command","idOrNameOrParams","wrapGtag","wrappedGtag","findGtagScriptOnPage","scriptTags","getElementsByTagName","tag","ERRORS","ERROR_FACTORY","RetryData","throttleMetadata","metadata","defaultRetryData","getHeaders","apiKey","Headers","Accept","fetchDynamicConfig","appFields","method","headers","appUrl","fetch","response","status","errorMessage","json","jsonResponse","httpStatus","responseMessage","fetchDynamicConfigWithRetry","app","retryData","timeoutMillis","getThrottleMetadata","throttleEndTimeMillis","Date","now","signal","AnalyticsAbortSignal","abort","attemptFetchDynamicConfigWithRetry","setAbortableTimeout","warn","deleteThrottleMetadata","isRetriableError","backoffMillis","Number","setThrottleMetadata","debug","defaultEventParametersForInit","defaultConsentSettingsForInit","listener","listeners","gtagFunction","eventName","eventParams","params","_setConsentDefaultForInit","consentSettings","_setDefaultEventParametersForInit","customParams","validateIndexedDB","errorInfo","installations","dynamicConfigPromise","fidPromise","envIsValid","getId","dynamicConfig","fid","configProperties","gtagCoreFunction","wrappedGtagFunction","AnalyticsService","gtagName","globalInitDone","factory","mismatchedEnvMessages","details","err","warnOnBrowserContextMismatch","dataLayer","getOrCreateDataLayer","_initializeAnalytics","getAnalytics","getApp","analyticsProvider","_getProvider","isInitialized","getImmediate","initializeAnalytics","existingInstance","getOptions","analyticsInstance","initialize","logEvent","internalLogEvent","_registerComponent","Component","analyticsOptions","getProvider","analytics","reason","registerVersion","MessageType","DEFAULT_SW_PATH","DEFAULT_SW_SCOPE","DEFAULT_VAPID_KEY","CONSOLE_CAMPAIGN_ID","arrayToBase64","array","uint8Array","Uint8Array","base64ToArray","base64String","repeat","rawData","outputArray","OLD_DB_NAME","OLD_OBJECT_STORE_NAME","migrateOldDatabase","senderId","databases","dbNames","db","tokenDetails","openDB","upgrade","oldVersion","newVersion","upgradeTransaction","objectStoreNames","objectStore","clear","oldDetails","auth","p256dh","endpoint","token","fcmToken","createTime","subscriptionOptions","swScope","vapidKey","deleteDB","checkTokenDetails","OBJECT_STORE_NAME","dbPromise","getDbPromise","upgradeDb","createObjectStore","dbGet","firebaseDependencies","getKey","transaction","appConfig","oldTokenDetails","dbSet","tx","put","done","dbRemove","delete","ERROR_MAP","requestGetToken","getBody","subscribeOptions","stringify","getEndpoint","responseData","requestUpdateToken","updateOptions","requestDeleteToken","unsubscribeOptions","projectId","getToken","authToken","web","applicationPubKey","TOKEN_EXPIRATION_MS","getTokenInternal","messaging","getPushSubscription","swRegistration","pushSubscription","scope","getNewToken","isTokenValid","updateToken","deleteTokenInternal","pushManager","getSubscription","unsubscribe","updatedToken","updatedTokenDetails","subscription","subscribe","userVisibleOnly","applicationServerKey","dbOptions","currentOptions","isVapidKeyEqual","isEndpointEqual","isAuthEqual","isP256dhEqual","externalizePayload","internalPayload","payload","from","collapseKey","collapse_key","messageId","fcmMessageId","messagePayloadInternal","notification","image","propagateNotificationPayload","propagateDataPayload","fcmOptions","click_action","link","analyticsLabel","analytics_label","propagateFcmOptions","isConsoleMessage","_mergeStrings","s1","s2","resultArray","getMissingValueError","valueName","MessagingService","keyName","appName","messagingSenderId","extractAppConfig","registerDefaultSw","serviceWorker","register","browserErrorMessage","updateSwReg","ServiceWorkerRegistration","updateVapidKey","Notification","permission","requestPermission","serviceWorkerRegistration","logToScion","messageType","eventType","getEventType","message_id","message_name","CONSOLE_CAMPAIGN_NAME","message_time","CONSOLE_CAMPAIGN_TIME","message_device_time","floor","NOTIFICATION_CLICKED","PUSH_RECEIVED","isFirebaseMessaging","onMessageHandler","dataPayload","CONSOLE_CAMPAIGN_ANALYTICS_ENABLED","WindowMessagingFactory","messageEventListener","WindowMessagingInternalFactory","isWindowSupported","PushSubscription","getMessagingInWindow","isSupported","_getToken","module","t","n","o","r","__esModule","defineProperty","enumerable","call","Symbol","toStringTag","areCropsEqual","h","centerCrop","clamp","containCrop","convertToPercentCrop","convertToPixelCrop","l","defaultCrop","makeAspectCrop","s","nudgeCrop","g","unit","w","capture","docMoveBound","mouseDownOnCrop","dragStarted","evData","startClientX","startClientY","startCropX","startCropY","isResize","componentRef","createRef","mediaRef","initChangeCalled","cropIsActive","newCropIsBeingDrawn","onCropPointerDown","crop","getBox","cancelable","bindDocMove","preventScroll","dataset","ord","setState","onComponentPointerDown","locked","keepSelection","onChange","onDocPointerMove","onDragStart","resizeCrop","dragCrop","onComponentKeyDown","onComplete","makePixelCrop","platform","metaKey","ctrlKey","nudgeStepLarge","shiftKey","nudgeStepMedium","nudgeStep","onHandlerKeyDown","aspect","minHeight","maxHeight","C","onDocPointerDone","onDragEnd","unbindDocMove","onDragFocus","scrollTo","resizeObserver","disconnect","getPointRegion","xyOrds","xOrds","yOrds","ariaLabels","defaultProps","renderSelectionAddon","ruleOfThirds","getCropStyle","onPointerDown","cropArea","tabIndex","nwDragHandle","nDragHandle","neDragHandle","eDragHandle","seDragHandle","sDragHandle","swDragHandle","wDragHandle","onMouseDown","Fragment","circularCrop","createCropSelection","PureComponent","PlatformLoggerServiceImpl","getProviders","provider","getComponent","isVersionServiceProvider","library","logString","DEFAULT_ENTRY_NAME","PLATFORM_LOG_STRING","_apps","_components","_addComponent","addComponent","componentName","heartbeatController","optional","triggerHeartbeat","FirebaseAppImpl","_config","_name","_automaticDataCollectionEnabled","automaticDataCollectionEnabled","_container","checkDestroyed","val","_isDeleted","isDeleted","initializeApp","rawConfig","existingApp","ComponentContainer","newApp","libraryKeyOrName","libraryMismatch","versionMismatch","warning","STORE_NAME","originalErrorMessage","readHeartbeatsFromIndexedDB","computeKey","idbGetError","writeHeartbeatsToIndexedDB","heartbeatObject","HeartbeatServiceImpl","_storage","HeartbeatStorageImpl","_heartbeatsCachePromise","read","_heartbeatsCache","platformLogger","agent","getPlatformInfoString","date","getUTCDateString","lastSentHeartbeatDate","heartbeats","singleDateHeartbeat","hbTimestamp","valueOf","overwrite","extractHeartbeatsForHeader","heartbeatsToSend","unsentEntries","headerString","toISOString","substring","heartbeatsCache","maxSize","heartbeatEntry","hb","dates","countBytes","pop","_canUseIndexedDBPromise","runIndexedDBEnvironmentCheck","idbHeartbeatObject","heartbeatsObject","existingHeartbeatsObject","instanceFactory","instantiationMode","multipleInstances","serviceProps","onInstanceCreated","Provider","instances","instancesDeferred","instancesOptions","onInitCallbacks","identifier","normalizedIdentifier","normalizeInstanceIdentifier","deferred","shouldAutoInitialize","getOrInitializeService","instanceIdentifier","isComponentEager","entries","instanceDeferred","services","INTERNAL","_delete","opts","isComponentSet","normalizedDeferredIdentifier","existingCallbacks","callbacks","_a","invokeOnInitCallbacks","providers","setComponent","PENDING_TIMEOUT_MS","PACKAGE_VERSION","INTERNAL_AUTH_VERSION","TOKEN_EXPIRATION_BUFFER","ERROR_DESCRIPTION_MAP","isServerError","getInstallationsEndpoint","extractAuthTokenInfoFromResponse","requestStatus","expiresIn","responseExpiresIn","creationTime","getErrorFromResponse","requestName","responseJson","errorData","serverCode","serverMessage","serverStatus","getHeadersWithAuth","refreshToken","append","getAuthorizationHeader","retryIfServerError","createInstallationRequest","heartbeatServiceProvider","heartbeatService","getHeartbeatsHeader","heartbeatsHeader","authVersion","sdkVersion","ok","responseValue","registeredInstallationEntry","registrationStatus","sleep","ms","VALID_FID_PATTERN","generateFid","fidByteArray","crypto","msCrypto","getRandomValues","substr","encode","fidChangeCallbacks","fidChanged","callFidChangeCallbacks","channel","getBroadcastChannel","postMessage","closeBroadcastChannel","broadcastFidChange","broadcastChannel","BroadcastChannel","onmessage","oldValue","remove","updateFn","store","newValue","getInstallationEntry","oldEntry","installationEntry","updateOrCreateInstallationEntry","entryWithPromise","triggerRegistrationIfNecessary","registrationPromise","clearTimedOutRequest","onLine","inProgressEntry","registrationTime","registerInstallation","waitUntilFidRegistration","updateInstallationRequest","entry","generateAuthTokenRequest","getGenerateAuthTokenEndpoint","installation","completedAuthToken","refreshAuthToken","forceRefresh","isEntryRegistered","oldAuthToken","isAuthTokenValid","tokenPromise","waitUntilAuthTokenRequest","makeAuthTokenRequestInProgressEntry","fetchAuthTokenFromServer","updateAuthTokenRequest","requestTime","updatedInstallationEntry","isAuthTokenExpired","inProgressAuthToken","installationsImpl","completeInstallationRegistration","INSTALLATIONS_NAME","publicFactory","internalFactory","installationsInternal","LogLevel","levelStringToEnum","DEBUG","VERBOSE","INFO","WARN","ERROR","SILENT","defaultLogLevel","ConsoleMethod","defaultLogHandler","logType","logLevel","_logLevel","TypeError","_logHandler","_userLogHandler","idbProxyableTypes","cursorAdvanceMethods","cursorRequestMap","WeakMap","transactionDoneMap","transactionStoreNamesMap","transformCache","reverseTransformCache","idbProxyTraps","prop","receiver","IDBTransaction","wrap","wrapFunction","func","IDBDatabase","IDBCursor","advance","continue","continuePrimaryKey","apply","unwrap","storeNames","transformCachableValue","unlisten","complete","DOMException","cacheDonePromiseForTransaction","object","IDBObjectStore","IDBIndex","Proxy","IDBRequest","success","promisifyRequest","blocked","blocking","terminated","openPromise","readMethods","writeMethods","cachedMethods","getMethod","targetFuncName","useIndex","isWrite","storeName","shift","oldTraps"],"sourceRoot":""}