{"version":3,"sources":["webpack:///./node_modules/@firebase/app-check/dist/index.cjs.js","webpack:///./node_modules/@firebase/analytics/dist/index.esm.js"],"names":["firebase","component","tslib","util","logger$1","_interopDefaultLegacy","e","_a","firebase__default","ERRORS","ERROR_FACTORY","ErrorFactory","APP_CHECK_STATES","Map","DEFAULT_STATE","activated","tokenObservers","DEBUG_STATE","enabled","getState","app","get","setState","state","set","getDebugState","BASE_ENDPOINT","EXCHANGE_RECAPTCHA_TOKEN_METHOD","EXCHANGE_DEBUG_TOKEN_METHOD","TOKEN_REFRESH_TIME","OFFSET_DURATION","RETRIAL_MIN_WAIT","RETRIAL_MAX_WAIT","Refresher","operation","retryPolicy","getWaitDuration","lowerBound","upperBound","this","pending","nextErrorWaitInterval","Error","prototype","start","process","catch","stop","reject","isRunning","hasSucceeded","__awaiter","error_1","__generator","label","trys","push","Deferred","sleep","getNextRun","sent","resolve","promise","currentErrorWaitInterval","ms","Promise","setTimeout","getRecaptcha","self","grecaptcha","ensureActivated","create","appName","name","uuidv4","replace","c","r","Math","random","v","toString","formatDummyToken","tokenErrorData","base64","encodeString","JSON","stringify","exchangeToken","platformLoggerProvider","url","body","headers","platformLogger","options","response","originalError_1","responseBody","originalError_2","match","timeToLiveAsNumber","now","_b","getImmediate","optional","getPlatformInfoString","method","fetch","originalErrorMessage","message","status","httpStatus","json","ttl","isNaN","Number","Date","token","attestationToken","expireTimeMillis","issuedAtTimeMillis","getExchangeRecaptchaTokenRequest","reCAPTCHAToken","projectId","appId","apiKey","recaptcha_token","getExchangeDebugTokenRequest","debugToken","debug_token","DB_NAME","DB_VERSION","STORE_NAME","DEBUG_TOKEN_KEY","dbPromise","getDBPromise","request","indexedDB","open","onsuccess","event","target","result","onerror","error","onupgradeneeded","db","oldVersion","createObjectStore","keyPath","readTokenFromIndexedDB","read","computeKey","writeTokenToIndexedDB","write","writeDebugTokenToIndexedDB","readDebugTokenFromIndexedDB","key","value","transaction","store","objectStore","put","compositeKey","_event","undefined","logger","Logger","readTokenFromStorage","e_1","isIndexedDBAvailable","warn","writeTokenToStorage","readOrCreateDebugTokenFromStorage","existingDebugToken","newToken","console","log","isDebugMode","debugState","getDebugToken","initializeDebugMode","globals","getGlobal","FIREBASE_APPCHECK_DEBUG_TOKEN","deferredToken","defaultTokenErrorData","getToken$2","forceRefresh","cachedToken","tokenFromDebugExchange","_c","interopTokenResult","_d","cachedTokenPromise","isValid","__assign","notifyTokenListeners","apply","concat","provider","getToken","makeDummyTokenResult","addTokenListener","type","listener","onError","tokenListener","next","newState","__spreadArray","tokenRefresher","createTokenRefresher","isTokenAutoRefreshEnabled","validToken_1","then","removeTokenListener","newObservers","filter","tokenObserver","length","_this","nextRefreshTimeMillis","latestAllowableRefresh","min","max","observers","_i","observers_1","observer","ignored","RECAPTCHA_URL","initialize","siteKey","initialized","reCAPTCHAState","divId","invisibleDiv","document","createElement","id","style","display","appendChild","ready","renderInvisibleWidget","loadReCAPTCHAScript","getToken$1","recaptcha","_reject","execute","widgetId","action","container","render","sitekey","size","onload","script","src","head","ReCaptchaV3Provider","_siteKey","attestedClaimsToken","_app","_platformLoggerProvider","CustomProvider","_customProviderOptions","customToken","issuedAtTimeSeconds","issuedAtTime","activate","siteKeyOrProvider","automaticDataCollectionEnabled","setTokenAutoRefreshEnabled","onTokenChanged","onNextOrObserver","onCompletion","nextFn","errorFn","bind","factory","INTERNAL","delete","tokenObservers_1","internalFactory","version","APP_CHECK_NAME","APP_CHECK_NAME_INTERNAL","registerAppCheck","registerComponent","Component","getProvider","setServiceProps","setInstantiationMode","setInstanceCreatedCallback","_instanceIdentifier","_instance","appCheckInternalProvider","registerVersion","GtagCommand","EventName","GA_FID_KEY","ORIGIN_KEY","FETCH_TIMEOUT_MILLIS","DYNAMIC_CONFIG_URL","GTAG_URL","logEvent","gtagFunction","initializationPromise","eventName","eventParams","measurementId","params","global","EVENT","setCurrentScreen","screenName","SET","CONFIG","update","setUserId","setUserProperties","properties","flatProperties","Object","keys","setAnalyticsCollectionEnabled","window","insertScriptTag","dataLayerName","async","getOrCreateDataLayer","dataLayer","Array","isArray","gtagOnConfig","gtagCore","initializationPromisesMap","dynamicConfigPromisesList","measurementIdToAppId","gtagParams","correspondingAppId","dynamicConfigResults","foundConfig","all","find","config","gtagOnEvent","initializationPromisesToWaitFor","gaSendToList","_loop_1","gaSendToList_1","sendToId","state_1","e_2","values","wrapGtag","gtagWrapper","command","idOrNameOrParams","e_3","wrapOrCreateGtag","gtagFunctionName","_args","arguments","wrappedGtag","findGtagScriptOnPage","scriptTags","getElementsByTagName","tag","includes","LONG_RETRY_FACTOR","BASE_INTERVAL_MILLIS","RetryData","throttleMetadata","intervalMillis","getThrottleMetadata","setThrottleMetadata","metadata","deleteThrottleMetadata","defaultRetryData","getHeaders","Headers","Accept","fetchDynamicConfig","appFields","appUrl","errorMessage","jsonResponse","responseMessage","fetchDynamicConfigWithRetry","retryData","timeoutMillis","signal","backoffCount","throttleEndTimeMillis","AnalyticsAbortSignal","abort","attemptFetchDynamicConfigWithRetry","backoffMillis","setAbortableTimeout","isRetriableError","customData","debug","timeout","addEventListener","clearTimeout","listeners","forEach","validateIndexedDB","errorInfo","initializeIds","installations","dynamicConfigPromise","fidPromise","dynamicConfig","fid","configProperties","envIsValid","getId","gtagCoreFunction","wrappedGtagFunction","gtagName","globalInitDone","settings","warnOnBrowserContextMismatch","mismatchedEnvMessages","details","map","index","join","err","analyticsInstance","ANALYTICS_TYPE","registerAnalytics","instance","analytics","reason","isSupported","isDBOpenable"],"mappings":"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","file":"js/chunk-vendors~f05aa8a7.d41c5cf6.js","sourcesContent":["'use strict';\n\nvar firebase = require('@firebase/app');\nvar component = require('@firebase/component');\nvar tslib = require('tslib');\nvar util = require('@firebase/util');\nvar logger$1 = require('@firebase/logger');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar firebase__default = /*#__PURE__*/_interopDefaultLegacy(firebase);\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar _a;\r\nvar ERRORS = (_a = {},\r\n _a[\"already-activated\" /* ALREADY_ACTIVATED */] = 'You are trying to activate AppCheck for FirebaseApp {$appName}, ' +\r\n 'while it is already activated. ' +\r\n 'AppCheck can only be activated once.',\r\n _a[\"use-before-activation\" /* USE_BEFORE_ACTIVATION */] = 'AppCheck is being used before activate() is called for FirebaseApp {$appName}. ' +\r\n 'Please make sure you call activate() before instantiating other Firebase services.',\r\n _a[\"fetch-network-error\" /* FETCH_NETWORK_ERROR */] = 'Fetch failed to connect to a network. Check Internet connection. ' +\r\n 'Original error: {$originalErrorMessage}.',\r\n _a[\"fetch-parse-error\" /* FETCH_PARSE_ERROR */] = 'Fetch client could not parse response.' +\r\n ' Original error: {$originalErrorMessage}.',\r\n _a[\"fetch-status-error\" /* FETCH_STATUS_ERROR */] = 'Fetch server returned an HTTP error status. HTTP status: {$httpStatus}.',\r\n _a[\"storage-open\" /* STORAGE_OPEN */] = 'Error thrown when opening storage. Original error: {$originalErrorMessage}.',\r\n _a[\"storage-get\" /* STORAGE_GET */] = 'Error thrown when reading from storage. Original error: {$originalErrorMessage}.',\r\n _a[\"storage-set\" /* STORAGE_WRITE */] = 'Error thrown when writing to storage. Original error: {$originalErrorMessage}.',\r\n _a[\"recaptcha-error\" /* RECAPTCHA_ERROR */] = 'ReCAPTCHA error.',\r\n _a);\r\nvar ERROR_FACTORY = new util.ErrorFactory('appCheck', 'AppCheck', ERRORS);\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar APP_CHECK_STATES = new Map();\r\nvar DEFAULT_STATE = {\r\n activated: false,\r\n tokenObservers: []\r\n};\r\nvar DEBUG_STATE = {\r\n enabled: false\r\n};\r\nfunction getState(app) {\r\n return APP_CHECK_STATES.get(app) || DEFAULT_STATE;\r\n}\r\nfunction setState(app, state) {\r\n APP_CHECK_STATES.set(app, state);\r\n}\r\nfunction getDebugState() {\r\n return DEBUG_STATE;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar BASE_ENDPOINT = 'https://content-firebaseappcheck.googleapis.com/v1beta';\r\nvar EXCHANGE_RECAPTCHA_TOKEN_METHOD = 'exchangeRecaptchaToken';\r\nvar EXCHANGE_DEBUG_TOKEN_METHOD = 'exchangeDebugToken';\r\nvar TOKEN_REFRESH_TIME = {\r\n /**\r\n * The offset time before token natural expiration to run the refresh.\r\n * This is currently 5 minutes.\r\n */\r\n OFFSET_DURATION: 5 * 60 * 1000,\r\n /**\r\n * This is the first retrial wait after an error. This is currently\r\n * 30 seconds.\r\n */\r\n RETRIAL_MIN_WAIT: 30 * 1000,\r\n /**\r\n * This is the maximum retrial wait, currently 16 minutes.\r\n */\r\n RETRIAL_MAX_WAIT: 16 * 60 * 1000\r\n};\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Port from auth proactiverefresh.js\r\n *\r\n */\r\n// TODO: move it to @firebase/util?\r\n// TODO: allow to config whether refresh should happen in the background\r\nvar Refresher = /** @class */ (function () {\r\n function Refresher(operation, retryPolicy, getWaitDuration, lowerBound, upperBound) {\r\n this.operation = operation;\r\n this.retryPolicy = retryPolicy;\r\n this.getWaitDuration = getWaitDuration;\r\n this.lowerBound = lowerBound;\r\n this.upperBound = upperBound;\r\n this.pending = null;\r\n this.nextErrorWaitInterval = lowerBound;\r\n if (lowerBound > upperBound) {\r\n throw new Error('Proactive refresh lower bound greater than upper bound!');\r\n }\r\n }\r\n Refresher.prototype.start = function () {\r\n this.nextErrorWaitInterval = this.lowerBound;\r\n this.process(true).catch(function () {\r\n /* we don't care about the result */\r\n });\r\n };\r\n Refresher.prototype.stop = function () {\r\n if (this.pending) {\r\n this.pending.reject('cancelled');\r\n this.pending = null;\r\n }\r\n };\r\n Refresher.prototype.isRunning = function () {\r\n return !!this.pending;\r\n };\r\n Refresher.prototype.process = function (hasSucceeded) {\r\n return tslib.__awaiter(this, void 0, void 0, function () {\r\n var error_1;\r\n return tslib.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n this.stop();\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 6, , 7]);\r\n this.pending = new util.Deferred();\r\n return [4 /*yield*/, sleep(this.getNextRun(hasSucceeded))];\r\n case 2:\r\n _a.sent();\r\n // Why do we resolve a promise, then immediate wait for it?\r\n // We do it to make the promise chain cancellable.\r\n // We can call stop() which rejects the promise before the following line execute, which makes\r\n // the code jump to the catch block.\r\n // TODO: unit test this\r\n this.pending.resolve();\r\n return [4 /*yield*/, this.pending.promise];\r\n case 3:\r\n _a.sent();\r\n this.pending = new util.Deferred();\r\n return [4 /*yield*/, this.operation()];\r\n case 4:\r\n _a.sent();\r\n this.pending.resolve();\r\n return [4 /*yield*/, this.pending.promise];\r\n case 5:\r\n _a.sent();\r\n this.process(true).catch(function () {\r\n /* we don't care about the result */\r\n });\r\n return [3 /*break*/, 7];\r\n case 6:\r\n error_1 = _a.sent();\r\n if (this.retryPolicy(error_1)) {\r\n this.process(false).catch(function () {\r\n /* we don't care about the result */\r\n });\r\n }\r\n else {\r\n this.stop();\r\n }\r\n return [3 /*break*/, 7];\r\n case 7: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n Refresher.prototype.getNextRun = function (hasSucceeded) {\r\n if (hasSucceeded) {\r\n // If last operation succeeded, reset next error wait interval and return\r\n // the default wait duration.\r\n this.nextErrorWaitInterval = this.lowerBound;\r\n // Return typical wait duration interval after a successful operation.\r\n return this.getWaitDuration();\r\n }\r\n else {\r\n // Get next error wait interval.\r\n var currentErrorWaitInterval = this.nextErrorWaitInterval;\r\n // Double interval for next consecutive error.\r\n this.nextErrorWaitInterval *= 2;\r\n // Make sure next wait interval does not exceed the maximum upper bound.\r\n if (this.nextErrorWaitInterval > this.upperBound) {\r\n this.nextErrorWaitInterval = this.upperBound;\r\n }\r\n return currentErrorWaitInterval;\r\n }\r\n };\r\n return Refresher;\r\n}());\r\nfunction sleep(ms) {\r\n return new Promise(function (resolve) {\r\n setTimeout(resolve, ms);\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getRecaptcha() {\r\n return self.grecaptcha;\r\n}\r\nfunction ensureActivated(app) {\r\n if (!getState(app).activated) {\r\n throw ERROR_FACTORY.create(\"use-before-activation\" /* USE_BEFORE_ACTIVATION */, {\r\n appName: app.name\r\n });\r\n }\r\n}\r\n/**\r\n * Copied from https://stackoverflow.com/a/2117523\r\n */\r\nfunction uuidv4() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = (Math.random() * 16) | 0, v = c === 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n}\r\n/**\r\n * Stringify and base64 encode token error data.\r\n *\r\n * @param tokenError Error data, currently hardcoded.\r\n */\r\nfunction formatDummyToken(tokenErrorData) {\r\n return util.base64.encodeString(JSON.stringify(tokenErrorData), \r\n /* webSafe= */ false);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction exchangeToken(_a, platformLoggerProvider) {\r\n var url = _a.url, body = _a.body;\r\n return tslib.__awaiter(this, void 0, void 0, function () {\r\n var headers, platformLogger, options, response, originalError_1, responseBody, originalError_2, match, timeToLiveAsNumber, now;\r\n return tslib.__generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n headers = {\r\n 'Content-Type': 'application/json'\r\n };\r\n platformLogger = platformLoggerProvider.getImmediate({\r\n optional: true\r\n });\r\n if (platformLogger) {\r\n headers['X-Firebase-Client'] = platformLogger.getPlatformInfoString();\r\n }\r\n options = {\r\n method: 'POST',\r\n body: JSON.stringify(body),\r\n headers: headers\r\n };\r\n _b.label = 1;\r\n case 1:\r\n _b.trys.push([1, 3, , 4]);\r\n return [4 /*yield*/, fetch(url, options)];\r\n case 2:\r\n response = _b.sent();\r\n return [3 /*break*/, 4];\r\n case 3:\r\n originalError_1 = _b.sent();\r\n throw ERROR_FACTORY.create(\"fetch-network-error\" /* FETCH_NETWORK_ERROR */, {\r\n originalErrorMessage: originalError_1.message\r\n });\r\n case 4:\r\n if (response.status !== 200) {\r\n throw ERROR_FACTORY.create(\"fetch-status-error\" /* FETCH_STATUS_ERROR */, {\r\n httpStatus: response.status\r\n });\r\n }\r\n _b.label = 5;\r\n case 5:\r\n _b.trys.push([5, 7, , 8]);\r\n return [4 /*yield*/, response.json()];\r\n case 6:\r\n // JSON parsing throws SyntaxError if the response body isn't a JSON string.\r\n responseBody = _b.sent();\r\n return [3 /*break*/, 8];\r\n case 7:\r\n originalError_2 = _b.sent();\r\n throw ERROR_FACTORY.create(\"fetch-parse-error\" /* FETCH_PARSE_ERROR */, {\r\n originalErrorMessage: originalError_2.message\r\n });\r\n case 8:\r\n match = responseBody.ttl.match(/^([\\d.]+)(s)$/);\r\n if (!match || !match[2] || isNaN(Number(match[1]))) {\r\n throw ERROR_FACTORY.create(\"fetch-parse-error\" /* FETCH_PARSE_ERROR */, {\r\n originalErrorMessage: \"ttl field (timeToLive) is not in standard Protobuf Duration \" +\r\n (\"format: \" + responseBody.ttl)\r\n });\r\n }\r\n timeToLiveAsNumber = Number(match[1]) * 1000;\r\n now = Date.now();\r\n return [2 /*return*/, {\r\n token: responseBody.attestationToken,\r\n expireTimeMillis: now + timeToLiveAsNumber,\r\n issuedAtTimeMillis: now\r\n }];\r\n }\r\n });\r\n });\r\n}\r\nfunction getExchangeRecaptchaTokenRequest(app, reCAPTCHAToken) {\r\n var _a = app.options, projectId = _a.projectId, appId = _a.appId, apiKey = _a.apiKey;\r\n return {\r\n url: BASE_ENDPOINT + \"/projects/\" + projectId + \"/apps/\" + appId + \":\" + EXCHANGE_RECAPTCHA_TOKEN_METHOD + \"?key=\" + apiKey,\r\n body: {\r\n // eslint-disable-next-line\r\n recaptcha_token: reCAPTCHAToken\r\n }\r\n };\r\n}\r\nfunction getExchangeDebugTokenRequest(app, debugToken) {\r\n var _a = app.options, projectId = _a.projectId, appId = _a.appId, apiKey = _a.apiKey;\r\n return {\r\n url: BASE_ENDPOINT + \"/projects/\" + projectId + \"/apps/\" + appId + \":\" + EXCHANGE_DEBUG_TOKEN_METHOD + \"?key=\" + apiKey,\r\n body: {\r\n // eslint-disable-next-line\r\n debug_token: debugToken\r\n }\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar DB_NAME = 'firebase-app-check-database';\r\nvar DB_VERSION = 1;\r\nvar STORE_NAME = 'firebase-app-check-store';\r\nvar DEBUG_TOKEN_KEY = 'debug-token';\r\nvar dbPromise = null;\r\nfunction getDBPromise() {\r\n if (dbPromise) {\r\n return dbPromise;\r\n }\r\n dbPromise = new Promise(function (resolve, reject) {\r\n try {\r\n var request = indexedDB.open(DB_NAME, DB_VERSION);\r\n request.onsuccess = function (event) {\r\n resolve(event.target.result);\r\n };\r\n request.onerror = function (event) {\r\n var _a;\r\n reject(ERROR_FACTORY.create(\"storage-open\" /* STORAGE_OPEN */, {\r\n originalErrorMessage: (_a = event.target.error) === null || _a === void 0 ? void 0 : _a.message\r\n }));\r\n };\r\n request.onupgradeneeded = function (event) {\r\n var db = event.target.result;\r\n // We don't use 'break' in this switch statement, the fall-through\r\n // behavior is what we want, because if there are multiple versions between\r\n // the old version and the current version, we want ALL the migrations\r\n // that correspond to those versions to run, not only the last one.\r\n // eslint-disable-next-line default-case\r\n switch (event.oldVersion) {\r\n case 0:\r\n db.createObjectStore(STORE_NAME, {\r\n keyPath: 'compositeKey'\r\n });\r\n }\r\n };\r\n }\r\n catch (e) {\r\n reject(ERROR_FACTORY.create(\"storage-open\" /* STORAGE_OPEN */, {\r\n originalErrorMessage: e.message\r\n }));\r\n }\r\n });\r\n return dbPromise;\r\n}\r\nfunction readTokenFromIndexedDB(app) {\r\n return read(computeKey(app));\r\n}\r\nfunction writeTokenToIndexedDB(app, token) {\r\n return write(computeKey(app), token);\r\n}\r\nfunction writeDebugTokenToIndexedDB(token) {\r\n return write(DEBUG_TOKEN_KEY, token);\r\n}\r\nfunction readDebugTokenFromIndexedDB() {\r\n return read(DEBUG_TOKEN_KEY);\r\n}\r\nfunction write(key, value) {\r\n return tslib.__awaiter(this, void 0, void 0, function () {\r\n var db, transaction, store, request;\r\n return tslib.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, getDBPromise()];\r\n case 1:\r\n db = _a.sent();\r\n transaction = db.transaction(STORE_NAME, 'readwrite');\r\n store = transaction.objectStore(STORE_NAME);\r\n request = store.put({\r\n compositeKey: key,\r\n value: value\r\n });\r\n return [2 /*return*/, new Promise(function (resolve, reject) {\r\n request.onsuccess = function (_event) {\r\n resolve();\r\n };\r\n transaction.onerror = function (event) {\r\n var _a;\r\n reject(ERROR_FACTORY.create(\"storage-set\" /* STORAGE_WRITE */, {\r\n originalErrorMessage: (_a = event.target.error) === null || _a === void 0 ? void 0 : _a.message\r\n }));\r\n };\r\n })];\r\n }\r\n });\r\n });\r\n}\r\nfunction read(key) {\r\n return tslib.__awaiter(this, void 0, void 0, function () {\r\n var db, transaction, store, request;\r\n return tslib.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, getDBPromise()];\r\n case 1:\r\n db = _a.sent();\r\n transaction = db.transaction(STORE_NAME, 'readonly');\r\n store = transaction.objectStore(STORE_NAME);\r\n request = store.get(key);\r\n return [2 /*return*/, new Promise(function (resolve, reject) {\r\n request.onsuccess = function (event) {\r\n var result = event.target.result;\r\n if (result) {\r\n resolve(result.value);\r\n }\r\n else {\r\n resolve(undefined);\r\n }\r\n };\r\n transaction.onerror = function (event) {\r\n var _a;\r\n reject(ERROR_FACTORY.create(\"storage-get\" /* STORAGE_GET */, {\r\n originalErrorMessage: (_a = event.target.error) === null || _a === void 0 ? void 0 : _a.message\r\n }));\r\n };\r\n })];\r\n }\r\n });\r\n });\r\n}\r\nfunction computeKey(app) {\r\n return app.options.appId + \"-\" + app.name;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar logger = new logger$1.Logger('@firebase/app-check');\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Always resolves. In case of an error reading from indexeddb, resolve with undefined\r\n */\r\nfunction readTokenFromStorage(app) {\r\n return tslib.__awaiter(this, void 0, void 0, function () {\r\n var token, e_1;\r\n return tslib.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!util.isIndexedDBAvailable()) return [3 /*break*/, 5];\r\n token = undefined;\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 3, , 4]);\r\n return [4 /*yield*/, readTokenFromIndexedDB(app)];\r\n case 2:\r\n token = _a.sent();\r\n return [3 /*break*/, 4];\r\n case 3:\r\n e_1 = _a.sent();\r\n // swallow the error and return undefined\r\n logger.warn(\"Failed to read token from indexeddb. Error: \" + e_1);\r\n return [3 /*break*/, 4];\r\n case 4: return [2 /*return*/, token];\r\n case 5: return [2 /*return*/, undefined];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * Always resolves. In case of an error writing to indexeddb, print a warning and resolve the promise\r\n */\r\nfunction writeTokenToStorage(app, token) {\r\n if (util.isIndexedDBAvailable()) {\r\n return writeTokenToIndexedDB(app, token).catch(function (e) {\r\n // swallow the error and resolve the promise\r\n logger.warn(\"Failed to write token to indexeddb. Error: \" + e);\r\n });\r\n }\r\n return Promise.resolve();\r\n}\r\nfunction readOrCreateDebugTokenFromStorage() {\r\n return tslib.__awaiter(this, void 0, void 0, function () {\r\n var existingDebugToken, newToken;\r\n return tslib.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n existingDebugToken = undefined;\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 3, , 4]);\r\n return [4 /*yield*/, readDebugTokenFromIndexedDB()];\r\n case 2:\r\n existingDebugToken = _a.sent();\r\n return [3 /*break*/, 4];\r\n case 3:\r\n _a.sent();\r\n return [3 /*break*/, 4];\r\n case 4:\r\n if (!existingDebugToken) {\r\n newToken = uuidv4();\r\n // We don't need to block on writing to indexeddb\r\n // In case persistence failed, a new debug token will be generated everytime the page is refreshed.\r\n // It renders the debug token useless because you have to manually register(whitelist) the new token in the firebase console again and again.\r\n // If you see this error trying to use debug token, it probably means you are using a browser that doesn't support indexeddb.\r\n // You should switch to a different browser that supports indexeddb\r\n writeDebugTokenToIndexedDB(newToken).catch(function (e) {\r\n return logger.warn(\"Failed to persist debug token to indexeddb. Error: \" + e);\r\n });\r\n // Not using logger because I don't think we ever want this accidentally hidden?\r\n console.log(\"AppCheck debug token: \" + newToken + \". You will need to whitelist it in the Firebase console for it to work\");\r\n return [2 /*return*/, newToken];\r\n }\r\n else {\r\n return [2 /*return*/, existingDebugToken];\r\n }\r\n }\r\n });\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction isDebugMode() {\r\n var debugState = getDebugState();\r\n return debugState.enabled;\r\n}\r\nfunction getDebugToken() {\r\n return tslib.__awaiter(this, void 0, void 0, function () {\r\n var state;\r\n return tslib.__generator(this, function (_a) {\r\n state = getDebugState();\r\n if (state.enabled && state.token) {\r\n return [2 /*return*/, state.token.promise];\r\n }\r\n else {\r\n // should not happen!\r\n throw Error(\"\\n Can't get debug token in production mode.\\n \");\r\n }\r\n });\r\n });\r\n}\r\nfunction initializeDebugMode() {\r\n var globals = util.getGlobal();\r\n if (typeof globals.FIREBASE_APPCHECK_DEBUG_TOKEN !== 'string' &&\r\n globals.FIREBASE_APPCHECK_DEBUG_TOKEN !== true) {\r\n return;\r\n }\r\n var debugState = getDebugState();\r\n debugState.enabled = true;\r\n var deferredToken = new util.Deferred();\r\n debugState.token = deferredToken;\r\n if (typeof globals.FIREBASE_APPCHECK_DEBUG_TOKEN === 'string') {\r\n deferredToken.resolve(globals.FIREBASE_APPCHECK_DEBUG_TOKEN);\r\n }\r\n else {\r\n deferredToken.resolve(readOrCreateDebugTokenFromStorage());\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Initial hardcoded value agreed upon across platforms for initial launch.\r\n// Format left open for possible dynamic error values and other fields in the future.\r\nvar defaultTokenErrorData = { error: 'UNKNOWN_ERROR' };\r\n/**\r\n * This function will always resolve.\r\n * The result will contain an error field if there is any error.\r\n * In case there is an error, the token field in the result will be populated with a dummy value\r\n */\r\nfunction getToken$2(app, platformLoggerProvider, forceRefresh) {\r\n if (forceRefresh === void 0) { forceRefresh = false; }\r\n return tslib.__awaiter(this, void 0, void 0, function () {\r\n var state, token, error, cachedToken, tokenFromDebugExchange, _a, _b, _c, e_1, interopTokenResult;\r\n return tslib.__generator(this, function (_d) {\r\n switch (_d.label) {\r\n case 0:\r\n ensureActivated(app);\r\n state = getState(app);\r\n token = state.token;\r\n error = undefined;\r\n if (!!token) return [3 /*break*/, 2];\r\n return [4 /*yield*/, state.cachedTokenPromise];\r\n case 1:\r\n cachedToken = _d.sent();\r\n if (cachedToken && isValid(cachedToken)) {\r\n token = cachedToken;\r\n setState(app, tslib.__assign(tslib.__assign({}, state), { token: token }));\r\n // notify all listeners with the cached token\r\n notifyTokenListeners(app, { token: token.token });\r\n }\r\n _d.label = 2;\r\n case 2:\r\n // Return the cached token (from either memory or indexedDB) if it's valid\r\n if (!forceRefresh && token && isValid(token)) {\r\n return [2 /*return*/, {\r\n token: token.token\r\n }];\r\n }\r\n if (!isDebugMode()) return [3 /*break*/, 6];\r\n _a = exchangeToken;\r\n _b = getExchangeDebugTokenRequest;\r\n _c = [app];\r\n return [4 /*yield*/, getDebugToken()];\r\n case 3: return [4 /*yield*/, _a.apply(void 0, [_b.apply(void 0, _c.concat([_d.sent()])), platformLoggerProvider])];\r\n case 4:\r\n tokenFromDebugExchange = _d.sent();\r\n // Write debug token to indexedDB.\r\n return [4 /*yield*/, writeTokenToStorage(app, tokenFromDebugExchange)];\r\n case 5:\r\n // Write debug token to indexedDB.\r\n _d.sent();\r\n // Write debug token to state.\r\n setState(app, tslib.__assign(tslib.__assign({}, state), { token: tokenFromDebugExchange }));\r\n return [2 /*return*/, { token: tokenFromDebugExchange.token }];\r\n case 6:\r\n _d.trys.push([6, 8, , 9]);\r\n return [4 /*yield*/, state.provider.getToken()];\r\n case 7:\r\n // state.provider is populated in initializeAppCheck()\r\n // ensureActivated() at the top of this function checks that\r\n // initializeAppCheck() has been called.\r\n token = _d.sent();\r\n return [3 /*break*/, 9];\r\n case 8:\r\n e_1 = _d.sent();\r\n // `getToken()` should never throw, but logging error text to console will aid debugging.\r\n logger.error(e_1);\r\n error = e_1;\r\n return [3 /*break*/, 9];\r\n case 9:\r\n if (!!token) return [3 /*break*/, 10];\r\n // if token is undefined, there must be an error.\r\n // we return a dummy token along with the error\r\n interopTokenResult = makeDummyTokenResult(error);\r\n return [3 /*break*/, 12];\r\n case 10:\r\n interopTokenResult = {\r\n token: token.token\r\n };\r\n // write the new token to the memory state as well as the persistent storage.\r\n // Only do it if we got a valid new token\r\n setState(app, tslib.__assign(tslib.__assign({}, state), { token: token }));\r\n return [4 /*yield*/, writeTokenToStorage(app, token)];\r\n case 11:\r\n _d.sent();\r\n _d.label = 12;\r\n case 12:\r\n notifyTokenListeners(app, interopTokenResult);\r\n return [2 /*return*/, interopTokenResult];\r\n }\r\n });\r\n });\r\n}\r\nfunction addTokenListener(app, platformLoggerProvider, type, listener, onError) {\r\n var state = getState(app);\r\n var tokenListener = {\r\n next: listener,\r\n error: onError,\r\n type: type\r\n };\r\n var newState = tslib.__assign(tslib.__assign({}, state), { tokenObservers: tslib.__spreadArray(tslib.__spreadArray([], state.tokenObservers), [tokenListener]) });\r\n /**\r\n * Invoke the listener with the valid token, then start the token refresher\r\n */\r\n if (!newState.tokenRefresher) {\r\n var tokenRefresher = createTokenRefresher(app, platformLoggerProvider);\r\n newState.tokenRefresher = tokenRefresher;\r\n }\r\n // Create the refresher but don't start it if `isTokenAutoRefreshEnabled`\r\n // is not true.\r\n if (!newState.tokenRefresher.isRunning() && state.isTokenAutoRefreshEnabled) {\r\n newState.tokenRefresher.start();\r\n }\r\n // Invoke the listener async immediately if there is a valid token\r\n // in memory.\r\n if (state.token && isValid(state.token)) {\r\n var validToken_1 = state.token;\r\n Promise.resolve()\r\n .then(function () { return listener({ token: validToken_1.token }); })\r\n .catch(function () {\r\n /** Ignore errors in listeners. */\r\n });\r\n }\r\n else if (state.token == null) {\r\n // Only check cache if there was no token. If the token was invalid,\r\n // skip this and rely on exchange endpoint.\r\n void state\r\n .cachedTokenPromise // Storage token promise. Always populated in `activate()`.\r\n .then(function (cachedToken) {\r\n if (cachedToken && isValid(cachedToken)) {\r\n listener({ token: cachedToken.token });\r\n }\r\n })\r\n .catch(function () {\r\n /** Ignore errors in listeners. */\r\n });\r\n }\r\n setState(app, newState);\r\n}\r\nfunction removeTokenListener(app, listener) {\r\n var state = getState(app);\r\n var newObservers = state.tokenObservers.filter(function (tokenObserver) { return tokenObserver.next !== listener; });\r\n if (newObservers.length === 0 &&\r\n state.tokenRefresher &&\r\n state.tokenRefresher.isRunning()) {\r\n state.tokenRefresher.stop();\r\n }\r\n setState(app, tslib.__assign(tslib.__assign({}, state), { tokenObservers: newObservers }));\r\n}\r\nfunction createTokenRefresher(app, platformLoggerProvider) {\r\n var _this = this;\r\n return new Refresher(\r\n // Keep in mind when this fails for any reason other than the ones\r\n // for which we should retry, it will effectively stop the proactive refresh.\r\n function () { return tslib.__awaiter(_this, void 0, void 0, function () {\r\n var state, result;\r\n return tslib.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n state = getState(app);\r\n if (!!state.token) return [3 /*break*/, 2];\r\n return [4 /*yield*/, getToken$2(app, platformLoggerProvider)];\r\n case 1:\r\n result = _a.sent();\r\n return [3 /*break*/, 4];\r\n case 2: return [4 /*yield*/, getToken$2(app, platformLoggerProvider, true)];\r\n case 3:\r\n result = _a.sent();\r\n _a.label = 4;\r\n case 4:\r\n // getToken() always resolves. In case the result has an error field defined, it means the operation failed, and we should retry.\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n return [2 /*return*/];\r\n }\r\n });\r\n }); }, function () {\r\n // TODO: when should we retry?\r\n return true;\r\n }, function () {\r\n var state = getState(app);\r\n if (state.token) {\r\n // issuedAtTime + (50% * total TTL) + 5 minutes\r\n var nextRefreshTimeMillis = state.token.issuedAtTimeMillis +\r\n (state.token.expireTimeMillis - state.token.issuedAtTimeMillis) *\r\n 0.5 +\r\n 5 * 60 * 1000;\r\n // Do not allow refresh time to be past (expireTime - 5 minutes)\r\n var latestAllowableRefresh = state.token.expireTimeMillis - 5 * 60 * 1000;\r\n nextRefreshTimeMillis = Math.min(nextRefreshTimeMillis, latestAllowableRefresh);\r\n return Math.max(0, nextRefreshTimeMillis - Date.now());\r\n }\r\n else {\r\n return 0;\r\n }\r\n }, TOKEN_REFRESH_TIME.RETRIAL_MIN_WAIT, TOKEN_REFRESH_TIME.RETRIAL_MAX_WAIT);\r\n}\r\nfunction notifyTokenListeners(app, token) {\r\n var observers = getState(app).tokenObservers;\r\n for (var _i = 0, observers_1 = observers; _i < observers_1.length; _i++) {\r\n var observer = observers_1[_i];\r\n try {\r\n if (observer.type === \"EXTERNAL\" /* EXTERNAL */ && token.error != null) {\r\n // If this listener was added by a 3P call, send any token error to\r\n // the supplied error handler. A 3P observer always has an error\r\n // handler.\r\n observer.error(token.error);\r\n }\r\n else {\r\n // If the token has no error field, always return the token.\r\n // If this is a 2P listener, return the token, whether or not it\r\n // has an error field.\r\n observer.next(token);\r\n }\r\n }\r\n catch (ignored) {\r\n // Errors in the listener function itself are always ignored.\r\n }\r\n }\r\n}\r\nfunction isValid(token) {\r\n return token.expireTimeMillis - Date.now() > 0;\r\n}\r\nfunction makeDummyTokenResult(error) {\r\n return {\r\n token: formatDummyToken(defaultTokenErrorData),\r\n error: error\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar RECAPTCHA_URL = 'https://www.google.com/recaptcha/api.js';\r\nfunction initialize(app, siteKey) {\r\n var state = getState(app);\r\n var initialized = new util.Deferred();\r\n setState(app, tslib.__assign(tslib.__assign({}, state), { reCAPTCHAState: { initialized: initialized } }));\r\n var divId = \"fire_app_check_\" + app.name;\r\n var invisibleDiv = document.createElement('div');\r\n invisibleDiv.id = divId;\r\n invisibleDiv.style.display = 'none';\r\n document.body.appendChild(invisibleDiv);\r\n var grecaptcha = getRecaptcha();\r\n if (!grecaptcha) {\r\n loadReCAPTCHAScript(function () {\r\n var grecaptcha = getRecaptcha();\r\n if (!grecaptcha) {\r\n // it shouldn't happen.\r\n throw new Error('no recaptcha');\r\n }\r\n grecaptcha.ready(function () {\r\n // Invisible widgets allow us to set a different siteKey for each widget, so we use them to support multiple apps\r\n renderInvisibleWidget(app, siteKey, grecaptcha, divId);\r\n initialized.resolve(grecaptcha);\r\n });\r\n });\r\n }\r\n else {\r\n grecaptcha.ready(function () {\r\n renderInvisibleWidget(app, siteKey, grecaptcha, divId);\r\n initialized.resolve(grecaptcha);\r\n });\r\n }\r\n return initialized.promise;\r\n}\r\nfunction getToken$1(app) {\r\n return tslib.__awaiter(this, void 0, void 0, function () {\r\n var reCAPTCHAState, recaptcha;\r\n return tslib.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n ensureActivated(app);\r\n reCAPTCHAState = getState(app).reCAPTCHAState;\r\n return [4 /*yield*/, reCAPTCHAState.initialized.promise];\r\n case 1:\r\n recaptcha = _a.sent();\r\n return [2 /*return*/, new Promise(function (resolve, _reject) {\r\n // Updated after initialization is complete.\r\n var reCAPTCHAState = getState(app).reCAPTCHAState;\r\n recaptcha.ready(function () {\r\n resolve(\r\n // widgetId is guaranteed to be available if reCAPTCHAState.initialized.promise resolved.\r\n recaptcha.execute(reCAPTCHAState.widgetId, {\r\n action: 'fire_app_check'\r\n }));\r\n });\r\n })];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n *\r\n * @param app\r\n * @param container - Id of a HTML element.\r\n */\r\nfunction renderInvisibleWidget(app, siteKey, grecaptcha, container) {\r\n var widgetId = grecaptcha.render(container, {\r\n sitekey: siteKey,\r\n size: 'invisible'\r\n });\r\n var state = getState(app);\r\n setState(app, tslib.__assign(tslib.__assign({}, state), { reCAPTCHAState: tslib.__assign(tslib.__assign({}, state.reCAPTCHAState), { // state.reCAPTCHAState is set in the initialize()\r\n widgetId: widgetId }) }));\r\n}\r\nfunction loadReCAPTCHAScript(onload) {\r\n var script = document.createElement('script');\r\n script.src = \"\" + RECAPTCHA_URL;\r\n script.onload = onload;\r\n document.head.appendChild(script);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * App Check provider that can obtain a reCAPTCHA V3 token and exchange it\r\n * for an App Check token.\r\n */\r\nvar ReCaptchaV3Provider = /** @class */ (function () {\r\n /**\r\n * Create a ReCaptchaV3Provider instance.\r\n * @param siteKey - ReCAPTCHA V3 siteKey.\r\n */\r\n function ReCaptchaV3Provider(_siteKey) {\r\n this._siteKey = _siteKey;\r\n }\r\n /**\r\n * Returns an App Check token.\r\n * @internal\r\n */\r\n ReCaptchaV3Provider.prototype.getToken = function () {\r\n return tslib.__awaiter(this, void 0, void 0, function () {\r\n var attestedClaimsToken;\r\n return tslib.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!this._app || !this._platformLoggerProvider) {\r\n // This should only occur if user has not called initializeAppCheck().\r\n // We don't have an appName to provide if so.\r\n // This should already be caught in the top level `getToken()` function.\r\n throw ERROR_FACTORY.create(\"use-before-activation\" /* USE_BEFORE_ACTIVATION */, {\r\n appName: ''\r\n });\r\n }\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 3, , 4]);\r\n return [4 /*yield*/, getToken$1(this._app)];\r\n case 2:\r\n attestedClaimsToken = _a.sent();\r\n return [3 /*break*/, 4];\r\n case 3:\r\n _a.sent();\r\n // reCaptcha.execute() throws null which is not very descriptive.\r\n throw ERROR_FACTORY.create(\"recaptcha-error\" /* RECAPTCHA_ERROR */);\r\n case 4: return [2 /*return*/, exchangeToken(getExchangeRecaptchaTokenRequest(this._app, attestedClaimsToken), this._platformLoggerProvider)];\r\n }\r\n });\r\n });\r\n };\r\n ReCaptchaV3Provider.prototype.initialize = function (app, platformLoggerProvider) {\r\n this._app = app;\r\n this._platformLoggerProvider = platformLoggerProvider;\r\n initialize(app, this._siteKey).catch(function () {\r\n /* we don't care about the initialization result */\r\n });\r\n };\r\n return ReCaptchaV3Provider;\r\n}());\r\n/**\r\n * Custom provider class.\r\n */\r\nvar CustomProvider = /** @class */ (function () {\r\n function CustomProvider(_customProviderOptions) {\r\n this._customProviderOptions = _customProviderOptions;\r\n }\r\n /**\r\n * @internal\r\n */\r\n CustomProvider.prototype.getToken = function () {\r\n return tslib.__awaiter(this, void 0, void 0, function () {\r\n var customToken, issuedAtTimeSeconds, issuedAtTimeMillis;\r\n return tslib.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!this._app) {\r\n // This should only occur if user has not called initializeAppCheck().\r\n // We don't have an appName to provide if so.\r\n // This should already be caught in the top level `getToken()` function.\r\n throw ERROR_FACTORY.create(\"use-before-activation\" /* USE_BEFORE_ACTIVATION */, {\r\n appName: ''\r\n });\r\n }\r\n return [4 /*yield*/, this._customProviderOptions.getToken()];\r\n case 1:\r\n customToken = _a.sent();\r\n issuedAtTimeSeconds = util.issuedAtTime(customToken.token);\r\n issuedAtTimeMillis = issuedAtTimeSeconds !== null &&\r\n issuedAtTimeSeconds < Date.now() &&\r\n issuedAtTimeSeconds > 0\r\n ? issuedAtTimeSeconds * 1000\r\n : Date.now();\r\n return [2 /*return*/, tslib.__assign(tslib.__assign({}, customToken), { issuedAtTimeMillis: issuedAtTimeMillis })];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * @internal\r\n */\r\n CustomProvider.prototype.initialize = function (app) {\r\n this._app = app;\r\n };\r\n return CustomProvider;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n *\r\n * @param app\r\n * @param siteKeyOrProvider - optional custom attestation provider\r\n * or reCAPTCHA provider\r\n * @param isTokenAutoRefreshEnabled - if true, enables auto refresh\r\n * of appCheck token.\r\n */\r\nfunction activate(app, siteKeyOrProvider, platformLoggerProvider, isTokenAutoRefreshEnabled) {\r\n var state = getState(app);\r\n if (state.activated) {\r\n throw ERROR_FACTORY.create(\"already-activated\" /* ALREADY_ACTIVATED */, {\r\n appName: app.name\r\n });\r\n }\r\n var newState = tslib.__assign(tslib.__assign({}, state), { activated: true });\r\n // Read cached token from storage if it exists and store it in memory.\r\n newState.cachedTokenPromise = readTokenFromStorage(app).then(function (cachedToken) {\r\n if (cachedToken && isValid(cachedToken)) {\r\n setState(app, tslib.__assign(tslib.__assign({}, getState(app)), { token: cachedToken }));\r\n }\r\n return cachedToken;\r\n });\r\n if (typeof siteKeyOrProvider === 'string') {\r\n newState.provider = new ReCaptchaV3Provider(siteKeyOrProvider);\r\n }\r\n else if (siteKeyOrProvider instanceof ReCaptchaV3Provider ||\r\n siteKeyOrProvider instanceof CustomProvider) {\r\n newState.provider = siteKeyOrProvider;\r\n }\r\n else {\r\n // Process \"old\" custom provider to avoid breaking previous users.\r\n // This was defined at beta release as simply an object with a\r\n // getToken() method.\r\n newState.provider = new CustomProvider({\r\n getToken: siteKeyOrProvider.getToken\r\n });\r\n }\r\n // Use value of global `automaticDataCollectionEnabled` (which\r\n // itself defaults to false if not specified in config) if\r\n // `isTokenAutoRefreshEnabled` param was not provided by user.\r\n newState.isTokenAutoRefreshEnabled =\r\n isTokenAutoRefreshEnabled === undefined\r\n ? app.automaticDataCollectionEnabled\r\n : isTokenAutoRefreshEnabled;\r\n setState(app, newState);\r\n newState.provider.initialize(app, platformLoggerProvider);\r\n}\r\nfunction setTokenAutoRefreshEnabled(app, isTokenAutoRefreshEnabled) {\r\n var state = getState(app);\r\n // This will exist if any product libraries have called\r\n // `addTokenListener()`\r\n if (state.tokenRefresher) {\r\n if (isTokenAutoRefreshEnabled === true) {\r\n state.tokenRefresher.start();\r\n }\r\n else {\r\n state.tokenRefresher.stop();\r\n }\r\n }\r\n setState(app, tslib.__assign(tslib.__assign({}, state), { isTokenAutoRefreshEnabled: isTokenAutoRefreshEnabled }));\r\n}\r\n/**\r\n * Differs from internal getToken in that it throws the error.\r\n */\r\nfunction getToken(app, platformLoggerProvider, forceRefresh) {\r\n return tslib.__awaiter(this, void 0, void 0, function () {\r\n var result;\r\n return tslib.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, getToken$2(app, platformLoggerProvider, forceRefresh)];\r\n case 1:\r\n result = _a.sent();\r\n if (result.error) {\r\n throw result.error;\r\n }\r\n return [2 /*return*/, { token: result.token }];\r\n }\r\n });\r\n });\r\n}\r\nfunction onTokenChanged(app, platformLoggerProvider, onNextOrObserver, onError, \r\n/**\r\n * NOTE: Although an `onCompletion` callback can be provided, it will\r\n * never be called because the token stream is never-ending.\r\n * It is added only for API consistency with the observer pattern, which\r\n * we follow in JS APIs.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nonCompletion) {\r\n var nextFn = function () { };\r\n var errorFn = function () { };\r\n if (onNextOrObserver.next != null) {\r\n nextFn = onNextOrObserver.next.bind(onNextOrObserver);\r\n }\r\n else {\r\n nextFn = onNextOrObserver;\r\n }\r\n if (onNextOrObserver.error != null) {\r\n errorFn = onNextOrObserver.error.bind(onNextOrObserver);\r\n }\r\n else if (onError) {\r\n errorFn = onError;\r\n }\r\n addTokenListener(app, platformLoggerProvider, \"EXTERNAL\" /* EXTERNAL */, nextFn, errorFn);\r\n return function () { return removeTokenListener(app, nextFn); };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction factory(app, platformLoggerProvider) {\r\n return {\r\n app: app,\r\n activate: function (siteKeyOrProvider, isTokenAutoRefreshEnabled) {\r\n return activate(app, \r\n // Public types of ReCaptchaV3Provider/CustomProvider don't\r\n // expose getToken() and aren't recognized as the internal\r\n // class version of themselves.\r\n siteKeyOrProvider, platformLoggerProvider, isTokenAutoRefreshEnabled);\r\n },\r\n setTokenAutoRefreshEnabled: function (isTokenAutoRefreshEnabled) {\r\n return setTokenAutoRefreshEnabled(app, isTokenAutoRefreshEnabled);\r\n },\r\n getToken: function (forceRefresh) {\r\n return getToken(app, platformLoggerProvider, forceRefresh);\r\n },\r\n onTokenChanged: function (onNextOrObserver, onError, onCompletion) {\r\n return onTokenChanged(app, platformLoggerProvider, \r\n /**\r\n * This can still be an observer. Need to do this casting because\r\n * according to Typescript: \"Implementation signatures of overloads\r\n * are not externally visible\"\r\n */\r\n onNextOrObserver, onError);\r\n },\r\n INTERNAL: {\r\n delete: function () {\r\n var tokenObservers = getState(app).tokenObservers;\r\n for (var _i = 0, tokenObservers_1 = tokenObservers; _i < tokenObservers_1.length; _i++) {\r\n var tokenObserver = tokenObservers_1[_i];\r\n removeTokenListener(app, tokenObserver.next);\r\n }\r\n return Promise.resolve();\r\n }\r\n }\r\n };\r\n}\r\nfunction internalFactory(app, platformLoggerProvider) {\r\n return {\r\n getToken: function (forceRefresh) {\r\n return getToken$2(app, platformLoggerProvider, forceRefresh);\r\n },\r\n addTokenListener: function (listener) {\r\n return addTokenListener(app, platformLoggerProvider, \"INTERNAL\" /* INTERNAL */, listener);\r\n },\r\n removeTokenListener: function (listener) { return removeTokenListener(app, listener); }\r\n };\r\n}\n\nvar name = \"@firebase/app-check\";\nvar version = \"0.3.2\";\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar APP_CHECK_NAME = 'appCheck';\r\nvar APP_CHECK_NAME_INTERNAL = 'app-check-internal';\r\nfunction registerAppCheck(firebase) {\r\n // The public interface\r\n firebase.INTERNAL.registerComponent(new component.Component(APP_CHECK_NAME, function (container) {\r\n // getImmediate for FirebaseApp will always succeed\r\n var app = container.getProvider('app').getImmediate();\r\n var platformLoggerProvider = container.getProvider('platform-logger');\r\n return factory(app, platformLoggerProvider);\r\n }, \"PUBLIC\" /* PUBLIC */)\r\n .setServiceProps({\r\n ReCaptchaV3Provider: ReCaptchaV3Provider,\r\n CustomProvider: CustomProvider\r\n })\r\n /**\r\n * AppCheck can only be initialized by explicitly calling firebase.appCheck()\r\n * We don't want firebase products that consume AppCheck to gate on AppCheck\r\n * if the user doesn't intend them to, just because the AppCheck component\r\n * is registered.\r\n */\r\n .setInstantiationMode(\"EXPLICIT\" /* EXPLICIT */)\r\n /**\r\n * Because all firebase products that depend on app-check depend on app-check-internal directly,\r\n * we need to initialize app-check-internal after app-check is initialized to make it\r\n * available to other firebase products.\r\n */\r\n .setInstanceCreatedCallback(function (container, _instanceIdentifier, _instance) {\r\n var appCheckInternalProvider = container.getProvider(APP_CHECK_NAME_INTERNAL);\r\n appCheckInternalProvider.initialize();\r\n }));\r\n // The internal interface used by other Firebase products\r\n firebase.INTERNAL.registerComponent(new component.Component(APP_CHECK_NAME_INTERNAL, function (container) {\r\n // getImmediate for FirebaseApp will always succeed\r\n var app = container.getProvider('app').getImmediate();\r\n var platformLoggerProvider = container.getProvider('platform-logger');\r\n return internalFactory(app, platformLoggerProvider);\r\n }, \"PUBLIC\" /* PUBLIC */).setInstantiationMode(\"EXPLICIT\" /* EXPLICIT */));\r\n firebase.registerVersion(name, version);\r\n}\r\nregisterAppCheck(firebase__default['default']);\r\ninitializeDebugMode();\n//# sourceMappingURL=index.cjs.js.map\n","import { __awaiter, __generator, __assign } from 'tslib';\nimport firebase from '@firebase/app';\nimport '@firebase/installations';\nimport { Logger } from '@firebase/logger';\nimport { ErrorFactory, calculateBackoffMillis, FirebaseError, validateIndexedDBOpenable, isIndexedDBAvailable, isBrowserExtension, areCookiesEnabled } from '@firebase/util';\nimport { Component } from '@firebase/component';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Key to attach FID to in gtag params.\r\nvar GA_FID_KEY = 'firebase_id';\r\nvar ORIGIN_KEY = 'origin';\r\nvar FETCH_TIMEOUT_MILLIS = 60 * 1000;\r\nvar DYNAMIC_CONFIG_URL = 'https://firebase.googleapis.com/v1alpha/projects/-/apps/{app-id}/webConfig';\r\nvar GTAG_URL = 'https://www.googletagmanager.com/gtag/js';\r\nvar GtagCommand;\r\n(function (GtagCommand) {\r\n GtagCommand[\"EVENT\"] = \"event\";\r\n GtagCommand[\"SET\"] = \"set\";\r\n GtagCommand[\"CONFIG\"] = \"config\";\r\n})(GtagCommand || (GtagCommand = {}));\r\n/**\r\n * Officially recommended event names for gtag.js\r\n * Any other string is also allowed.\r\n *\r\n * @public\r\n */\r\nvar EventName;\r\n(function (EventName) {\r\n EventName[\"ADD_SHIPPING_INFO\"] = \"add_shipping_info\";\r\n EventName[\"ADD_PAYMENT_INFO\"] = \"add_payment_info\";\r\n EventName[\"ADD_TO_CART\"] = \"add_to_cart\";\r\n EventName[\"ADD_TO_WISHLIST\"] = \"add_to_wishlist\";\r\n EventName[\"BEGIN_CHECKOUT\"] = \"begin_checkout\";\r\n /**\r\n * @deprecated\r\n * This event name is deprecated and is unsupported in updated\r\n * Enhanced Ecommerce reports.\r\n */\r\n EventName[\"CHECKOUT_PROGRESS\"] = \"checkout_progress\";\r\n EventName[\"EXCEPTION\"] = \"exception\";\r\n EventName[\"GENERATE_LEAD\"] = \"generate_lead\";\r\n EventName[\"LOGIN\"] = \"login\";\r\n EventName[\"PAGE_VIEW\"] = \"page_view\";\r\n EventName[\"PURCHASE\"] = \"purchase\";\r\n EventName[\"REFUND\"] = \"refund\";\r\n EventName[\"REMOVE_FROM_CART\"] = \"remove_from_cart\";\r\n EventName[\"SCREEN_VIEW\"] = \"screen_view\";\r\n EventName[\"SEARCH\"] = \"search\";\r\n EventName[\"SELECT_CONTENT\"] = \"select_content\";\r\n EventName[\"SELECT_ITEM\"] = \"select_item\";\r\n EventName[\"SELECT_PROMOTION\"] = \"select_promotion\";\r\n /** @deprecated */\r\n EventName[\"SET_CHECKOUT_OPTION\"] = \"set_checkout_option\";\r\n EventName[\"SHARE\"] = \"share\";\r\n EventName[\"SIGN_UP\"] = \"sign_up\";\r\n EventName[\"TIMING_COMPLETE\"] = \"timing_complete\";\r\n EventName[\"VIEW_CART\"] = \"view_cart\";\r\n EventName[\"VIEW_ITEM\"] = \"view_item\";\r\n EventName[\"VIEW_ITEM_LIST\"] = \"view_item_list\";\r\n EventName[\"VIEW_PROMOTION\"] = \"view_promotion\";\r\n EventName[\"VIEW_SEARCH_RESULTS\"] = \"view_search_results\";\r\n})(EventName || (EventName = {}));\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Logs an analytics event through the Firebase SDK.\r\n *\r\n * @param gtagFunction Wrapped gtag function that waits for fid to be set before sending an event\r\n * @param eventName Google Analytics event name, choose from standard list or use a custom string.\r\n * @param eventParams Analytics event parameters.\r\n */\r\nfunction logEvent(gtagFunction, initializationPromise, eventName, eventParams, options) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var measurementId, params;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!(options && options.global)) return [3 /*break*/, 1];\r\n gtagFunction(GtagCommand.EVENT, eventName, eventParams);\r\n return [2 /*return*/];\r\n case 1: return [4 /*yield*/, initializationPromise];\r\n case 2:\r\n measurementId = _a.sent();\r\n params = __assign(__assign({}, eventParams), { 'send_to': measurementId });\r\n gtagFunction(GtagCommand.EVENT, eventName, params);\r\n _a.label = 3;\r\n case 3: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * Set screen_name parameter for this Google Analytics ID.\r\n *\r\n * @param gtagFunction Wrapped gtag function that waits for fid to be set before sending an event\r\n * @param screenName Screen name string to set.\r\n */\r\nfunction setCurrentScreen(gtagFunction, initializationPromise, screenName, options) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var measurementId;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!(options && options.global)) return [3 /*break*/, 1];\r\n gtagFunction(GtagCommand.SET, { 'screen_name': screenName });\r\n return [2 /*return*/, Promise.resolve()];\r\n case 1: return [4 /*yield*/, initializationPromise];\r\n case 2:\r\n measurementId = _a.sent();\r\n gtagFunction(GtagCommand.CONFIG, measurementId, {\r\n update: true,\r\n 'screen_name': screenName\r\n });\r\n _a.label = 3;\r\n case 3: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * Set user_id parameter for this Google Analytics ID.\r\n *\r\n * @param gtagFunction Wrapped gtag function that waits for fid to be set before sending an event\r\n * @param id User ID string to set\r\n */\r\nfunction setUserId(gtagFunction, initializationPromise, id, options) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var measurementId;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!(options && options.global)) return [3 /*break*/, 1];\r\n gtagFunction(GtagCommand.SET, { 'user_id': id });\r\n return [2 /*return*/, Promise.resolve()];\r\n case 1: return [4 /*yield*/, initializationPromise];\r\n case 2:\r\n measurementId = _a.sent();\r\n gtagFunction(GtagCommand.CONFIG, measurementId, {\r\n update: true,\r\n 'user_id': id\r\n });\r\n _a.label = 3;\r\n case 3: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * Set all other user properties other than user_id and screen_name.\r\n *\r\n * @param gtagFunction Wrapped gtag function that waits for fid to be set before sending an event\r\n * @param properties Map of user properties to set\r\n */\r\nfunction setUserProperties(gtagFunction, initializationPromise, properties, options) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var flatProperties, _i, _a, key, measurementId;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n if (!(options && options.global)) return [3 /*break*/, 1];\r\n flatProperties = {};\r\n for (_i = 0, _a = Object.keys(properties); _i < _a.length; _i++) {\r\n key = _a[_i];\r\n // use dot notation for merge behavior in gtag.js\r\n flatProperties[\"user_properties.\" + key] = properties[key];\r\n }\r\n gtagFunction(GtagCommand.SET, flatProperties);\r\n return [2 /*return*/, Promise.resolve()];\r\n case 1: return [4 /*yield*/, initializationPromise];\r\n case 2:\r\n measurementId = _b.sent();\r\n gtagFunction(GtagCommand.CONFIG, measurementId, {\r\n update: true,\r\n 'user_properties': properties\r\n });\r\n _b.label = 3;\r\n case 3: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * Set whether collection is enabled for this ID.\r\n *\r\n * @param enabled If true, collection is enabled for this ID.\r\n */\r\nfunction setAnalyticsCollectionEnabled(initializationPromise, enabled) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var measurementId;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, initializationPromise];\r\n case 1:\r\n measurementId = _a.sent();\r\n window[\"ga-disable-\" + measurementId] = !enabled;\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar logger = new Logger('@firebase/analytics');\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Inserts gtag script tag into the page to asynchronously download gtag.\r\n * @param dataLayerName Name of datalayer (most often the default, \"_dataLayer\").\r\n */\r\nfunction insertScriptTag(dataLayerName, measurementId) {\r\n var script = document.createElement('script');\r\n script.src = GTAG_URL + \"?l=\" + dataLayerName + \"&id=\" + measurementId;\r\n script.async = true;\r\n document.head.appendChild(script);\r\n}\r\n/**\r\n * Get reference to, or create, global datalayer.\r\n * @param dataLayerName Name of datalayer (most often the default, \"_dataLayer\").\r\n */\r\nfunction getOrCreateDataLayer(dataLayerName) {\r\n // Check for existing dataLayer and create if needed.\r\n var dataLayer = [];\r\n if (Array.isArray(window[dataLayerName])) {\r\n dataLayer = window[dataLayerName];\r\n }\r\n else {\r\n window[dataLayerName] = dataLayer;\r\n }\r\n return dataLayer;\r\n}\r\n/**\r\n * Wrapped gtag logic when gtag is called with 'config' command.\r\n *\r\n * @param gtagCore Basic gtag function that just appends to dataLayer.\r\n * @param initializationPromisesMap Map of appIds to their initialization promises.\r\n * @param dynamicConfigPromisesList Array of dynamic config fetch promises.\r\n * @param measurementIdToAppId Map of GA measurementIDs to corresponding Firebase appId.\r\n * @param measurementId GA Measurement ID to set config for.\r\n * @param gtagParams Gtag config params to set.\r\n */\r\nfunction gtagOnConfig(gtagCore, initializationPromisesMap, dynamicConfigPromisesList, measurementIdToAppId, measurementId, gtagParams) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var correspondingAppId, dynamicConfigResults, foundConfig, e_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n correspondingAppId = measurementIdToAppId[measurementId];\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 7, , 8]);\r\n if (!correspondingAppId) return [3 /*break*/, 3];\r\n return [4 /*yield*/, initializationPromisesMap[correspondingAppId]];\r\n case 2:\r\n _a.sent();\r\n return [3 /*break*/, 6];\r\n case 3: return [4 /*yield*/, Promise.all(dynamicConfigPromisesList)];\r\n case 4:\r\n dynamicConfigResults = _a.sent();\r\n foundConfig = dynamicConfigResults.find(function (config) { return config.measurementId === measurementId; });\r\n if (!foundConfig) return [3 /*break*/, 6];\r\n return [4 /*yield*/, initializationPromisesMap[foundConfig.appId]];\r\n case 5:\r\n _a.sent();\r\n _a.label = 6;\r\n case 6: return [3 /*break*/, 8];\r\n case 7:\r\n e_1 = _a.sent();\r\n logger.error(e_1);\r\n return [3 /*break*/, 8];\r\n case 8:\r\n gtagCore(GtagCommand.CONFIG, measurementId, gtagParams);\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * Wrapped gtag logic when gtag is called with 'event' command.\r\n *\r\n * @param gtagCore Basic gtag function that just appends to dataLayer.\r\n * @param initializationPromisesMap Map of appIds to their initialization promises.\r\n * @param dynamicConfigPromisesList Array of dynamic config fetch promises.\r\n * @param measurementId GA Measurement ID to log event to.\r\n * @param gtagParams Params to log with this event.\r\n */\r\nfunction gtagOnEvent(gtagCore, initializationPromisesMap, dynamicConfigPromisesList, measurementId, gtagParams) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var initializationPromisesToWaitFor, gaSendToList, dynamicConfigResults, _loop_1, _i, gaSendToList_1, sendToId, state_1, e_2;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n _a.trys.push([0, 4, , 5]);\r\n initializationPromisesToWaitFor = [];\r\n if (!(gtagParams && gtagParams['send_to'])) return [3 /*break*/, 2];\r\n gaSendToList = gtagParams['send_to'];\r\n // Make it an array if is isn't, so it can be dealt with the same way.\r\n if (!Array.isArray(gaSendToList)) {\r\n gaSendToList = [gaSendToList];\r\n }\r\n return [4 /*yield*/, Promise.all(dynamicConfigPromisesList)];\r\n case 1:\r\n dynamicConfigResults = _a.sent();\r\n _loop_1 = function (sendToId) {\r\n // Any fetched dynamic measurement ID that matches this 'send_to' ID\r\n var foundConfig = dynamicConfigResults.find(function (config) { return config.measurementId === sendToId; });\r\n var initializationPromise = foundConfig && initializationPromisesMap[foundConfig.appId];\r\n if (initializationPromise) {\r\n initializationPromisesToWaitFor.push(initializationPromise);\r\n }\r\n else {\r\n // Found an item in 'send_to' that is not associated\r\n // directly with an FID, possibly a group. Empty this array,\r\n // exit the loop early, and let it get populated below.\r\n initializationPromisesToWaitFor = [];\r\n return \"break\";\r\n }\r\n };\r\n for (_i = 0, gaSendToList_1 = gaSendToList; _i < gaSendToList_1.length; _i++) {\r\n sendToId = gaSendToList_1[_i];\r\n state_1 = _loop_1(sendToId);\r\n if (state_1 === \"break\")\r\n break;\r\n }\r\n _a.label = 2;\r\n case 2:\r\n // This will be unpopulated if there was no 'send_to' field , or\r\n // if not all entries in the 'send_to' field could be mapped to\r\n // a FID. In these cases, wait on all pending initialization promises.\r\n if (initializationPromisesToWaitFor.length === 0) {\r\n initializationPromisesToWaitFor = Object.values(initializationPromisesMap);\r\n }\r\n // Run core gtag function with args after all relevant initialization\r\n // promises have been resolved.\r\n return [4 /*yield*/, Promise.all(initializationPromisesToWaitFor)];\r\n case 3:\r\n // Run core gtag function with args after all relevant initialization\r\n // promises have been resolved.\r\n _a.sent();\r\n // Workaround for http://b/141370449 - third argument cannot be undefined.\r\n gtagCore(GtagCommand.EVENT, measurementId, gtagParams || {});\r\n return [3 /*break*/, 5];\r\n case 4:\r\n e_2 = _a.sent();\r\n logger.error(e_2);\r\n return [3 /*break*/, 5];\r\n case 5: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * Wraps a standard gtag function with extra code to wait for completion of\r\n * relevant initialization promises before sending requests.\r\n *\r\n * @param gtagCore Basic gtag function that just appends to dataLayer.\r\n * @param initializationPromisesMap Map of appIds to their initialization promises.\r\n * @param dynamicConfigPromisesList Array of dynamic config fetch promises.\r\n * @param measurementIdToAppId Map of GA measurementIDs to corresponding Firebase appId.\r\n */\r\nfunction wrapGtag(gtagCore, \r\n/**\r\n * Allows wrapped gtag calls to wait on whichever intialization promises are required,\r\n * depending on the contents of the gtag params' `send_to` field, if any.\r\n */\r\ninitializationPromisesMap, \r\n/**\r\n * Wrapped gtag calls sometimes require all dynamic config fetches to have returned\r\n * before determining what initialization promises (which include FIDs) to wait for.\r\n */\r\ndynamicConfigPromisesList, \r\n/**\r\n * Wrapped gtag config calls can narrow down which initialization promise (with FID)\r\n * to wait for if the measurementId is already fetched, by getting the corresponding appId,\r\n * which is the key for the initialization promises map.\r\n */\r\nmeasurementIdToAppId) {\r\n /**\r\n * Wrapper around gtag that ensures FID is sent with gtag calls.\r\n * @param command Gtag command type.\r\n * @param idOrNameOrParams Measurement ID if command is EVENT/CONFIG, params if command is SET.\r\n * @param gtagParams Params if event is EVENT/CONFIG.\r\n */\r\n function gtagWrapper(command, idOrNameOrParams, gtagParams) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var e_3;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n _a.trys.push([0, 6, , 7]);\r\n if (!(command === GtagCommand.EVENT)) return [3 /*break*/, 2];\r\n // If EVENT, second arg must be measurementId.\r\n return [4 /*yield*/, gtagOnEvent(gtagCore, initializationPromisesMap, dynamicConfigPromisesList, idOrNameOrParams, gtagParams)];\r\n case 1:\r\n // If EVENT, second arg must be measurementId.\r\n _a.sent();\r\n return [3 /*break*/, 5];\r\n case 2:\r\n if (!(command === GtagCommand.CONFIG)) return [3 /*break*/, 4];\r\n // If CONFIG, second arg must be measurementId.\r\n return [4 /*yield*/, gtagOnConfig(gtagCore, initializationPromisesMap, dynamicConfigPromisesList, measurementIdToAppId, idOrNameOrParams, gtagParams)];\r\n case 3:\r\n // If CONFIG, second arg must be measurementId.\r\n _a.sent();\r\n return [3 /*break*/, 5];\r\n case 4:\r\n // If SET, second arg must be params.\r\n gtagCore(GtagCommand.SET, idOrNameOrParams);\r\n _a.label = 5;\r\n case 5: return [3 /*break*/, 7];\r\n case 6:\r\n e_3 = _a.sent();\r\n logger.error(e_3);\r\n return [3 /*break*/, 7];\r\n case 7: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n }\r\n return gtagWrapper;\r\n}\r\n/**\r\n * Creates global gtag function or wraps existing one if found.\r\n * This wrapped function attaches Firebase instance ID (FID) to gtag 'config' and\r\n * 'event' calls that belong to the GAID associated with this Firebase instance.\r\n *\r\n * @param initializationPromisesMap Map of appIds to their initialization promises.\r\n * @param dynamicConfigPromisesList Array of dynamic config fetch promises.\r\n * @param measurementIdToAppId Map of GA measurementIDs to corresponding Firebase appId.\r\n * @param dataLayerName Name of global GA datalayer array.\r\n * @param gtagFunctionName Name of global gtag function (\"gtag\" if not user-specified).\r\n */\r\nfunction wrapOrCreateGtag(initializationPromisesMap, dynamicConfigPromisesList, measurementIdToAppId, dataLayerName, gtagFunctionName) {\r\n // Create a basic core gtag function\r\n var gtagCore = function () {\r\n var _args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n _args[_i] = arguments[_i];\r\n }\r\n // Must push IArguments object, not an array.\r\n window[dataLayerName].push(arguments);\r\n };\r\n // Replace it with existing one if found\r\n if (window[gtagFunctionName] &&\r\n typeof window[gtagFunctionName] === 'function') {\r\n // @ts-ignore\r\n gtagCore = window[gtagFunctionName];\r\n }\r\n window[gtagFunctionName] = wrapGtag(gtagCore, initializationPromisesMap, dynamicConfigPromisesList, measurementIdToAppId);\r\n return {\r\n gtagCore: gtagCore,\r\n wrappedGtag: window[gtagFunctionName]\r\n };\r\n}\r\n/**\r\n * Returns first script tag in DOM matching our gtag url pattern.\r\n */\r\nfunction findGtagScriptOnPage() {\r\n var scriptTags = window.document.getElementsByTagName('script');\r\n for (var _i = 0, _a = Object.values(scriptTags); _i < _a.length; _i++) {\r\n var tag = _a[_i];\r\n if (tag.src && tag.src.includes(GTAG_URL)) {\r\n return tag;\r\n }\r\n }\r\n return null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar _a;\r\nvar ERRORS = (_a = {},\r\n _a[\"already-exists\" /* ALREADY_EXISTS */] = 'A Firebase Analytics instance with the appId {$id} ' +\r\n ' already exists. ' +\r\n 'Only one Firebase Analytics instance can be created for each appId.',\r\n _a[\"already-initialized\" /* ALREADY_INITIALIZED */] = 'Firebase Analytics has already been initialized.' +\r\n 'settings() must be called before initializing any Analytics instance' +\r\n 'or it will have no effect.',\r\n _a[\"interop-component-reg-failed\" /* INTEROP_COMPONENT_REG_FAILED */] = 'Firebase Analytics Interop Component failed to instantiate: {$reason}',\r\n _a[\"invalid-analytics-context\" /* INVALID_ANALYTICS_CONTEXT */] = 'Firebase Analytics is not supported in this environment. ' +\r\n 'Wrap initialization of analytics in analytics.isSupported() ' +\r\n 'to prevent initialization in unsupported environments. Details: {$errorInfo}',\r\n _a[\"indexeddb-unavailable\" /* INDEXEDDB_UNAVAILABLE */] = 'IndexedDB unavailable or restricted in this environment. ' +\r\n 'Wrap initialization of analytics in analytics.isSupported() ' +\r\n 'to prevent initialization in unsupported environments. Details: {$errorInfo}',\r\n _a[\"fetch-throttle\" /* FETCH_THROTTLE */] = 'The config fetch request timed out while in an exponential backoff state.' +\r\n ' Unix timestamp in milliseconds when fetch request throttling ends: {$throttleEndTimeMillis}.',\r\n _a[\"config-fetch-failed\" /* CONFIG_FETCH_FAILED */] = 'Dynamic config fetch failed: [{$httpStatus}] {$responseMessage}',\r\n _a[\"no-api-key\" /* NO_API_KEY */] = 'The \"apiKey\" field is empty in the local Firebase config. Firebase Analytics requires this field to' +\r\n 'contain a valid API key.',\r\n _a[\"no-app-id\" /* NO_APP_ID */] = 'The \"appId\" field is empty in the local Firebase config. Firebase Analytics requires this field to' +\r\n 'contain a valid app ID.',\r\n _a);\r\nvar ERROR_FACTORY = new ErrorFactory('analytics', 'Analytics', ERRORS);\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Backoff factor for 503 errors, which we want to be conservative about\r\n * to avoid overloading servers. Each retry interval will be\r\n * BASE_INTERVAL_MILLIS * LONG_RETRY_FACTOR ^ retryCount, so the second one\r\n * will be ~30 seconds (with fuzzing).\r\n */\r\nvar LONG_RETRY_FACTOR = 30;\r\n/**\r\n * Base wait interval to multiplied by backoffFactor^backoffCount.\r\n */\r\nvar BASE_INTERVAL_MILLIS = 1000;\r\n/**\r\n * Stubbable retry data storage class.\r\n */\r\nvar RetryData = /** @class */ (function () {\r\n function RetryData(throttleMetadata, intervalMillis) {\r\n if (throttleMetadata === void 0) { throttleMetadata = {}; }\r\n if (intervalMillis === void 0) { intervalMillis = BASE_INTERVAL_MILLIS; }\r\n this.throttleMetadata = throttleMetadata;\r\n this.intervalMillis = intervalMillis;\r\n }\r\n RetryData.prototype.getThrottleMetadata = function (appId) {\r\n return this.throttleMetadata[appId];\r\n };\r\n RetryData.prototype.setThrottleMetadata = function (appId, metadata) {\r\n this.throttleMetadata[appId] = metadata;\r\n };\r\n RetryData.prototype.deleteThrottleMetadata = function (appId) {\r\n delete this.throttleMetadata[appId];\r\n };\r\n return RetryData;\r\n}());\r\nvar defaultRetryData = new RetryData();\r\n/**\r\n * Set GET request headers.\r\n * @param apiKey App API key.\r\n */\r\nfunction getHeaders(apiKey) {\r\n return new Headers({\r\n Accept: 'application/json',\r\n 'x-goog-api-key': apiKey\r\n });\r\n}\r\n/**\r\n * Fetches dynamic config from backend.\r\n * @param app Firebase app to fetch config for.\r\n */\r\nfunction fetchDynamicConfig(appFields) {\r\n var _a;\r\n return __awaiter(this, void 0, void 0, function () {\r\n var appId, apiKey, request, appUrl, response, errorMessage, jsonResponse;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n appId = appFields.appId, apiKey = appFields.apiKey;\r\n request = {\r\n method: 'GET',\r\n headers: getHeaders(apiKey)\r\n };\r\n appUrl = DYNAMIC_CONFIG_URL.replace('{app-id}', appId);\r\n return [4 /*yield*/, fetch(appUrl, request)];\r\n case 1:\r\n response = _b.sent();\r\n if (!(response.status !== 200 && response.status !== 304)) return [3 /*break*/, 6];\r\n errorMessage = '';\r\n _b.label = 2;\r\n case 2:\r\n _b.trys.push([2, 4, , 5]);\r\n return [4 /*yield*/, response.json()];\r\n case 3:\r\n jsonResponse = (_b.sent());\r\n if ((_a = jsonResponse.error) === null || _a === void 0 ? void 0 : _a.message) {\r\n errorMessage = jsonResponse.error.message;\r\n }\r\n return [3 /*break*/, 5];\r\n case 4:\r\n _b.sent();\r\n return [3 /*break*/, 5];\r\n case 5: throw ERROR_FACTORY.create(\"config-fetch-failed\" /* CONFIG_FETCH_FAILED */, {\r\n httpStatus: response.status,\r\n responseMessage: errorMessage\r\n });\r\n case 6: return [2 /*return*/, response.json()];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * Fetches dynamic config from backend, retrying if failed.\r\n * @param app Firebase app to fetch config for.\r\n */\r\nfunction fetchDynamicConfigWithRetry(app, \r\n// retryData and timeoutMillis are parameterized to allow passing a different value for testing.\r\nretryData, timeoutMillis) {\r\n if (retryData === void 0) { retryData = defaultRetryData; }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, appId, apiKey, measurementId, throttleMetadata, signal;\r\n var _this = this;\r\n return __generator(this, function (_b) {\r\n _a = app.options, appId = _a.appId, apiKey = _a.apiKey, measurementId = _a.measurementId;\r\n if (!appId) {\r\n throw ERROR_FACTORY.create(\"no-app-id\" /* NO_APP_ID */);\r\n }\r\n if (!apiKey) {\r\n if (measurementId) {\r\n return [2 /*return*/, {\r\n measurementId: measurementId,\r\n appId: appId\r\n }];\r\n }\r\n throw ERROR_FACTORY.create(\"no-api-key\" /* NO_API_KEY */);\r\n }\r\n throttleMetadata = retryData.getThrottleMetadata(appId) || {\r\n backoffCount: 0,\r\n throttleEndTimeMillis: Date.now()\r\n };\r\n signal = new AnalyticsAbortSignal();\r\n setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n // Note a very low delay, eg < 10ms, can elapse before listeners are initialized.\r\n signal.abort();\r\n return [2 /*return*/];\r\n });\r\n }); }, timeoutMillis !== undefined ? timeoutMillis : FETCH_TIMEOUT_MILLIS);\r\n return [2 /*return*/, attemptFetchDynamicConfigWithRetry({ appId: appId, apiKey: apiKey, measurementId: measurementId }, throttleMetadata, signal, retryData)];\r\n });\r\n });\r\n}\r\n/**\r\n * Runs one retry attempt.\r\n * @param appFields Necessary app config fields.\r\n * @param throttleMetadata Ongoing metadata to determine throttling times.\r\n * @param signal Abort signal.\r\n */\r\nfunction attemptFetchDynamicConfigWithRetry(appFields, _a, signal, retryData // for testing\r\n) {\r\n var throttleEndTimeMillis = _a.throttleEndTimeMillis, backoffCount = _a.backoffCount;\r\n if (retryData === void 0) { retryData = defaultRetryData; }\r\n return __awaiter(this, void 0, void 0, function () {\r\n var appId, measurementId, e_1, response, e_2, backoffMillis, throttleMetadata;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n appId = appFields.appId, measurementId = appFields.measurementId;\r\n _b.label = 1;\r\n case 1:\r\n _b.trys.push([1, 3, , 4]);\r\n return [4 /*yield*/, setAbortableTimeout(signal, throttleEndTimeMillis)];\r\n case 2:\r\n _b.sent();\r\n return [3 /*break*/, 4];\r\n case 3:\r\n e_1 = _b.sent();\r\n if (measurementId) {\r\n logger.warn(\"Timed out fetching this Firebase app's measurement ID from the server.\" +\r\n (\" Falling back to the measurement ID \" + measurementId) +\r\n (\" provided in the \\\"measurementId\\\" field in the local Firebase config. [\" + e_1.message + \"]\"));\r\n return [2 /*return*/, { appId: appId, measurementId: measurementId }];\r\n }\r\n throw e_1;\r\n case 4:\r\n _b.trys.push([4, 6, , 7]);\r\n return [4 /*yield*/, fetchDynamicConfig(appFields)];\r\n case 5:\r\n response = _b.sent();\r\n // Note the SDK only clears throttle state if response is success or non-retriable.\r\n retryData.deleteThrottleMetadata(appId);\r\n return [2 /*return*/, response];\r\n case 6:\r\n e_2 = _b.sent();\r\n if (!isRetriableError(e_2)) {\r\n retryData.deleteThrottleMetadata(appId);\r\n if (measurementId) {\r\n logger.warn(\"Failed to fetch this Firebase app's measurement ID from the server.\" +\r\n (\" Falling back to the measurement ID \" + measurementId) +\r\n (\" provided in the \\\"measurementId\\\" field in the local Firebase config. [\" + e_2.message + \"]\"));\r\n return [2 /*return*/, { appId: appId, measurementId: measurementId }];\r\n }\r\n else {\r\n throw e_2;\r\n }\r\n }\r\n backoffMillis = Number(e_2.customData.httpStatus) === 503\r\n ? calculateBackoffMillis(backoffCount, retryData.intervalMillis, LONG_RETRY_FACTOR)\r\n : calculateBackoffMillis(backoffCount, retryData.intervalMillis);\r\n throttleMetadata = {\r\n throttleEndTimeMillis: Date.now() + backoffMillis,\r\n backoffCount: backoffCount + 1\r\n };\r\n // Persists state.\r\n retryData.setThrottleMetadata(appId, throttleMetadata);\r\n logger.debug(\"Calling attemptFetch again in \" + backoffMillis + \" millis\");\r\n return [2 /*return*/, attemptFetchDynamicConfigWithRetry(appFields, throttleMetadata, signal, retryData)];\r\n case 7: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * Supports waiting on a backoff by:\r\n *\r\n * \r\n *\r\n *

Visible for testing.\r\n */\r\nfunction setAbortableTimeout(signal, throttleEndTimeMillis) {\r\n return new Promise(function (resolve, reject) {\r\n // Derives backoff from given end time, normalizing negative numbers to zero.\r\n var backoffMillis = Math.max(throttleEndTimeMillis - Date.now(), 0);\r\n var timeout = setTimeout(resolve, backoffMillis);\r\n // Adds listener, rather than sets onabort, because signal is a shared object.\r\n signal.addEventListener(function () {\r\n clearTimeout(timeout);\r\n // If the request completes before this timeout, the rejection has no effect.\r\n reject(ERROR_FACTORY.create(\"fetch-throttle\" /* FETCH_THROTTLE */, {\r\n throttleEndTimeMillis: throttleEndTimeMillis\r\n }));\r\n });\r\n });\r\n}\r\n/**\r\n * Returns true if the {@link Error} indicates a fetch request may succeed later.\r\n */\r\nfunction isRetriableError(e) {\r\n if (!(e instanceof FirebaseError) || !e.customData) {\r\n return false;\r\n }\r\n // Uses string index defined by ErrorData, which FirebaseError implements.\r\n var httpStatus = Number(e.customData['httpStatus']);\r\n return (httpStatus === 429 ||\r\n httpStatus === 500 ||\r\n httpStatus === 503 ||\r\n httpStatus === 504);\r\n}\r\n/**\r\n * Shims a minimal AbortSignal (copied from Remote Config).\r\n *\r\n *

AbortController's AbortSignal conveniently decouples fetch timeout logic from other aspects\r\n * of networking, such as retries. Firebase doesn't use AbortController enough to justify a\r\n * polyfill recommendation, like we do with the Fetch API, but this minimal shim can easily be\r\n * swapped out if/when we do.\r\n */\r\nvar AnalyticsAbortSignal = /** @class */ (function () {\r\n function AnalyticsAbortSignal() {\r\n this.listeners = [];\r\n }\r\n AnalyticsAbortSignal.prototype.addEventListener = function (listener) {\r\n this.listeners.push(listener);\r\n };\r\n AnalyticsAbortSignal.prototype.abort = function () {\r\n this.listeners.forEach(function (listener) { return listener(); });\r\n };\r\n return AnalyticsAbortSignal;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction validateIndexedDB() {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var e_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!!isIndexedDBAvailable()) return [3 /*break*/, 1];\r\n logger.warn(ERROR_FACTORY.create(\"indexeddb-unavailable\" /* INDEXEDDB_UNAVAILABLE */, {\r\n errorInfo: 'IndexedDB is not available in this environment.'\r\n }).message);\r\n return [2 /*return*/, false];\r\n case 1:\r\n _a.trys.push([1, 3, , 4]);\r\n return [4 /*yield*/, validateIndexedDBOpenable()];\r\n case 2:\r\n _a.sent();\r\n return [3 /*break*/, 4];\r\n case 3:\r\n e_1 = _a.sent();\r\n logger.warn(ERROR_FACTORY.create(\"indexeddb-unavailable\" /* INDEXEDDB_UNAVAILABLE */, {\r\n errorInfo: e_1\r\n }).message);\r\n return [2 /*return*/, false];\r\n case 4: return [2 /*return*/, true];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * Initialize the analytics instance in gtag.js by calling config command with fid.\r\n *\r\n * NOTE: We combine analytics initialization and setting fid together because we want fid to be\r\n * part of the `page_view` event that's sent during the initialization\r\n * @param app Firebase app\r\n * @param gtagCore The gtag function that's not wrapped.\r\n * @param dynamicConfigPromisesList Array of all dynamic config promises.\r\n * @param measurementIdToAppId Maps measurementID to appID.\r\n * @param installations FirebaseInstallations instance.\r\n *\r\n * @returns Measurement ID.\r\n */\r\nfunction initializeIds(app, dynamicConfigPromisesList, measurementIdToAppId, installations, gtagCore, dataLayerName) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var dynamicConfigPromise, fidPromise, _a, dynamicConfig, fid, configProperties;\r\n var _b;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n dynamicConfigPromise = fetchDynamicConfigWithRetry(app);\r\n // Once fetched, map measurementIds to appId, for ease of lookup in wrapped gtag function.\r\n dynamicConfigPromise\r\n .then(function (config) {\r\n measurementIdToAppId[config.measurementId] = config.appId;\r\n if (app.options.measurementId &&\r\n config.measurementId !== app.options.measurementId) {\r\n logger.warn(\"The measurement ID in the local Firebase config (\" + app.options.measurementId + \")\" +\r\n (\" does not match the measurement ID fetched from the server (\" + config.measurementId + \").\") +\r\n \" To ensure analytics events are always sent to the correct Analytics property,\" +\r\n \" update the\" +\r\n \" measurement ID field in the local config or remove it from the local config.\");\r\n }\r\n })\r\n .catch(function (e) { return logger.error(e); });\r\n // Add to list to track state of all dynamic config promises.\r\n dynamicConfigPromisesList.push(dynamicConfigPromise);\r\n fidPromise = validateIndexedDB().then(function (envIsValid) {\r\n if (envIsValid) {\r\n return installations.getId();\r\n }\r\n else {\r\n return undefined;\r\n }\r\n });\r\n return [4 /*yield*/, Promise.all([\r\n dynamicConfigPromise,\r\n fidPromise\r\n ])];\r\n case 1:\r\n _a = _c.sent(), dynamicConfig = _a[0], fid = _a[1];\r\n // Detect if user has already put the gtag