{"version":3,"sources":["webpack:///./node_modules/@firebase/performance/dist/index.esm.js","webpack:///./node_modules/@firebase/messaging/dist/index.esm.js"],"names":["_a","apiInstance","windowInstance","name","version","SDK_VERSION","TRACE_START_MARK_PREFIX","TRACE_STOP_MARK_PREFIX","TRACE_MEASURE_PREFIX","OOB_TRACE_PAGE_LOAD_PREFIX","FIRST_PAINT_COUNTER_NAME","FIRST_CONTENTFUL_PAINT_COUNTER_NAME","FIRST_INPUT_DELAY_COUNTER_NAME","CONFIG_LOCAL_STORAGE_KEY","CONFIG_EXPIRY_LOCAL_STORAGE_KEY","SERVICE","SERVICE_NAME","ERROR_DESCRIPTION_MAP","ERROR_FACTORY","consoleLogger","logLevel","INFO","settingsServiceInstance","Api","window","this","create","performance","PerformanceObserver","windowLocation","location","navigator","document","cookieEnabled","localStorage","perfMetrics","onFirstInputDelay","prototype","getUrl","href","split","mark","measure","measureName","mark1","mark2","getEntriesByType","type","getEntriesByName","getTimeOrigin","timeOrigin","timing","navigationStart","requiredApisAvailable","fetch","Promise","info","setupObserver","entryType","callback","observer","list","_i","getEntries","length","entry","observe","entryTypes","getInstance","undefined","setupApi","mergeStrings","part1","part2","sizeDiff","resultArray","i","push","charAt","join","iid","VisibilityState","SettingsService","instrumentationEnabled","dataCollectionEnabled","loggingEnabled","tracesSamplingRate","networkRequestsSamplingRate","logEndPointUrl","flTransportEndpointUrl","transportKey","logSource","logTraceAfterSampling","logNetworkAfterSampling","configTimeToLive","getAppId","appId","firebaseAppInstance","options","getProjectId","projectId","getApiKey","apiKey","getFlTransportFullUrl","concat","getIidPromise","iidPromise","installationsService","getId","then","iidVal","getIid","getAuthTokenPromise","authTokenPromise","getToken","authTokenVal","RESERVED_ATTRIBUTE_PREFIXES","ATTRIBUTE_FORMAT_REGEX","RegExp","MAX_ATTRIBUTE_NAME_LENGTH","MAX_ATTRIBUTE_VALUE_LENGTH","getServiceWorkerStatus","serviceWorker","controller","getVisibilityState","visibilityState","VISIBLE","HIDDEN","UNKNOWN","getEffectiveConnectionType","navigatorConnection","connection","effectiveType","isValidCustomAttributeName","matchesReservedPrefix","some","prefix","startsWith","match","isValidCustomAttributeValue","value","REMOTE_CONFIG_SDK_VERSION","DEFAULT_CONFIGS","FIS_AUTH_PREFIX","getConfig","config","getStoredConfig","processConfig","resolve","getRemoteConfig","storeConfig","expiryString","getItem","configValid","configStringified","configResponse","JSON","parse","setItem","stringify","String","Date","now","COULD_NOT_GET_CONFIG_MSG","authToken","configEndPoint","request","Request","method","headers","Authorization","body","app_instance_id","app_instance_id_token","app_id","app_version","sdk_version","response","ok","json","catch","entries","fpr_enabled","fpr_log_source","Number","fpr_log_endpoint_url","fpr_log_transport_key","fpr_vc_network_request_sampling_rate","fpr_vc_trace_sampling_rate","shouldLogAfterSampling","expiry","samplingRate","Math","random","initializationPromise","initializationStatus","getInitializationPromise","initializePerf","isPerfInitialized","getDocumentReadyComplete","changeInitializationStatus","readyState","handler_1","removeEventListener","addEventListener","logger","DEFAULT_SEND_INTERVAL_MS","INITIAL_SEND_TIME_DELAY_MS","DEFAULT_REMAINING_TRIES","MAX_EVENT_COUNT_PER_REQUEST","remainingTries","queue","isTransportSetup","setupTransportService","processQueue","timeOffset","setTimeout","dispatchQueueEvents","staged","splice","log_event","map","evt","source_extension_json_proto3","message","event_time_ms","eventTime","data","request_time_ms","client_info","client_type","js_client_info","log_source","sendEventsToFl","postToFlEndpoint","res","transportWait","nextRequestWaitMillis","requestOffset","isNaN","max","logResponseDetails","Array","isArray","responseAction","flTransportFullUrl","addToQueue","transportHandler","serializer","args","arguments","apply","sendLog","resource","resourceType","logTrace","trace","settingsService","isAuto","sendTraceLog","logNetworkRequest","networkRequest","networkRequestUrl","url","logEndpointUrl","flEndpointUrl","serializeNetworkRequest","serializeTrace","networkRequestMetric","http_method","httpMethod","http_response_code","response_payload_bytes","responsePayloadBytes","client_start_time_us","startTimeUs","time_to_response_initiated_us","timeToResponseInitiatedUs","time_to_response_completed_us","timeToResponseCompletedUs","perfMetric","application_info","getApplicationInfo","network_request_metric","traceMetric","is_auto","duration_us","durationUs","Object","keys","counters","customAttributes","getAttributes","custom_attributes","trace_metric","google_app_id","web_app_info","page_url","service_worker_status","visibility_state","effective_connection_type","application_process_state","MAX_METRIC_NAME_LENGTH","RESERVED_AUTO_PREFIX","oobMetrics","isValidMetricName","traceName","indexOf","convertMetricValueToInteger","providedValue","valueAsInteger","floor","Trace","traceMeasureName","state","api","randomId","traceStartMark","traceStopMark","traceMeasure","calculateTraceMetrics","start","stop","record","startTime","duration","attributes","metrics","metric","incrementMetric","counter","numAsInteger","putMetric","customMetricName","getMetric","putAttribute","attr","isValidName","isValidValue","attributeName","attributeValue","getAttribute","removeAttribute","setStartTime","setDuration","perfMeasureEntries","perfMeasureEntry","createOobTrace","navigationTimings","paintTimings","firstInputDelay","route","timeOriginUs","domInteractive","domContentLoadedEventEnd","loadEventEnd","FIRST_PAINT","FIRST_CONTENTFUL_PAINT","firstPaint","find","paintObject","firstContentfulPaint","createUserTimingTrace","createNetworkRequestEntry","performanceEntry","responseStart","responseEnd","transferSize","FID_WAIT_TIME_MS","setupOobResources","setupOobTraces","setupNetworkRequests","setupUserTimingTraces","resources","resources_1","timeoutId_1","fid","clearTimeout","measures","measures_1","substring","PerformanceController","app","isAvailable","error","defineProperty","get","set","val","enumerable","configurable","DEFAULT_ENTRY_NAME","registerPerformance","instance","factoryMethod","installations","INTERNAL","registerComponent","container","getProvider","getImmediate","registerVersion","MessageType","ERROR_MAP","DEFAULT_SW_PATH","DEFAULT_SW_SCOPE","DEFAULT_VAPID_KEY","ENDPOINT","FCM_MSG","TAG","CONSOLE_CAMPAIGN_ANALYTICS_ENABLED","CONSOLE_CAMPAIGN_ID","CONSOLE_CAMPAIGN_TIME","CONSOLE_CAMPAIGN_NAME","BACKGROUND_HANDLE_EXECUTION_TIME_LIMIT_MS","FOREGROUND_HANDLE_PREPARATION_TIME_MS","arrayToBase64","array","uint8Array","Uint8Array","base64String","btoa","fromCharCode","replace","base64ToArray","padding","repeat","base64","rawData","atob","outputArray","charCodeAt","OLD_DB_NAME","OLD_DB_VERSION","OLD_OBJECT_STORE_NAME","migrateOldDatabase","senderId","databases","dbNames","tokenDetails","db","_this","label","indexedDB","sent","includes","objectStore","oldDetails","_b","oldVersion","objectStoreNames","contains","transaction","index","clear","auth","p256dh","endpoint","token","fcmToken","createTime","subscriptionOptions","swScope","vapidKey","close","checkTokenDetails","DATABASE_NAME","DATABASE_VERSION","OBJECT_STORE_NAME","dbPromise","getDbPromise","upgradeDb","createObjectStore","dbGet","firebaseDependencies","key","oldTokenDetails","getKey","appConfig","dbSet","tx","put","complete","dbRemove","delete","requestGetToken","subscribeOptions","responseData","err_1","getHeaders","getBody","trys","getEndpoint","errorInfo","requestUpdateToken","updateOptions","err_2","requestDeleteToken","unsubscribeOptions","err_3","Headers","Accept","web","applicationPubKey","TOKEN_EXPIRATION_MS","swRegistration","pushSubscription","e_1","Notification","permission","getPushSubscription","scope","getNewToken","isTokenValid","console","warn","updateToken","deleteToken","pushManager","getSubscription","unsubscribe","updatedToken","updatedTokenDetails","e_2","subscription","subscribe","userVisibleOnly","applicationServerKey","dbOptions","currentOptions","isVapidKeyEqual","isEndpointEqual","isAuthEqual","isP256dhEqual","externalizePayload","internalPayload","payload","from","collapseKey","collapse_key","messageId","fcm_message_id","propagateNotificationPayload","propagateDataPayload","propagateFcmOptions","messagePayloadInternal","notification","title","image","fcmOptions","link","analyticsLabel","analytics_label","isConsoleMessage","sleep","ms","SwController","isOnBackgroundMessageUsed","bgMessageHandler","self","e","waitUntil","onPush","onSubChange","onNotificationClick","setBackgroundMessageHandler","onBackgroundMessage","nextOrObserver","_c","registration","requestPermission","usePublicVapidKey","useServiceWorker","onMessage","onTokenRefresh","event","clientList","isNotificationShown","getMessagePayloadInternal","getClientList","debug","hasVisibleClients","sendMessagePayloadInternalToWindows","showNotification","wrapInternalPayload","next","newSubscription","originUrl","client","action","stopImmediatePropagation","getLink","URL","origin","host","getWindowClient","clients","openWindow","focus","messageType","NOTIFICATION_CLICKED","isFirebaseMessaging","postMessage","wrappedInternalPayload","err","clientList_1","clientList_1_1","clientUrl","done","e_1_1","return","call","PUSH_RECEIVED","clientList_2","clientList_2_1","e_2_1","matchAll","includeUncontrolled","notificationPayloadInternal","actions","maxActions","click_action","WindowController","onMessageCallback","messageEventListener","dataPayload","stripInternalFields","assign","logEvent","getVapidKey","getSwReg","updateVapidKey","updateSwReg","serviceWorkerRegistration","registerDefaultSw","ServiceWorkerRegistration","register","update","browserErrorMessage","permissionResult","eventType","analytics","getEventType","analyticsProvider","message_id","message_name","message_time","message_device_time","Error","extractAppConfig","getMissingValueError","configKeys","configKeys_1","configKeys_1_1","keyName","appName","messagingSenderId","valueName","MESSAGING_NAME","isSupported","NAMESPACE_EXPORTS","isSWControllerSupported","isWindowControllerSupported","hasOwnProperty","PushSubscription","setServiceProps"],"mappings":"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","file":"js/chunk-vendors~129f708e.6722d76f.js","sourcesContent":["import firebase from '@firebase/app';\nimport '@firebase/installations';\nimport { __spreadArray, __assign } from 'tslib';\nimport { ErrorFactory, isIndexedDBAvailable, validateIndexedDBOpenable } from '@firebase/util';\nimport { Logger, LogLevel } from '@firebase/logger';\nimport { Component } from '@firebase/component';\n\nvar name = \"@firebase/performance\";\nvar version = \"0.4.18\";\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 SDK_VERSION = version;\r\n/** The prefix for start User Timing marks used for creating Traces. */\r\nvar TRACE_START_MARK_PREFIX = 'FB-PERF-TRACE-START';\r\n/** The prefix for stop User Timing marks used for creating Traces. */\r\nvar TRACE_STOP_MARK_PREFIX = 'FB-PERF-TRACE-STOP';\r\n/** The prefix for User Timing measure used for creating Traces. */\r\nvar TRACE_MEASURE_PREFIX = 'FB-PERF-TRACE-MEASURE';\r\n/** The prefix for out of the box page load Trace name. */\r\nvar OOB_TRACE_PAGE_LOAD_PREFIX = '_wt_';\r\nvar FIRST_PAINT_COUNTER_NAME = '_fp';\r\nvar FIRST_CONTENTFUL_PAINT_COUNTER_NAME = '_fcp';\r\nvar FIRST_INPUT_DELAY_COUNTER_NAME = '_fid';\r\nvar CONFIG_LOCAL_STORAGE_KEY = '@firebase/performance/config';\r\nvar CONFIG_EXPIRY_LOCAL_STORAGE_KEY = '@firebase/performance/configexpire';\r\nvar SERVICE = 'performance';\r\nvar SERVICE_NAME = 'Performance';\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 ERROR_DESCRIPTION_MAP = (_a = {},\r\n _a[\"trace started\" /* TRACE_STARTED_BEFORE */] = 'Trace {$traceName} was started before.',\r\n _a[\"trace stopped\" /* TRACE_STOPPED_BEFORE */] = 'Trace {$traceName} is not running.',\r\n _a[\"nonpositive trace startTime\" /* NONPOSITIVE_TRACE_START_TIME */] = 'Trace {$traceName} startTime should be positive.',\r\n _a[\"nonpositive trace duration\" /* NONPOSITIVE_TRACE_DURATION */] = 'Trace {$traceName} duration should be positive.',\r\n _a[\"no window\" /* NO_WINDOW */] = 'Window is not available.',\r\n _a[\"no app id\" /* NO_APP_ID */] = 'App id is not available.',\r\n _a[\"no project id\" /* NO_PROJECT_ID */] = 'Project id is not available.',\r\n _a[\"no api key\" /* NO_API_KEY */] = 'Api key is not available.',\r\n _a[\"invalid cc log\" /* INVALID_CC_LOG */] = 'Attempted to queue invalid cc event',\r\n _a[\"FB not default\" /* FB_NOT_DEFAULT */] = 'Performance can only start when Firebase app instance is the default one.',\r\n _a[\"RC response not ok\" /* RC_NOT_OK */] = 'RC response is not ok',\r\n _a[\"invalid attribute name\" /* INVALID_ATTRIBUTE_NAME */] = 'Attribute name {$attributeName} is invalid.',\r\n _a[\"invalid attribute value\" /* INVALID_ATTRIBUTE_VALUE */] = 'Attribute value {$attributeValue} is invalid.',\r\n _a[\"invalid custom metric name\" /* INVALID_CUSTOM_METRIC_NAME */] = 'Custom metric name {$customMetricName} is invalid',\r\n _a[\"invalid String merger input\" /* INVALID_STRING_MERGER_PARAMETER */] = 'Input for String merger is invalid, contact support team to resolve.',\r\n _a);\r\nvar ERROR_FACTORY = new ErrorFactory(SERVICE, SERVICE_NAME, ERROR_DESCRIPTION_MAP);\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 consoleLogger = new Logger(SERVICE_NAME);\r\nconsoleLogger.logLevel = LogLevel.INFO;\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 apiInstance;\r\nvar windowInstance;\r\n/**\r\n * This class holds a reference to various browser related objects injected by\r\n * set methods.\r\n */\r\nvar Api = /** @class */ (function () {\r\n function Api(window) {\r\n this.window = window;\r\n if (!window) {\r\n throw ERROR_FACTORY.create(\"no window\" /* NO_WINDOW */);\r\n }\r\n this.performance = window.performance;\r\n this.PerformanceObserver = window.PerformanceObserver;\r\n this.windowLocation = window.location;\r\n this.navigator = window.navigator;\r\n this.document = window.document;\r\n if (this.navigator && this.navigator.cookieEnabled) {\r\n // If user blocks cookies on the browser, accessing localStorage will\r\n // throw an exception.\r\n this.localStorage = window.localStorage;\r\n }\r\n if (window.perfMetrics && window.perfMetrics.onFirstInputDelay) {\r\n this.onFirstInputDelay = window.perfMetrics.onFirstInputDelay;\r\n }\r\n }\r\n Api.prototype.getUrl = function () {\r\n // Do not capture the string query part of url.\r\n return this.windowLocation.href.split('?')[0];\r\n };\r\n Api.prototype.mark = function (name) {\r\n if (!this.performance || !this.performance.mark) {\r\n return;\r\n }\r\n this.performance.mark(name);\r\n };\r\n Api.prototype.measure = function (measureName, mark1, mark2) {\r\n if (!this.performance || !this.performance.measure) {\r\n return;\r\n }\r\n this.performance.measure(measureName, mark1, mark2);\r\n };\r\n Api.prototype.getEntriesByType = function (type) {\r\n if (!this.performance || !this.performance.getEntriesByType) {\r\n return [];\r\n }\r\n return this.performance.getEntriesByType(type);\r\n };\r\n Api.prototype.getEntriesByName = function (name) {\r\n if (!this.performance || !this.performance.getEntriesByName) {\r\n return [];\r\n }\r\n return this.performance.getEntriesByName(name);\r\n };\r\n Api.prototype.getTimeOrigin = function () {\r\n // Polyfill the time origin with performance.timing.navigationStart.\r\n return (this.performance &&\r\n (this.performance.timeOrigin || this.performance.timing.navigationStart));\r\n };\r\n Api.prototype.requiredApisAvailable = function () {\r\n if (!fetch ||\r\n !Promise ||\r\n !this.navigator ||\r\n !this.navigator.cookieEnabled) {\r\n consoleLogger.info('Firebase Performance cannot start if browser does not support fetch and Promise or cookie is disabled.');\r\n return false;\r\n }\r\n if (!isIndexedDBAvailable()) {\r\n consoleLogger.info('IndexedDB is not supported by current browswer');\r\n return false;\r\n }\r\n return true;\r\n };\r\n Api.prototype.setupObserver = function (entryType, callback) {\r\n if (!this.PerformanceObserver) {\r\n return;\r\n }\r\n var observer = new this.PerformanceObserver(function (list) {\r\n for (var _i = 0, _a = list.getEntries(); _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n // `entry` is a PerformanceEntry instance.\r\n callback(entry);\r\n }\r\n });\r\n // Start observing the entry types you care about.\r\n observer.observe({ entryTypes: [entryType] });\r\n };\r\n Api.getInstance = function () {\r\n if (apiInstance === undefined) {\r\n apiInstance = new Api(windowInstance);\r\n }\r\n return apiInstance;\r\n };\r\n return Api;\r\n}());\r\nfunction setupApi(window) {\r\n windowInstance = window;\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\nfunction mergeStrings(part1, part2) {\r\n var sizeDiff = part1.length - part2.length;\r\n if (sizeDiff < 0 || sizeDiff > 1) {\r\n throw ERROR_FACTORY.create(\"invalid String merger input\" /* INVALID_STRING_MERGER_PARAMETER */);\r\n }\r\n var resultArray = [];\r\n for (var i = 0; i < part1.length; i++) {\r\n resultArray.push(part1.charAt(i));\r\n if (part2.length > i) {\r\n resultArray.push(part2.charAt(i));\r\n }\r\n }\r\n return resultArray.join('');\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 settingsServiceInstance;\r\nvar SettingsService = /** @class */ (function () {\r\n function SettingsService() {\r\n // The variable which controls logging of automatic traces and HTTP/S network monitoring.\r\n this.instrumentationEnabled = true;\r\n // The variable which controls logging of custom traces.\r\n this.dataCollectionEnabled = true;\r\n // Configuration flags set through remote config.\r\n this.loggingEnabled = false;\r\n // Sampling rate between 0 and 1.\r\n this.tracesSamplingRate = 1;\r\n this.networkRequestsSamplingRate = 1;\r\n // Address of logging service.\r\n this.logEndPointUrl = 'https://firebaselogging.googleapis.com/v0cc/log?format=json_proto';\r\n // Performance event transport endpoint URL which should be compatible with proto3.\r\n // New Address for transport service, not configurable via Remote Config.\r\n this.flTransportEndpointUrl = mergeStrings('hts/frbslgigp.ogepscmv/ieo/eaylg', 'tp:/ieaeogn-agolai.o/1frlglgc/o');\r\n this.transportKey = mergeStrings('AzSC8r6ReiGqFMyfvgow', 'Iayx0u-XT3vksVM-pIV');\r\n // Source type for performance event logs.\r\n this.logSource = 462;\r\n // Flags which control per session logging of traces and network requests.\r\n this.logTraceAfterSampling = false;\r\n this.logNetworkAfterSampling = false;\r\n // TTL of config retrieved from remote config in hours.\r\n this.configTimeToLive = 12;\r\n }\r\n SettingsService.prototype.getAppId = function () {\r\n var appId = this.firebaseAppInstance &&\r\n this.firebaseAppInstance.options &&\r\n this.firebaseAppInstance.options.appId;\r\n if (!appId) {\r\n throw ERROR_FACTORY.create(\"no app id\" /* NO_APP_ID */);\r\n }\r\n return appId;\r\n };\r\n SettingsService.prototype.getProjectId = function () {\r\n var projectId = this.firebaseAppInstance &&\r\n this.firebaseAppInstance.options &&\r\n this.firebaseAppInstance.options.projectId;\r\n if (!projectId) {\r\n throw ERROR_FACTORY.create(\"no project id\" /* NO_PROJECT_ID */);\r\n }\r\n return projectId;\r\n };\r\n SettingsService.prototype.getApiKey = function () {\r\n var apiKey = this.firebaseAppInstance &&\r\n this.firebaseAppInstance.options &&\r\n this.firebaseAppInstance.options.apiKey;\r\n if (!apiKey) {\r\n throw ERROR_FACTORY.create(\"no api key\" /* NO_API_KEY */);\r\n }\r\n return apiKey;\r\n };\r\n SettingsService.prototype.getFlTransportFullUrl = function () {\r\n return this.flTransportEndpointUrl.concat('?key=', this.transportKey);\r\n };\r\n SettingsService.getInstance = function () {\r\n if (settingsServiceInstance === undefined) {\r\n settingsServiceInstance = new SettingsService();\r\n }\r\n return settingsServiceInstance;\r\n };\r\n return SettingsService;\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 iid;\r\nfunction getIidPromise() {\r\n var iidPromise = SettingsService.getInstance().installationsService.getId();\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n iidPromise.then(function (iidVal) {\r\n iid = iidVal;\r\n });\r\n return iidPromise;\r\n}\r\n// This method should be used after the iid is retrieved by getIidPromise method.\r\nfunction getIid() {\r\n return iid;\r\n}\r\nfunction getAuthTokenPromise() {\r\n var authTokenPromise = SettingsService.getInstance().installationsService.getToken();\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n authTokenPromise.then(function (authTokenVal) {\r\n });\r\n return authTokenPromise;\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 VisibilityState;\r\n(function (VisibilityState) {\r\n VisibilityState[VisibilityState[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\r\n VisibilityState[VisibilityState[\"VISIBLE\"] = 1] = \"VISIBLE\";\r\n VisibilityState[VisibilityState[\"HIDDEN\"] = 2] = \"HIDDEN\";\r\n})(VisibilityState || (VisibilityState = {}));\r\nvar RESERVED_ATTRIBUTE_PREFIXES = ['firebase_', 'google_', 'ga_'];\r\nvar ATTRIBUTE_FORMAT_REGEX = new RegExp('^[a-zA-Z]\\\\w*$');\r\nvar MAX_ATTRIBUTE_NAME_LENGTH = 40;\r\nvar MAX_ATTRIBUTE_VALUE_LENGTH = 100;\r\nfunction getServiceWorkerStatus() {\r\n var navigator = Api.getInstance().navigator;\r\n if ('serviceWorker' in navigator) {\r\n if (navigator.serviceWorker.controller) {\r\n return 2 /* CONTROLLED */;\r\n }\r\n else {\r\n return 3 /* UNCONTROLLED */;\r\n }\r\n }\r\n else {\r\n return 1 /* UNSUPPORTED */;\r\n }\r\n}\r\nfunction getVisibilityState() {\r\n var document = Api.getInstance().document;\r\n var visibilityState = document.visibilityState;\r\n switch (visibilityState) {\r\n case 'visible':\r\n return VisibilityState.VISIBLE;\r\n case 'hidden':\r\n return VisibilityState.HIDDEN;\r\n default:\r\n return VisibilityState.UNKNOWN;\r\n }\r\n}\r\nfunction getEffectiveConnectionType() {\r\n var navigator = Api.getInstance().navigator;\r\n var navigatorConnection = navigator.connection;\r\n var effectiveType = navigatorConnection && navigatorConnection.effectiveType;\r\n switch (effectiveType) {\r\n case 'slow-2g':\r\n return 1 /* CONNECTION_SLOW_2G */;\r\n case '2g':\r\n return 2 /* CONNECTION_2G */;\r\n case '3g':\r\n return 3 /* CONNECTION_3G */;\r\n case '4g':\r\n return 4 /* CONNECTION_4G */;\r\n default:\r\n return 0 /* UNKNOWN */;\r\n }\r\n}\r\nfunction isValidCustomAttributeName(name) {\r\n if (name.length === 0 || name.length > MAX_ATTRIBUTE_NAME_LENGTH) {\r\n return false;\r\n }\r\n var matchesReservedPrefix = RESERVED_ATTRIBUTE_PREFIXES.some(function (prefix) {\r\n return name.startsWith(prefix);\r\n });\r\n return !matchesReservedPrefix && !!name.match(ATTRIBUTE_FORMAT_REGEX);\r\n}\r\nfunction isValidCustomAttributeValue(value) {\r\n return value.length !== 0 && value.length <= MAX_ATTRIBUTE_VALUE_LENGTH;\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 REMOTE_CONFIG_SDK_VERSION = '0.0.1';\r\n// These values will be used if the remote config object is successfully\r\n// retrieved, but the template does not have these fields.\r\nvar DEFAULT_CONFIGS = {\r\n loggingEnabled: true\r\n};\r\nvar FIS_AUTH_PREFIX = 'FIREBASE_INSTALLATIONS_AUTH';\r\nfunction getConfig(iid) {\r\n var config = getStoredConfig();\r\n if (config) {\r\n processConfig(config);\r\n return Promise.resolve();\r\n }\r\n return getRemoteConfig(iid)\r\n .then(processConfig)\r\n .then(function (config) { return storeConfig(config); }, \r\n /** Do nothing for error, use defaults set in settings service. */\r\n function () { });\r\n}\r\nfunction getStoredConfig() {\r\n var localStorage = Api.getInstance().localStorage;\r\n if (!localStorage) {\r\n return;\r\n }\r\n var expiryString = localStorage.getItem(CONFIG_EXPIRY_LOCAL_STORAGE_KEY);\r\n if (!expiryString || !configValid(expiryString)) {\r\n return;\r\n }\r\n var configStringified = localStorage.getItem(CONFIG_LOCAL_STORAGE_KEY);\r\n if (!configStringified) {\r\n return;\r\n }\r\n try {\r\n var configResponse = JSON.parse(configStringified);\r\n return configResponse;\r\n }\r\n catch (_a) {\r\n return;\r\n }\r\n}\r\nfunction storeConfig(config) {\r\n var localStorage = Api.getInstance().localStorage;\r\n if (!config || !localStorage) {\r\n return;\r\n }\r\n localStorage.setItem(CONFIG_LOCAL_STORAGE_KEY, JSON.stringify(config));\r\n localStorage.setItem(CONFIG_EXPIRY_LOCAL_STORAGE_KEY, String(Date.now() +\r\n SettingsService.getInstance().configTimeToLive * 60 * 60 * 1000));\r\n}\r\nvar COULD_NOT_GET_CONFIG_MSG = 'Could not fetch config, will use default configs';\r\nfunction getRemoteConfig(iid) {\r\n // Perf needs auth token only to retrieve remote config.\r\n return getAuthTokenPromise()\r\n .then(function (authToken) {\r\n var projectId = SettingsService.getInstance().getProjectId();\r\n var configEndPoint = \"https://firebaseremoteconfig.googleapis.com/v1/projects/\" + projectId + \"/namespaces/fireperf:fetch?key=\" + SettingsService.getInstance().getApiKey();\r\n var request = new Request(configEndPoint, {\r\n method: 'POST',\r\n headers: { Authorization: FIS_AUTH_PREFIX + \" \" + authToken },\r\n /* eslint-disable camelcase */\r\n body: JSON.stringify({\r\n app_instance_id: iid,\r\n app_instance_id_token: authToken,\r\n app_id: SettingsService.getInstance().getAppId(),\r\n app_version: SDK_VERSION,\r\n sdk_version: REMOTE_CONFIG_SDK_VERSION\r\n })\r\n /* eslint-enable camelcase */\r\n });\r\n return fetch(request).then(function (response) {\r\n if (response.ok) {\r\n return response.json();\r\n }\r\n // In case response is not ok. This will be caught by catch.\r\n throw ERROR_FACTORY.create(\"RC response not ok\" /* RC_NOT_OK */);\r\n });\r\n })\r\n .catch(function () {\r\n consoleLogger.info(COULD_NOT_GET_CONFIG_MSG);\r\n return undefined;\r\n });\r\n}\r\n/**\r\n * Processes config coming either from calling RC or from local storage.\r\n * This method only runs if call is successful or config in storage\r\n * is valid.\r\n */\r\nfunction processConfig(config) {\r\n if (!config) {\r\n return config;\r\n }\r\n var settingsServiceInstance = SettingsService.getInstance();\r\n var entries = config.entries || {};\r\n if (entries.fpr_enabled !== undefined) {\r\n // TODO: Change the assignment of loggingEnabled once the received type is\r\n // known.\r\n settingsServiceInstance.loggingEnabled =\r\n String(entries.fpr_enabled) === 'true';\r\n }\r\n else {\r\n // Config retrieved successfully, but there is no fpr_enabled in template.\r\n // Use secondary configs value.\r\n settingsServiceInstance.loggingEnabled = DEFAULT_CONFIGS.loggingEnabled;\r\n }\r\n if (entries.fpr_log_source) {\r\n settingsServiceInstance.logSource = Number(entries.fpr_log_source);\r\n }\r\n if (entries.fpr_log_endpoint_url) {\r\n settingsServiceInstance.logEndPointUrl = entries.fpr_log_endpoint_url;\r\n }\r\n // Key from Remote Config has to be non-empty string, otherwsie use local value.\r\n if (entries.fpr_log_transport_key) {\r\n settingsServiceInstance.transportKey = entries.fpr_log_transport_key;\r\n }\r\n if (entries.fpr_vc_network_request_sampling_rate !== undefined) {\r\n settingsServiceInstance.networkRequestsSamplingRate = Number(entries.fpr_vc_network_request_sampling_rate);\r\n }\r\n if (entries.fpr_vc_trace_sampling_rate !== undefined) {\r\n settingsServiceInstance.tracesSamplingRate = Number(entries.fpr_vc_trace_sampling_rate);\r\n }\r\n // Set the per session trace and network logging flags.\r\n settingsServiceInstance.logTraceAfterSampling = shouldLogAfterSampling(settingsServiceInstance.tracesSamplingRate);\r\n settingsServiceInstance.logNetworkAfterSampling = shouldLogAfterSampling(settingsServiceInstance.networkRequestsSamplingRate);\r\n return config;\r\n}\r\nfunction configValid(expiry) {\r\n return Number(expiry) > Date.now();\r\n}\r\nfunction shouldLogAfterSampling(samplingRate) {\r\n return Math.random() <= samplingRate;\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 initializationStatus = 1 /* notInitialized */;\r\nvar initializationPromise;\r\nfunction getInitializationPromise() {\r\n initializationStatus = 2 /* initializationPending */;\r\n initializationPromise = initializationPromise || initializePerf();\r\n return initializationPromise;\r\n}\r\nfunction isPerfInitialized() {\r\n return initializationStatus === 3 /* initialized */;\r\n}\r\nfunction initializePerf() {\r\n return getDocumentReadyComplete()\r\n .then(function () { return getIidPromise(); })\r\n .then(function (iid) { return getConfig(iid); })\r\n .then(function () { return changeInitializationStatus(); }, function () { return changeInitializationStatus(); });\r\n}\r\n/**\r\n * Returns a promise which resolves whenever the document readystate is complete or\r\n * immediately if it is called after page load complete.\r\n */\r\nfunction getDocumentReadyComplete() {\r\n var document = Api.getInstance().document;\r\n return new Promise(function (resolve) {\r\n if (document && document.readyState !== 'complete') {\r\n var handler_1 = function () {\r\n if (document.readyState === 'complete') {\r\n document.removeEventListener('readystatechange', handler_1);\r\n resolve();\r\n }\r\n };\r\n document.addEventListener('readystatechange', handler_1);\r\n }\r\n else {\r\n resolve();\r\n }\r\n });\r\n}\r\nfunction changeInitializationStatus() {\r\n initializationStatus = 3 /* initialized */;\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 DEFAULT_SEND_INTERVAL_MS = 10 * 1000;\r\nvar INITIAL_SEND_TIME_DELAY_MS = 5.5 * 1000;\r\n// If end point does not work, the call will be tried for these many times.\r\nvar DEFAULT_REMAINING_TRIES = 3;\r\nvar MAX_EVENT_COUNT_PER_REQUEST = 1000;\r\nvar remainingTries = DEFAULT_REMAINING_TRIES;\r\n/* eslint-enable camelcase */\r\nvar queue = [];\r\nvar isTransportSetup = false;\r\nfunction setupTransportService() {\r\n if (!isTransportSetup) {\r\n processQueue(INITIAL_SEND_TIME_DELAY_MS);\r\n isTransportSetup = true;\r\n }\r\n}\r\nfunction processQueue(timeOffset) {\r\n setTimeout(function () {\r\n // If there is no remainingTries left, stop retrying.\r\n if (remainingTries === 0) {\r\n return;\r\n }\r\n // If there are no events to process, wait for DEFAULT_SEND_INTERVAL_MS and try again.\r\n if (!queue.length) {\r\n return processQueue(DEFAULT_SEND_INTERVAL_MS);\r\n }\r\n dispatchQueueEvents();\r\n }, timeOffset);\r\n}\r\nfunction dispatchQueueEvents() {\r\n // Extract events up to the maximum cap of single logRequest from top of \"official queue\".\r\n // The staged events will be used for current logRequest attempt, remaining events will be kept\r\n // for next attempt.\r\n var staged = queue.splice(0, MAX_EVENT_COUNT_PER_REQUEST);\r\n /* eslint-disable camelcase */\r\n // We will pass the JSON serialized event to the backend.\r\n var log_event = staged.map(function (evt) { return ({\r\n source_extension_json_proto3: evt.message,\r\n event_time_ms: String(evt.eventTime)\r\n }); });\r\n var data = {\r\n request_time_ms: String(Date.now()),\r\n client_info: {\r\n client_type: 1,\r\n js_client_info: {}\r\n },\r\n log_source: SettingsService.getInstance().logSource,\r\n log_event: log_event\r\n };\r\n /* eslint-enable camelcase */\r\n sendEventsToFl(data, staged).catch(function () {\r\n // If the request fails for some reason, add the events that were attempted\r\n // back to the primary queue to retry later.\r\n queue = __spreadArray(__spreadArray([], staged), queue);\r\n remainingTries--;\r\n consoleLogger.info(\"Tries left: \" + remainingTries + \".\");\r\n processQueue(DEFAULT_SEND_INTERVAL_MS);\r\n });\r\n}\r\nfunction sendEventsToFl(data, staged) {\r\n return postToFlEndpoint(data)\r\n .then(function (res) {\r\n if (!res.ok) {\r\n consoleLogger.info('Call to Firebase backend failed.');\r\n }\r\n return res.json();\r\n })\r\n .then(function (res) {\r\n // Find the next call wait time from the response.\r\n var transportWait = Number(res.nextRequestWaitMillis);\r\n var requestOffset = DEFAULT_SEND_INTERVAL_MS;\r\n if (!isNaN(transportWait)) {\r\n requestOffset = Math.max(transportWait, requestOffset);\r\n }\r\n // Delete request if response include RESPONSE_ACTION_UNKNOWN or DELETE_REQUEST action.\r\n // Otherwise, retry request using normal scheduling if response include RETRY_REQUEST_LATER.\r\n var logResponseDetails = res.logResponseDetails;\r\n if (Array.isArray(logResponseDetails) &&\r\n logResponseDetails.length > 0 &&\r\n logResponseDetails[0].responseAction === 'RETRY_REQUEST_LATER') {\r\n queue = __spreadArray(__spreadArray([], staged), queue);\r\n consoleLogger.info(\"Retry transport request later.\");\r\n }\r\n remainingTries = DEFAULT_REMAINING_TRIES;\r\n // Schedule the next process.\r\n processQueue(requestOffset);\r\n });\r\n}\r\nfunction postToFlEndpoint(data) {\r\n var flTransportFullUrl = SettingsService.getInstance().getFlTransportFullUrl();\r\n return fetch(flTransportFullUrl, {\r\n method: 'POST',\r\n body: JSON.stringify(data)\r\n });\r\n}\r\nfunction addToQueue(evt) {\r\n if (!evt.eventTime || !evt.message) {\r\n throw ERROR_FACTORY.create(\"invalid cc log\" /* INVALID_CC_LOG */);\r\n }\r\n // Add the new event to the queue.\r\n queue = __spreadArray(__spreadArray([], queue), [evt]);\r\n}\r\n/** Log handler for cc service to send the performance logs to the server. */\r\nfunction transportHandler(\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nserializer) {\r\n return 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 var message = serializer.apply(void 0, args);\r\n addToQueue({\r\n message: message,\r\n eventTime: Date.now()\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\n/* eslint-enble camelcase */\r\nvar logger;\r\n// This method is not called before initialization.\r\nfunction sendLog(resource, resourceType) {\r\n if (!logger) {\r\n logger = transportHandler(serializer);\r\n }\r\n logger(resource, resourceType);\r\n}\r\nfunction logTrace(trace) {\r\n var settingsService = SettingsService.getInstance();\r\n // Do not log if trace is auto generated and instrumentation is disabled.\r\n if (!settingsService.instrumentationEnabled && trace.isAuto) {\r\n return;\r\n }\r\n // Do not log if trace is custom and data collection is disabled.\r\n if (!settingsService.dataCollectionEnabled && !trace.isAuto) {\r\n return;\r\n }\r\n // Do not log if required apis are not available.\r\n if (!Api.getInstance().requiredApisAvailable()) {\r\n return;\r\n }\r\n // Only log the page load auto traces if page is visible.\r\n if (trace.isAuto && getVisibilityState() !== VisibilityState.VISIBLE) {\r\n return;\r\n }\r\n if (isPerfInitialized()) {\r\n sendTraceLog(trace);\r\n }\r\n else {\r\n // Custom traces can be used before the initialization but logging\r\n // should wait until after.\r\n getInitializationPromise().then(function () { return sendTraceLog(trace); }, function () { return sendTraceLog(trace); });\r\n }\r\n}\r\nfunction sendTraceLog(trace) {\r\n if (!getIid()) {\r\n return;\r\n }\r\n var settingsService = SettingsService.getInstance();\r\n if (!settingsService.loggingEnabled ||\r\n !settingsService.logTraceAfterSampling) {\r\n return;\r\n }\r\n setTimeout(function () { return sendLog(trace, 1 /* Trace */); }, 0);\r\n}\r\nfunction logNetworkRequest(networkRequest) {\r\n var settingsService = SettingsService.getInstance();\r\n // Do not log network requests if instrumentation is disabled.\r\n if (!settingsService.instrumentationEnabled) {\r\n return;\r\n }\r\n // Do not log the js sdk's call to transport service domain to avoid unnecessary cycle.\r\n // Need to blacklist both old and new endpoints to avoid migration gap.\r\n var networkRequestUrl = networkRequest.url;\r\n // Blacklist old log endpoint and new transport endpoint.\r\n // Because Performance SDK doesn't instrument requests sent from SDK itself.\r\n var logEndpointUrl = settingsService.logEndPointUrl.split('?')[0];\r\n var flEndpointUrl = settingsService.flTransportEndpointUrl.split('?')[0];\r\n if (networkRequestUrl === logEndpointUrl ||\r\n networkRequestUrl === flEndpointUrl) {\r\n return;\r\n }\r\n if (!settingsService.loggingEnabled ||\r\n !settingsService.logNetworkAfterSampling) {\r\n return;\r\n }\r\n setTimeout(function () { return sendLog(networkRequest, 0 /* NetworkRequest */); }, 0);\r\n}\r\nfunction serializer(resource, resourceType) {\r\n if (resourceType === 0 /* NetworkRequest */) {\r\n return serializeNetworkRequest(resource);\r\n }\r\n return serializeTrace(resource);\r\n}\r\nfunction serializeNetworkRequest(networkRequest) {\r\n var networkRequestMetric = {\r\n url: networkRequest.url,\r\n http_method: networkRequest.httpMethod || 0,\r\n http_response_code: 200,\r\n response_payload_bytes: networkRequest.responsePayloadBytes,\r\n client_start_time_us: networkRequest.startTimeUs,\r\n time_to_response_initiated_us: networkRequest.timeToResponseInitiatedUs,\r\n time_to_response_completed_us: networkRequest.timeToResponseCompletedUs\r\n };\r\n var perfMetric = {\r\n application_info: getApplicationInfo(),\r\n network_request_metric: networkRequestMetric\r\n };\r\n return JSON.stringify(perfMetric);\r\n}\r\nfunction serializeTrace(trace) {\r\n var traceMetric = {\r\n name: trace.name,\r\n is_auto: trace.isAuto,\r\n client_start_time_us: trace.startTimeUs,\r\n duration_us: trace.durationUs\r\n };\r\n if (Object.keys(trace.counters).length !== 0) {\r\n traceMetric.counters = trace.counters;\r\n }\r\n var customAttributes = trace.getAttributes();\r\n if (Object.keys(customAttributes).length !== 0) {\r\n traceMetric.custom_attributes = customAttributes;\r\n }\r\n var perfMetric = {\r\n application_info: getApplicationInfo(),\r\n trace_metric: traceMetric\r\n };\r\n return JSON.stringify(perfMetric);\r\n}\r\nfunction getApplicationInfo() {\r\n return {\r\n google_app_id: SettingsService.getInstance().getAppId(),\r\n app_instance_id: getIid(),\r\n web_app_info: {\r\n sdk_version: SDK_VERSION,\r\n page_url: Api.getInstance().getUrl(),\r\n service_worker_status: getServiceWorkerStatus(),\r\n visibility_state: getVisibilityState(),\r\n effective_connection_type: getEffectiveConnectionType()\r\n },\r\n application_process_state: 0\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 MAX_METRIC_NAME_LENGTH = 100;\r\nvar RESERVED_AUTO_PREFIX = '_';\r\nvar oobMetrics = [\r\n FIRST_PAINT_COUNTER_NAME,\r\n FIRST_CONTENTFUL_PAINT_COUNTER_NAME,\r\n FIRST_INPUT_DELAY_COUNTER_NAME\r\n];\r\n/**\r\n * Returns true if the metric is custom and does not start with reserved prefix, or if\r\n * the metric is one of out of the box page load trace metrics.\r\n */\r\nfunction isValidMetricName(name, traceName) {\r\n if (name.length === 0 || name.length > MAX_METRIC_NAME_LENGTH) {\r\n return false;\r\n }\r\n return ((traceName &&\r\n traceName.startsWith(OOB_TRACE_PAGE_LOAD_PREFIX) &&\r\n oobMetrics.indexOf(name) > -1) ||\r\n !name.startsWith(RESERVED_AUTO_PREFIX));\r\n}\r\n/**\r\n * Converts the provided value to an integer value to be used in case of a metric.\r\n * @param providedValue Provided number value of the metric that needs to be converted to an integer.\r\n *\r\n * @returns Converted integer number to be set for the metric.\r\n */\r\nfunction convertMetricValueToInteger(providedValue) {\r\n var valueAsInteger = Math.floor(providedValue);\r\n if (valueAsInteger < providedValue) {\r\n consoleLogger.info(\"Metric value should be an Integer, setting the value as : \" + valueAsInteger + \".\");\r\n }\r\n return valueAsInteger;\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 Trace = /** @class */ (function () {\r\n /**\r\n * @param name The name of the trace.\r\n * @param isAuto If the trace is auto-instrumented.\r\n * @param traceMeasureName The name of the measure marker in user timing specification. This field\r\n * is only set when the trace is built for logging when the user directly uses the user timing\r\n * api (performance.mark and performance.measure).\r\n */\r\n function Trace(name, isAuto, traceMeasureName) {\r\n if (isAuto === void 0) { isAuto = false; }\r\n this.name = name;\r\n this.isAuto = isAuto;\r\n this.state = 1 /* UNINITIALIZED */;\r\n this.customAttributes = {};\r\n this.counters = {};\r\n this.api = Api.getInstance();\r\n this.randomId = Math.floor(Math.random() * 1000000);\r\n if (!this.isAuto) {\r\n this.traceStartMark = TRACE_START_MARK_PREFIX + \"-\" + this.randomId + \"-\" + this.name;\r\n this.traceStopMark = TRACE_STOP_MARK_PREFIX + \"-\" + this.randomId + \"-\" + this.name;\r\n this.traceMeasure =\r\n traceMeasureName ||\r\n TRACE_MEASURE_PREFIX + \"-\" + this.randomId + \"-\" + this.name;\r\n if (traceMeasureName) {\r\n // For the case of direct user timing traces, no start stop will happen. The measure object\r\n // is already available.\r\n this.calculateTraceMetrics();\r\n }\r\n }\r\n }\r\n /**\r\n * Starts a trace. The measurement of the duration starts at this point.\r\n */\r\n Trace.prototype.start = function () {\r\n if (this.state !== 1 /* UNINITIALIZED */) {\r\n throw ERROR_FACTORY.create(\"trace started\" /* TRACE_STARTED_BEFORE */, {\r\n traceName: this.name\r\n });\r\n }\r\n this.api.mark(this.traceStartMark);\r\n this.state = 2 /* RUNNING */;\r\n };\r\n /**\r\n * Stops the trace. The measurement of the duration of the trace stops at this point and trace\r\n * is logged.\r\n */\r\n Trace.prototype.stop = function () {\r\n if (this.state !== 2 /* RUNNING */) {\r\n throw ERROR_FACTORY.create(\"trace stopped\" /* TRACE_STOPPED_BEFORE */, {\r\n traceName: this.name\r\n });\r\n }\r\n this.state = 3 /* TERMINATED */;\r\n this.api.mark(this.traceStopMark);\r\n this.api.measure(this.traceMeasure, this.traceStartMark, this.traceStopMark);\r\n this.calculateTraceMetrics();\r\n logTrace(this);\r\n };\r\n /**\r\n * Records a trace with predetermined values. If this method is used a trace is created and logged\r\n * directly. No need to use start and stop methods.\r\n * @param startTime Trace start time since epoch in millisec\r\n * @param duration The duraction of the trace in millisec\r\n * @param options An object which can optionally hold maps of custom metrics and custom attributes\r\n */\r\n Trace.prototype.record = function (startTime, duration, options) {\r\n if (startTime <= 0) {\r\n throw ERROR_FACTORY.create(\"nonpositive trace startTime\" /* NONPOSITIVE_TRACE_START_TIME */, {\r\n traceName: this.name\r\n });\r\n }\r\n if (duration <= 0) {\r\n throw ERROR_FACTORY.create(\"nonpositive trace duration\" /* NONPOSITIVE_TRACE_DURATION */, {\r\n traceName: this.name\r\n });\r\n }\r\n this.durationUs = Math.floor(duration * 1000);\r\n this.startTimeUs = Math.floor(startTime * 1000);\r\n if (options && options.attributes) {\r\n this.customAttributes = __assign({}, options.attributes);\r\n }\r\n if (options && options.metrics) {\r\n for (var _i = 0, _a = Object.keys(options.metrics); _i < _a.length; _i++) {\r\n var metric = _a[_i];\r\n if (!isNaN(Number(options.metrics[metric]))) {\r\n this.counters[metric] = Number(Math.floor(options.metrics[metric]));\r\n }\r\n }\r\n }\r\n logTrace(this);\r\n };\r\n /**\r\n * Increments a custom metric by a certain number or 1 if number not specified. Will create a new\r\n * custom metric if one with the given name does not exist. The value will be floored down to an\r\n * integer.\r\n * @param counter Name of the custom metric\r\n * @param numAsInteger Increment by value\r\n */\r\n Trace.prototype.incrementMetric = function (counter, numAsInteger) {\r\n if (numAsInteger === void 0) { numAsInteger = 1; }\r\n if (this.counters[counter] === undefined) {\r\n this.putMetric(counter, numAsInteger);\r\n }\r\n else {\r\n this.putMetric(counter, this.counters[counter] + numAsInteger);\r\n }\r\n };\r\n /**\r\n * Sets a custom metric to a specified value. Will create a new custom metric if one with the\r\n * given name does not exist. The value will be floored down to an integer.\r\n * @param counter Name of the custom metric\r\n * @param numAsInteger Set custom metric to this value\r\n */\r\n Trace.prototype.putMetric = function (counter, numAsInteger) {\r\n if (isValidMetricName(counter, this.name)) {\r\n this.counters[counter] = convertMetricValueToInteger(numAsInteger);\r\n }\r\n else {\r\n throw ERROR_FACTORY.create(\"invalid custom metric name\" /* INVALID_CUSTOM_METRIC_NAME */, {\r\n customMetricName: counter\r\n });\r\n }\r\n };\r\n /**\r\n * Returns the value of the custom metric by that name. If a custom metric with that name does\r\n * not exist will return zero.\r\n * @param counter\r\n */\r\n Trace.prototype.getMetric = function (counter) {\r\n return this.counters[counter] || 0;\r\n };\r\n /**\r\n * Sets a custom attribute of a trace to a certain value.\r\n * @param attr\r\n * @param value\r\n */\r\n Trace.prototype.putAttribute = function (attr, value) {\r\n var isValidName = isValidCustomAttributeName(attr);\r\n var isValidValue = isValidCustomAttributeValue(value);\r\n if (isValidName && isValidValue) {\r\n this.customAttributes[attr] = value;\r\n return;\r\n }\r\n // Throw appropriate error when the attribute name or value is invalid.\r\n if (!isValidName) {\r\n throw ERROR_FACTORY.create(\"invalid attribute name\" /* INVALID_ATTRIBUTE_NAME */, {\r\n attributeName: attr\r\n });\r\n }\r\n if (!isValidValue) {\r\n throw ERROR_FACTORY.create(\"invalid attribute value\" /* INVALID_ATTRIBUTE_VALUE */, {\r\n attributeValue: value\r\n });\r\n }\r\n };\r\n /**\r\n * Retrieves the value a custom attribute of a trace is set to.\r\n * @param attr\r\n */\r\n Trace.prototype.getAttribute = function (attr) {\r\n return this.customAttributes[attr];\r\n };\r\n Trace.prototype.removeAttribute = function (attr) {\r\n if (this.customAttributes[attr] === undefined) {\r\n return;\r\n }\r\n delete this.customAttributes[attr];\r\n };\r\n Trace.prototype.getAttributes = function () {\r\n return __assign({}, this.customAttributes);\r\n };\r\n Trace.prototype.setStartTime = function (startTime) {\r\n this.startTimeUs = startTime;\r\n };\r\n Trace.prototype.setDuration = function (duration) {\r\n this.durationUs = duration;\r\n };\r\n /**\r\n * Calculates and assigns the duration and start time of the trace using the measure performance\r\n * entry.\r\n */\r\n Trace.prototype.calculateTraceMetrics = function () {\r\n var perfMeasureEntries = this.api.getEntriesByName(this.traceMeasure);\r\n var perfMeasureEntry = perfMeasureEntries && perfMeasureEntries[0];\r\n if (perfMeasureEntry) {\r\n this.durationUs = Math.floor(perfMeasureEntry.duration * 1000);\r\n this.startTimeUs = Math.floor((perfMeasureEntry.startTime + this.api.getTimeOrigin()) * 1000);\r\n }\r\n };\r\n /**\r\n * @param navigationTimings A single element array which contains the navigationTIming object of\r\n * the page load\r\n * @param paintTimings A array which contains paintTiming object of the page load\r\n * @param firstInputDelay First input delay in millisec\r\n */\r\n Trace.createOobTrace = function (navigationTimings, paintTimings, firstInputDelay) {\r\n var route = Api.getInstance().getUrl();\r\n if (!route) {\r\n return;\r\n }\r\n var trace = new Trace(OOB_TRACE_PAGE_LOAD_PREFIX + route, true);\r\n var timeOriginUs = Math.floor(Api.getInstance().getTimeOrigin() * 1000);\r\n trace.setStartTime(timeOriginUs);\r\n // navigationTimings includes only one element.\r\n if (navigationTimings && navigationTimings[0]) {\r\n trace.setDuration(Math.floor(navigationTimings[0].duration * 1000));\r\n trace.putMetric('domInteractive', Math.floor(navigationTimings[0].domInteractive * 1000));\r\n trace.putMetric('domContentLoadedEventEnd', Math.floor(navigationTimings[0].domContentLoadedEventEnd * 1000));\r\n trace.putMetric('loadEventEnd', Math.floor(navigationTimings[0].loadEventEnd * 1000));\r\n }\r\n var FIRST_PAINT = 'first-paint';\r\n var FIRST_CONTENTFUL_PAINT = 'first-contentful-paint';\r\n if (paintTimings) {\r\n var firstPaint = paintTimings.find(function (paintObject) { return paintObject.name === FIRST_PAINT; });\r\n if (firstPaint && firstPaint.startTime) {\r\n trace.putMetric(FIRST_PAINT_COUNTER_NAME, Math.floor(firstPaint.startTime * 1000));\r\n }\r\n var firstContentfulPaint = paintTimings.find(function (paintObject) { return paintObject.name === FIRST_CONTENTFUL_PAINT; });\r\n if (firstContentfulPaint && firstContentfulPaint.startTime) {\r\n trace.putMetric(FIRST_CONTENTFUL_PAINT_COUNTER_NAME, Math.floor(firstContentfulPaint.startTime * 1000));\r\n }\r\n if (firstInputDelay) {\r\n trace.putMetric(FIRST_INPUT_DELAY_COUNTER_NAME, Math.floor(firstInputDelay * 1000));\r\n }\r\n }\r\n logTrace(trace);\r\n };\r\n Trace.createUserTimingTrace = function (measureName) {\r\n var trace = new Trace(measureName, false, measureName);\r\n logTrace(trace);\r\n };\r\n return Trace;\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\nfunction createNetworkRequestEntry(entry) {\r\n var performanceEntry = entry;\r\n if (!performanceEntry || performanceEntry.responseStart === undefined) {\r\n return;\r\n }\r\n var timeOrigin = Api.getInstance().getTimeOrigin();\r\n var startTimeUs = Math.floor((performanceEntry.startTime + timeOrigin) * 1000);\r\n var timeToResponseInitiatedUs = performanceEntry.responseStart\r\n ? Math.floor((performanceEntry.responseStart - performanceEntry.startTime) * 1000)\r\n : undefined;\r\n var timeToResponseCompletedUs = Math.floor((performanceEntry.responseEnd - performanceEntry.startTime) * 1000);\r\n // Remove the query params from logged network request url.\r\n var url = performanceEntry.name && performanceEntry.name.split('?')[0];\r\n var networkRequest = {\r\n url: url,\r\n responsePayloadBytes: performanceEntry.transferSize,\r\n startTimeUs: startTimeUs,\r\n timeToResponseInitiatedUs: timeToResponseInitiatedUs,\r\n timeToResponseCompletedUs: timeToResponseCompletedUs\r\n };\r\n logNetworkRequest(networkRequest);\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 FID_WAIT_TIME_MS = 5000;\r\nfunction setupOobResources() {\r\n // Do not initialize unless iid is available.\r\n if (!getIid()) {\r\n return;\r\n }\r\n // The load event might not have fired yet, and that means performance navigation timing\r\n // object has a duration of 0. The setup should run after all current tasks in js queue.\r\n setTimeout(function () { return setupOobTraces(); }, 0);\r\n setTimeout(function () { return setupNetworkRequests(); }, 0);\r\n setTimeout(function () { return setupUserTimingTraces(); }, 0);\r\n}\r\nfunction setupNetworkRequests() {\r\n var api = Api.getInstance();\r\n var resources = api.getEntriesByType('resource');\r\n for (var _i = 0, resources_1 = resources; _i < resources_1.length; _i++) {\r\n var resource = resources_1[_i];\r\n createNetworkRequestEntry(resource);\r\n }\r\n api.setupObserver('resource', createNetworkRequestEntry);\r\n}\r\nfunction setupOobTraces() {\r\n var api = Api.getInstance();\r\n var navigationTimings = api.getEntriesByType('navigation');\r\n var paintTimings = api.getEntriesByType('paint');\r\n // If First Input Desly polyfill is added to the page, report the fid value.\r\n // https://github.com/GoogleChromeLabs/first-input-delay\r\n if (api.onFirstInputDelay) {\r\n // If the fid call back is not called for certain time, continue without it.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n var timeoutId_1 = setTimeout(function () {\r\n Trace.createOobTrace(navigationTimings, paintTimings);\r\n timeoutId_1 = undefined;\r\n }, FID_WAIT_TIME_MS);\r\n api.onFirstInputDelay(function (fid) {\r\n if (timeoutId_1) {\r\n clearTimeout(timeoutId_1);\r\n Trace.createOobTrace(navigationTimings, paintTimings, fid);\r\n }\r\n });\r\n }\r\n else {\r\n Trace.createOobTrace(navigationTimings, paintTimings);\r\n }\r\n}\r\nfunction setupUserTimingTraces() {\r\n var api = Api.getInstance();\r\n // Run through the measure performance entries collected up to this point.\r\n var measures = api.getEntriesByType('measure');\r\n for (var _i = 0, measures_1 = measures; _i < measures_1.length; _i++) {\r\n var measure = measures_1[_i];\r\n createUserTimingTrace(measure);\r\n }\r\n // Setup an observer to capture the measures from this point on.\r\n api.setupObserver('measure', createUserTimingTrace);\r\n}\r\nfunction createUserTimingTrace(measure) {\r\n var measureName = measure.name;\r\n // Do not create a trace, if the user timing marks and measures are created by the sdk itself.\r\n if (measureName.substring(0, TRACE_MEASURE_PREFIX.length) ===\r\n TRACE_MEASURE_PREFIX) {\r\n return;\r\n }\r\n Trace.createUserTimingTrace(measureName);\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 PerformanceController = /** @class */ (function () {\r\n function PerformanceController(app) {\r\n this.app = app;\r\n if (Api.getInstance().requiredApisAvailable()) {\r\n validateIndexedDBOpenable()\r\n .then(function (isAvailable) {\r\n if (isAvailable) {\r\n setupTransportService();\r\n getInitializationPromise().then(setupOobResources, setupOobResources);\r\n }\r\n })\r\n .catch(function (error) {\r\n consoleLogger.info(\"Environment doesn't support IndexedDB: \" + error);\r\n });\r\n }\r\n }\r\n PerformanceController.prototype.trace = function (name) {\r\n return new Trace(name);\r\n };\r\n Object.defineProperty(PerformanceController.prototype, \"instrumentationEnabled\", {\r\n get: function () {\r\n return SettingsService.getInstance().instrumentationEnabled;\r\n },\r\n set: function (val) {\r\n SettingsService.getInstance().instrumentationEnabled = val;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(PerformanceController.prototype, \"dataCollectionEnabled\", {\r\n get: function () {\r\n return SettingsService.getInstance().dataCollectionEnabled;\r\n },\r\n set: function (val) {\r\n SettingsService.getInstance().dataCollectionEnabled = val;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n return PerformanceController;\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 DEFAULT_ENTRY_NAME = '[DEFAULT]';\r\nfunction registerPerformance(instance) {\r\n var factoryMethod = function (app, installations) {\r\n if (app.name !== DEFAULT_ENTRY_NAME) {\r\n throw ERROR_FACTORY.create(\"FB not default\" /* FB_NOT_DEFAULT */);\r\n }\r\n if (typeof window === 'undefined') {\r\n throw ERROR_FACTORY.create(\"no window\" /* NO_WINDOW */);\r\n }\r\n setupApi(window);\r\n SettingsService.getInstance().firebaseAppInstance = app;\r\n SettingsService.getInstance().installationsService = installations;\r\n return new PerformanceController(app);\r\n };\r\n // Register performance with firebase-app.\r\n instance.INTERNAL.registerComponent(new Component('performance', function (container) {\r\n /* Dependencies */\r\n // getImmediate for FirebaseApp will always succeed\r\n var app = container.getProvider('app').getImmediate();\r\n // The following call will always succeed because perf has `import '@firebase/installations'`\r\n var installations = container\r\n .getProvider('installations')\r\n .getImmediate();\r\n return factoryMethod(app, installations);\r\n }, \"PUBLIC\" /* PUBLIC */));\r\n instance.registerVersion(name, version);\r\n}\r\nregisterPerformance(firebase);\n\nexport { registerPerformance };\n//# sourceMappingURL=index.esm.js.map\n","import '@firebase/installations';\nimport { Component } from '@firebase/component';\nimport { ErrorFactory } from '@firebase/util';\nimport { __spreadArray, __read, __awaiter, __generator, __assign, __values } from 'tslib';\nimport { deleteDb, openDb } from 'idb';\nimport firebase from '@firebase/app';\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 _a;\r\nvar ERROR_MAP = (_a = {},\r\n _a[\"missing-app-config-values\" /* MISSING_APP_CONFIG_VALUES */] = 'Missing App configuration value: \"{$valueName}\"',\r\n _a[\"only-available-in-window\" /* AVAILABLE_IN_WINDOW */] = 'This method is available in a Window context.',\r\n _a[\"only-available-in-sw\" /* AVAILABLE_IN_SW */] = 'This method is available in a service worker context.',\r\n _a[\"permission-default\" /* PERMISSION_DEFAULT */] = 'The notification permission was not granted and dismissed instead.',\r\n _a[\"permission-blocked\" /* PERMISSION_BLOCKED */] = 'The notification permission was not granted and blocked instead.',\r\n _a[\"unsupported-browser\" /* UNSUPPORTED_BROWSER */] = \"This browser doesn't support the API's required to use the firebase SDK.\",\r\n _a[\"failed-service-worker-registration\" /* FAILED_DEFAULT_REGISTRATION */] = 'We are unable to register the default service worker. {$browserErrorMessage}',\r\n _a[\"token-subscribe-failed\" /* TOKEN_SUBSCRIBE_FAILED */] = 'A problem occurred while subscribing the user to FCM: {$errorInfo}',\r\n _a[\"token-subscribe-no-token\" /* TOKEN_SUBSCRIBE_NO_TOKEN */] = 'FCM returned no token when subscribing the user to push.',\r\n _a[\"token-unsubscribe-failed\" /* TOKEN_UNSUBSCRIBE_FAILED */] = 'A problem occurred while unsubscribing the ' +\r\n 'user from FCM: {$errorInfo}',\r\n _a[\"token-update-failed\" /* TOKEN_UPDATE_FAILED */] = 'A problem occurred while updating the user from FCM: {$errorInfo}',\r\n _a[\"token-update-no-token\" /* TOKEN_UPDATE_NO_TOKEN */] = 'FCM returned no token when updating the user to push.',\r\n _a[\"use-sw-after-get-token\" /* USE_SW_AFTER_GET_TOKEN */] = 'The useServiceWorker() method may only be called once and must be ' +\r\n 'called before calling getToken() to ensure your service worker is used.',\r\n _a[\"invalid-sw-registration\" /* INVALID_SW_REGISTRATION */] = 'The input to useServiceWorker() must be a ServiceWorkerRegistration.',\r\n _a[\"invalid-bg-handler\" /* INVALID_BG_HANDLER */] = 'The input to setBackgroundMessageHandler() must be a function.',\r\n _a[\"invalid-vapid-key\" /* INVALID_VAPID_KEY */] = 'The public VAPID key must be a string.',\r\n _a[\"use-vapid-key-after-get-token\" /* USE_VAPID_KEY_AFTER_GET_TOKEN */] = 'The usePublicVapidKey() method may only be called once and must be ' +\r\n 'called before calling getToken() to ensure your VAPID key is used.',\r\n _a);\r\nvar ERROR_FACTORY = new ErrorFactory('messaging', 'Messaging', ERROR_MAP);\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 DEFAULT_SW_PATH = '/firebase-messaging-sw.js';\r\nvar DEFAULT_SW_SCOPE = '/firebase-cloud-messaging-push-scope';\r\nvar DEFAULT_VAPID_KEY = 'BDOU99-h67HcA6JeFXHbSNMu7e2yNNu3RzoMj8TM4W88jITfq7ZmPvIM1Iv-4_l2LxQcYwhqby2xGpWwzjfAnG4';\r\nvar ENDPOINT = 'https://fcmregistrations.googleapis.com/v1';\r\n// Key of FCM Payload in Notification's data field.\r\nvar FCM_MSG = 'FCM_MSG';\r\nvar TAG = 'FirebaseMessaging: ';\r\n// Set to '1' if Analytics is enabled for the campaign\r\nvar CONSOLE_CAMPAIGN_ANALYTICS_ENABLED = 'google.c.a.e';\r\nvar CONSOLE_CAMPAIGN_ID = 'google.c.a.c_id';\r\nvar CONSOLE_CAMPAIGN_TIME = 'google.c.a.ts';\r\nvar CONSOLE_CAMPAIGN_NAME = 'google.c.a.c_l';\r\n// Due to the fact that onBackgroundMessage can't be awaited (to support rxjs), a silent push\r\n// warning might be shown by the browser if the callback fails to completes by the end of onPush.\r\n// Experiments were ran to determine the majority onBackground message clock time. This brief\r\n// blocking time would allow majority of the onBackgroundMessage callback to finish.\r\nvar BACKGROUND_HANDLE_EXECUTION_TIME_LIMIT_MS = 1000;\r\n// Preparation time for client to initialize and set up the message handler.\r\nvar FOREGROUND_HANDLE_PREPARATION_TIME_MS = 3000;\n\n/**\r\n * @license\r\n * Copyright 2018 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\r\n * in compliance with the License. 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 distributed under the License\r\n * is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\r\n * or implied. See the License for the specific language governing permissions and limitations under\r\n * the License.\r\n */\r\nvar MessageType;\r\n(function (MessageType) {\r\n MessageType[\"PUSH_RECEIVED\"] = \"push-received\";\r\n MessageType[\"NOTIFICATION_CLICKED\"] = \"notification-clicked\";\r\n})(MessageType || (MessageType = {}));\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\nfunction arrayToBase64(array) {\r\n var uint8Array = new Uint8Array(array);\r\n var base64String = btoa(String.fromCharCode.apply(String, __spreadArray([], __read(uint8Array))));\r\n return base64String.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\r\n}\r\nfunction base64ToArray(base64String) {\r\n var padding = '='.repeat((4 - (base64String.length % 4)) % 4);\r\n var base64 = (base64String + padding)\r\n .replace(/\\-/g, '+')\r\n .replace(/_/g, '/');\r\n var rawData = atob(base64);\r\n var outputArray = new Uint8Array(rawData.length);\r\n for (var i = 0; i < rawData.length; ++i) {\r\n outputArray[i] = rawData.charCodeAt(i);\r\n }\r\n return outputArray;\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 OLD_DB_NAME = 'fcm_token_details_db';\r\n/**\r\n * The last DB version of 'fcm_token_details_db' was 4. This is one higher, so that the upgrade\r\n * callback is called for all versions of the old DB.\r\n */\r\nvar OLD_DB_VERSION = 5;\r\nvar OLD_OBJECT_STORE_NAME = 'fcm_token_object_Store';\r\nfunction migrateOldDatabase(senderId) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var databases, dbNames, tokenDetails, db;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!('databases' in indexedDB)) return [3 /*break*/, 2];\r\n return [4 /*yield*/, indexedDB.databases()];\r\n case 1:\r\n databases = _a.sent();\r\n dbNames = databases.map(function (db) { return db.name; });\r\n if (!dbNames.includes(OLD_DB_NAME)) {\r\n // old DB didn't exist, no need to open.\r\n return [2 /*return*/, null];\r\n }\r\n _a.label = 2;\r\n case 2:\r\n tokenDetails = null;\r\n return [4 /*yield*/, openDb(OLD_DB_NAME, OLD_DB_VERSION, function (db) { return __awaiter(_this, void 0, void 0, function () {\r\n var objectStore, value, oldDetails, oldDetails, oldDetails;\r\n var _a;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n if (db.oldVersion < 2) {\r\n // Database too old, skip migration.\r\n return [2 /*return*/];\r\n }\r\n if (!db.objectStoreNames.contains(OLD_OBJECT_STORE_NAME)) {\r\n // Database did not exist. Nothing to do.\r\n return [2 /*return*/];\r\n }\r\n objectStore = db.transaction.objectStore(OLD_OBJECT_STORE_NAME);\r\n return [4 /*yield*/, objectStore.index('fcmSenderId').get(senderId)];\r\n case 1:\r\n value = _b.sent();\r\n return [4 /*yield*/, objectStore.clear()];\r\n case 2:\r\n _b.sent();\r\n if (!value) {\r\n // No entry in the database, nothing to migrate.\r\n return [2 /*return*/];\r\n }\r\n if (db.oldVersion === 2) {\r\n oldDetails = value;\r\n if (!oldDetails.auth || !oldDetails.p256dh || !oldDetails.endpoint) {\r\n return [2 /*return*/];\r\n }\r\n tokenDetails = {\r\n token: oldDetails.fcmToken,\r\n createTime: (_a = oldDetails.createTime) !== null && _a !== void 0 ? _a : Date.now(),\r\n subscriptionOptions: {\r\n auth: oldDetails.auth,\r\n p256dh: oldDetails.p256dh,\r\n endpoint: oldDetails.endpoint,\r\n swScope: oldDetails.swScope,\r\n vapidKey: typeof oldDetails.vapidKey === 'string'\r\n ? oldDetails.vapidKey\r\n : arrayToBase64(oldDetails.vapidKey)\r\n }\r\n };\r\n }\r\n else if (db.oldVersion === 3) {\r\n oldDetails = value;\r\n tokenDetails = {\r\n token: oldDetails.fcmToken,\r\n createTime: oldDetails.createTime,\r\n subscriptionOptions: {\r\n auth: arrayToBase64(oldDetails.auth),\r\n p256dh: arrayToBase64(oldDetails.p256dh),\r\n endpoint: oldDetails.endpoint,\r\n swScope: oldDetails.swScope,\r\n vapidKey: arrayToBase64(oldDetails.vapidKey)\r\n }\r\n };\r\n }\r\n else if (db.oldVersion === 4) {\r\n oldDetails = value;\r\n tokenDetails = {\r\n token: oldDetails.fcmToken,\r\n createTime: oldDetails.createTime,\r\n subscriptionOptions: {\r\n auth: arrayToBase64(oldDetails.auth),\r\n p256dh: arrayToBase64(oldDetails.p256dh),\r\n endpoint: oldDetails.endpoint,\r\n swScope: oldDetails.swScope,\r\n vapidKey: arrayToBase64(oldDetails.vapidKey)\r\n }\r\n };\r\n }\r\n return [2 /*return*/];\r\n }\r\n });\r\n }); })];\r\n case 3:\r\n db = _a.sent();\r\n db.close();\r\n // Delete all old databases.\r\n return [4 /*yield*/, deleteDb(OLD_DB_NAME)];\r\n case 4:\r\n // Delete all old databases.\r\n _a.sent();\r\n return [4 /*yield*/, deleteDb('fcm_vapid_details_db')];\r\n case 5:\r\n _a.sent();\r\n return [4 /*yield*/, deleteDb('undefined')];\r\n case 6:\r\n _a.sent();\r\n return [2 /*return*/, checkTokenDetails(tokenDetails) ? tokenDetails : null];\r\n }\r\n });\r\n });\r\n}\r\nfunction checkTokenDetails(tokenDetails) {\r\n if (!tokenDetails || !tokenDetails.subscriptionOptions) {\r\n return false;\r\n }\r\n var subscriptionOptions = tokenDetails.subscriptionOptions;\r\n return (typeof tokenDetails.createTime === 'number' &&\r\n tokenDetails.createTime > 0 &&\r\n typeof tokenDetails.token === 'string' &&\r\n tokenDetails.token.length > 0 &&\r\n typeof subscriptionOptions.auth === 'string' &&\r\n subscriptionOptions.auth.length > 0 &&\r\n typeof subscriptionOptions.p256dh === 'string' &&\r\n subscriptionOptions.p256dh.length > 0 &&\r\n typeof subscriptionOptions.endpoint === 'string' &&\r\n subscriptionOptions.endpoint.length > 0 &&\r\n typeof subscriptionOptions.swScope === 'string' &&\r\n subscriptionOptions.swScope.length > 0 &&\r\n typeof subscriptionOptions.vapidKey === 'string' &&\r\n subscriptionOptions.vapidKey.length > 0);\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\n// Exported for tests.\r\nvar DATABASE_NAME = 'firebase-messaging-database';\r\nvar DATABASE_VERSION = 1;\r\nvar OBJECT_STORE_NAME = 'firebase-messaging-store';\r\nvar dbPromise = null;\r\nfunction getDbPromise() {\r\n if (!dbPromise) {\r\n dbPromise = openDb(DATABASE_NAME, DATABASE_VERSION, function (upgradeDb) {\r\n // We don't use 'break' in this switch statement, the fall-through behavior is what we want,\r\n // because if there are multiple versions between the old version and the current version, we\r\n // want ALL the migrations that correspond to those versions to run, not only the last one.\r\n // eslint-disable-next-line default-case\r\n switch (upgradeDb.oldVersion) {\r\n case 0:\r\n upgradeDb.createObjectStore(OBJECT_STORE_NAME);\r\n }\r\n });\r\n }\r\n return dbPromise;\r\n}\r\n/** Gets record(s) from the objectStore that match the given key. */\r\nfunction dbGet(firebaseDependencies) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var key, db, tokenDetails, oldTokenDetails;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n key = getKey(firebaseDependencies);\r\n return [4 /*yield*/, getDbPromise()];\r\n case 1:\r\n db = _a.sent();\r\n return [4 /*yield*/, db\r\n .transaction(OBJECT_STORE_NAME)\r\n .objectStore(OBJECT_STORE_NAME)\r\n .get(key)];\r\n case 2:\r\n tokenDetails = _a.sent();\r\n if (!tokenDetails) return [3 /*break*/, 3];\r\n return [2 /*return*/, tokenDetails];\r\n case 3: return [4 /*yield*/, migrateOldDatabase(firebaseDependencies.appConfig.senderId)];\r\n case 4:\r\n oldTokenDetails = _a.sent();\r\n if (!oldTokenDetails) return [3 /*break*/, 6];\r\n return [4 /*yield*/, dbSet(firebaseDependencies, oldTokenDetails)];\r\n case 5:\r\n _a.sent();\r\n return [2 /*return*/, oldTokenDetails];\r\n case 6: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n}\r\n/** Assigns or overwrites the record for the given key with the given value. */\r\nfunction dbSet(firebaseDependencies, tokenDetails) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var key, db, tx;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n key = getKey(firebaseDependencies);\r\n return [4 /*yield*/, getDbPromise()];\r\n case 1:\r\n db = _a.sent();\r\n tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\r\n return [4 /*yield*/, tx.objectStore(OBJECT_STORE_NAME).put(tokenDetails, key)];\r\n case 2:\r\n _a.sent();\r\n return [4 /*yield*/, tx.complete];\r\n case 3:\r\n _a.sent();\r\n return [2 /*return*/, tokenDetails];\r\n }\r\n });\r\n });\r\n}\r\n/** Removes record(s) from the objectStore that match the given key. */\r\nfunction dbRemove(firebaseDependencies) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var key, db, tx;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n key = getKey(firebaseDependencies);\r\n return [4 /*yield*/, getDbPromise()];\r\n case 1:\r\n db = _a.sent();\r\n tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\r\n return [4 /*yield*/, tx.objectStore(OBJECT_STORE_NAME).delete(key)];\r\n case 2:\r\n _a.sent();\r\n return [4 /*yield*/, tx.complete];\r\n case 3:\r\n _a.sent();\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n}\r\nfunction getKey(_a) {\r\n var appConfig = _a.appConfig;\r\n return appConfig.appId;\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\nfunction requestGetToken(firebaseDependencies, subscriptionOptions) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var headers, body, subscribeOptions, responseData, response, err_1, message;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, getHeaders(firebaseDependencies)];\r\n case 1:\r\n headers = _a.sent();\r\n body = getBody(subscriptionOptions);\r\n subscribeOptions = {\r\n method: 'POST',\r\n headers: headers,\r\n body: JSON.stringify(body)\r\n };\r\n _a.label = 2;\r\n case 2:\r\n _a.trys.push([2, 5, , 6]);\r\n return [4 /*yield*/, fetch(getEndpoint(firebaseDependencies.appConfig), subscribeOptions)];\r\n case 3:\r\n response = _a.sent();\r\n return [4 /*yield*/, response.json()];\r\n case 4:\r\n responseData = _a.sent();\r\n return [3 /*break*/, 6];\r\n case 5:\r\n err_1 = _a.sent();\r\n throw ERROR_FACTORY.create(\"token-subscribe-failed\" /* TOKEN_SUBSCRIBE_FAILED */, {\r\n errorInfo: err_1\r\n });\r\n case 6:\r\n if (responseData.error) {\r\n message = responseData.error.message;\r\n throw ERROR_FACTORY.create(\"token-subscribe-failed\" /* TOKEN_SUBSCRIBE_FAILED */, {\r\n errorInfo: message\r\n });\r\n }\r\n if (!responseData.token) {\r\n throw ERROR_FACTORY.create(\"token-subscribe-no-token\" /* TOKEN_SUBSCRIBE_NO_TOKEN */);\r\n }\r\n return [2 /*return*/, responseData.token];\r\n }\r\n });\r\n });\r\n}\r\nfunction requestUpdateToken(firebaseDependencies, tokenDetails) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var headers, body, updateOptions, responseData, response, err_2, message;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, getHeaders(firebaseDependencies)];\r\n case 1:\r\n headers = _a.sent();\r\n body = getBody(tokenDetails.subscriptionOptions);\r\n updateOptions = {\r\n method: 'PATCH',\r\n headers: headers,\r\n body: JSON.stringify(body)\r\n };\r\n _a.label = 2;\r\n case 2:\r\n _a.trys.push([2, 5, , 6]);\r\n return [4 /*yield*/, fetch(getEndpoint(firebaseDependencies.appConfig) + \"/\" + tokenDetails.token, updateOptions)];\r\n case 3:\r\n response = _a.sent();\r\n return [4 /*yield*/, response.json()];\r\n case 4:\r\n responseData = _a.sent();\r\n return [3 /*break*/, 6];\r\n case 5:\r\n err_2 = _a.sent();\r\n throw ERROR_FACTORY.create(\"token-update-failed\" /* TOKEN_UPDATE_FAILED */, {\r\n errorInfo: err_2\r\n });\r\n case 6:\r\n if (responseData.error) {\r\n message = responseData.error.message;\r\n throw ERROR_FACTORY.create(\"token-update-failed\" /* TOKEN_UPDATE_FAILED */, {\r\n errorInfo: message\r\n });\r\n }\r\n if (!responseData.token) {\r\n throw ERROR_FACTORY.create(\"token-update-no-token\" /* TOKEN_UPDATE_NO_TOKEN */);\r\n }\r\n return [2 /*return*/, responseData.token];\r\n }\r\n });\r\n });\r\n}\r\nfunction requestDeleteToken(firebaseDependencies, token) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var headers, unsubscribeOptions, response, responseData, message, err_3;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, getHeaders(firebaseDependencies)];\r\n case 1:\r\n headers = _a.sent();\r\n unsubscribeOptions = {\r\n method: 'DELETE',\r\n headers: headers\r\n };\r\n _a.label = 2;\r\n case 2:\r\n _a.trys.push([2, 5, , 6]);\r\n return [4 /*yield*/, fetch(getEndpoint(firebaseDependencies.appConfig) + \"/\" + token, unsubscribeOptions)];\r\n case 3:\r\n response = _a.sent();\r\n return [4 /*yield*/, response.json()];\r\n case 4:\r\n responseData = _a.sent();\r\n if (responseData.error) {\r\n message = responseData.error.message;\r\n throw ERROR_FACTORY.create(\"token-unsubscribe-failed\" /* TOKEN_UNSUBSCRIBE_FAILED */, {\r\n errorInfo: message\r\n });\r\n }\r\n return [3 /*break*/, 6];\r\n case 5:\r\n err_3 = _a.sent();\r\n throw ERROR_FACTORY.create(\"token-unsubscribe-failed\" /* TOKEN_UNSUBSCRIBE_FAILED */, {\r\n errorInfo: err_3\r\n });\r\n case 6: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n}\r\nfunction getEndpoint(_a) {\r\n var projectId = _a.projectId;\r\n return ENDPOINT + \"/projects/\" + projectId + \"/registrations\";\r\n}\r\nfunction getHeaders(_a) {\r\n var appConfig = _a.appConfig, installations = _a.installations;\r\n return __awaiter(this, void 0, void 0, function () {\r\n var authToken;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0: return [4 /*yield*/, installations.getToken()];\r\n case 1:\r\n authToken = _b.sent();\r\n return [2 /*return*/, new Headers({\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json',\r\n 'x-goog-api-key': appConfig.apiKey,\r\n 'x-goog-firebase-installations-auth': \"FIS \" + authToken\r\n })];\r\n }\r\n });\r\n });\r\n}\r\nfunction getBody(_a) {\r\n var p256dh = _a.p256dh, auth = _a.auth, endpoint = _a.endpoint, vapidKey = _a.vapidKey;\r\n var body = {\r\n web: {\r\n endpoint: endpoint,\r\n auth: auth,\r\n p256dh: p256dh\r\n }\r\n };\r\n if (vapidKey !== DEFAULT_VAPID_KEY) {\r\n body.web.applicationPubKey = vapidKey;\r\n }\r\n return body;\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\n/** UpdateRegistration will be called once every week. */\r\nvar TOKEN_EXPIRATION_MS = 7 * 24 * 60 * 60 * 1000; // 7 days\r\nfunction getToken(firebaseDependencies, swRegistration, vapidKey) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var pushSubscription, tokenDetails, subscriptionOptions, e_1;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (Notification.permission !== 'granted') {\r\n throw ERROR_FACTORY.create(\"permission-blocked\" /* PERMISSION_BLOCKED */);\r\n }\r\n return [4 /*yield*/, getPushSubscription(swRegistration, vapidKey)];\r\n case 1:\r\n pushSubscription = _a.sent();\r\n return [4 /*yield*/, dbGet(firebaseDependencies)];\r\n case 2:\r\n tokenDetails = _a.sent();\r\n subscriptionOptions = {\r\n vapidKey: vapidKey,\r\n swScope: swRegistration.scope,\r\n endpoint: pushSubscription.endpoint,\r\n auth: arrayToBase64(pushSubscription.getKey('auth')),\r\n p256dh: arrayToBase64(pushSubscription.getKey('p256dh'))\r\n };\r\n if (!!tokenDetails) return [3 /*break*/, 3];\r\n // No token, get a new one.\r\n return [2 /*return*/, getNewToken(firebaseDependencies, subscriptionOptions)];\r\n case 3:\r\n if (!!isTokenValid(tokenDetails.subscriptionOptions, subscriptionOptions)) return [3 /*break*/, 8];\r\n _a.label = 4;\r\n case 4:\r\n _a.trys.push([4, 6, , 7]);\r\n return [4 /*yield*/, requestDeleteToken(firebaseDependencies, tokenDetails.token)];\r\n case 5:\r\n _a.sent();\r\n return [3 /*break*/, 7];\r\n case 6:\r\n e_1 = _a.sent();\r\n // Suppress errors because of #2364\r\n console.warn(e_1);\r\n return [3 /*break*/, 7];\r\n case 7: return [2 /*return*/, getNewToken(firebaseDependencies, subscriptionOptions)];\r\n case 8:\r\n if (Date.now() >= tokenDetails.createTime + TOKEN_EXPIRATION_MS) {\r\n // Weekly token refresh\r\n return [2 /*return*/, updateToken({\r\n token: tokenDetails.token,\r\n createTime: Date.now(),\r\n subscriptionOptions: subscriptionOptions\r\n }, firebaseDependencies, swRegistration)];\r\n }\r\n else {\r\n // Valid token, nothing to do.\r\n return [2 /*return*/, tokenDetails.token];\r\n }\r\n case 9: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * This method deletes the token from the database, unsubscribes the token from FCM, and unregisters\r\n * the push subscription if it exists.\r\n */\r\nfunction deleteToken(firebaseDependencies, swRegistration) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var tokenDetails, pushSubscription;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, dbGet(firebaseDependencies)];\r\n case 1:\r\n tokenDetails = _a.sent();\r\n if (!tokenDetails) return [3 /*break*/, 4];\r\n return [4 /*yield*/, requestDeleteToken(firebaseDependencies, tokenDetails.token)];\r\n case 2:\r\n _a.sent();\r\n return [4 /*yield*/, dbRemove(firebaseDependencies)];\r\n case 3:\r\n _a.sent();\r\n _a.label = 4;\r\n case 4: return [4 /*yield*/, swRegistration.pushManager.getSubscription()];\r\n case 5:\r\n pushSubscription = _a.sent();\r\n if (pushSubscription) {\r\n return [2 /*return*/, pushSubscription.unsubscribe()];\r\n }\r\n // If there's no SW, consider it a success.\r\n return [2 /*return*/, true];\r\n }\r\n });\r\n });\r\n}\r\nfunction updateToken(tokenDetails, firebaseDependencies, swRegistration) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var updatedToken, updatedTokenDetails, e_2;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n _a.trys.push([0, 3, , 5]);\r\n return [4 /*yield*/, requestUpdateToken(firebaseDependencies, tokenDetails)];\r\n case 1:\r\n updatedToken = _a.sent();\r\n updatedTokenDetails = __assign(__assign({}, tokenDetails), { token: updatedToken, createTime: Date.now() });\r\n return [4 /*yield*/, dbSet(firebaseDependencies, updatedTokenDetails)];\r\n case 2:\r\n _a.sent();\r\n return [2 /*return*/, updatedToken];\r\n case 3:\r\n e_2 = _a.sent();\r\n return [4 /*yield*/, deleteToken(firebaseDependencies, swRegistration)];\r\n case 4:\r\n _a.sent();\r\n throw e_2;\r\n case 5: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n}\r\nfunction getNewToken(firebaseDependencies, subscriptionOptions) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var token, tokenDetails;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, requestGetToken(firebaseDependencies, subscriptionOptions)];\r\n case 1:\r\n token = _a.sent();\r\n tokenDetails = {\r\n token: token,\r\n createTime: Date.now(),\r\n subscriptionOptions: subscriptionOptions\r\n };\r\n return [4 /*yield*/, dbSet(firebaseDependencies, tokenDetails)];\r\n case 2:\r\n _a.sent();\r\n return [2 /*return*/, tokenDetails.token];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * Gets a PushSubscription for the current user.\r\n */\r\nfunction getPushSubscription(swRegistration, vapidKey) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var subscription;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, swRegistration.pushManager.getSubscription()];\r\n case 1:\r\n subscription = _a.sent();\r\n if (subscription) {\r\n return [2 /*return*/, subscription];\r\n }\r\n return [2 /*return*/, swRegistration.pushManager.subscribe({\r\n userVisibleOnly: true,\r\n // Chrome <= 75 doesn't support base64-encoded VAPID key. For backward compatibility, VAPID key\r\n // submitted to pushManager#subscribe must be of type Uint8Array.\r\n applicationServerKey: base64ToArray(vapidKey)\r\n })];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * Checks if the saved tokenDetails object matches the configuration provided.\r\n */\r\nfunction isTokenValid(dbOptions, currentOptions) {\r\n var isVapidKeyEqual = currentOptions.vapidKey === dbOptions.vapidKey;\r\n var isEndpointEqual = currentOptions.endpoint === dbOptions.endpoint;\r\n var isAuthEqual = currentOptions.auth === dbOptions.auth;\r\n var isP256dhEqual = currentOptions.p256dh === dbOptions.p256dh;\r\n return isVapidKeyEqual && isEndpointEqual && isAuthEqual && isP256dhEqual;\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 externalizePayload(internalPayload) {\r\n var payload = {\r\n from: internalPayload.from,\r\n // eslint-disable-next-line camelcase\r\n collapseKey: internalPayload.collapse_key,\r\n // eslint-disable-next-line camelcase\r\n messageId: internalPayload.fcm_message_id\r\n };\r\n propagateNotificationPayload(payload, internalPayload);\r\n propagateDataPayload(payload, internalPayload);\r\n propagateFcmOptions(payload, internalPayload);\r\n return payload;\r\n}\r\nfunction propagateNotificationPayload(payload, messagePayloadInternal) {\r\n if (!messagePayloadInternal.notification) {\r\n return;\r\n }\r\n payload.notification = {};\r\n var title = messagePayloadInternal.notification.title;\r\n if (!!title) {\r\n payload.notification.title = title;\r\n }\r\n var body = messagePayloadInternal.notification.body;\r\n if (!!body) {\r\n payload.notification.body = body;\r\n }\r\n var image = messagePayloadInternal.notification.image;\r\n if (!!image) {\r\n payload.notification.image = image;\r\n }\r\n}\r\nfunction propagateDataPayload(payload, messagePayloadInternal) {\r\n if (!messagePayloadInternal.data) {\r\n return;\r\n }\r\n payload.data = messagePayloadInternal.data;\r\n}\r\nfunction propagateFcmOptions(payload, messagePayloadInternal) {\r\n if (!messagePayloadInternal.fcmOptions) {\r\n return;\r\n }\r\n payload.fcmOptions = {};\r\n var link = messagePayloadInternal.fcmOptions.link;\r\n if (!!link) {\r\n payload.fcmOptions.link = link;\r\n }\r\n // eslint-disable-next-line camelcase\r\n var analyticsLabel = messagePayloadInternal.fcmOptions.analytics_label;\r\n if (!!analyticsLabel) {\r\n payload.fcmOptions.analyticsLabel = analyticsLabel;\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\nfunction isConsoleMessage(data) {\r\n // This message has a campaign ID, meaning it was sent using the Firebase Console.\r\n return typeof data === 'object' && !!data && CONSOLE_CAMPAIGN_ID in data;\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\n/** Returns a promise that resolves after given time passes. */\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 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 SwController = /** @class */ (function () {\r\n function SwController(firebaseDependencies) {\r\n var _this = this;\r\n this.firebaseDependencies = firebaseDependencies;\r\n // A boolean flag to determine wether an app is using onBackgroundMessage or\r\n // setBackgroundMessageHandler. onBackgroundMessage will receive a MessagePayload regardless of if\r\n // a notification is displayed. Whereas, setBackgroundMessageHandler will swallow the\r\n // MessagePayload if a NotificationPayload is included.\r\n this.isOnBackgroundMessageUsed = null;\r\n this.vapidKey = null;\r\n this.bgMessageHandler = null;\r\n self.addEventListener('push', function (e) {\r\n e.waitUntil(_this.onPush(e));\r\n });\r\n self.addEventListener('pushsubscriptionchange', function (e) {\r\n e.waitUntil(_this.onSubChange(e));\r\n });\r\n self.addEventListener('notificationclick', function (e) {\r\n e.waitUntil(_this.onNotificationClick(e));\r\n });\r\n }\r\n Object.defineProperty(SwController.prototype, \"app\", {\r\n get: function () {\r\n return this.firebaseDependencies.app;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n /**\r\n * @deprecated. Use onBackgroundMessage(nextOrObserver: NextFn | Observer):\r\n * Unsubscribe instead.\r\n *\r\n * Calling setBackgroundMessageHandler will opt in to some specific behaviors.\r\n *\r\n * 1.) If a notification doesn't need to be shown due to a window already being visible, then push\r\n * messages will be sent to the page. 2.) If a notification needs to be shown, and the message\r\n * contains no notification data this method will be called and the promise it returns will be\r\n * passed to event.waitUntil. If you do not set this callback then all push messages will let and\r\n * the developer can handle them in a their own 'push' event callback\r\n *\r\n * @param callback The callback to be called when a push message is received and a notification\r\n * must be shown. The callback will be given the data from the push message.\r\n */\r\n SwController.prototype.setBackgroundMessageHandler = function (callback) {\r\n this.isOnBackgroundMessageUsed = false;\r\n if (!callback || typeof callback !== 'function') {\r\n throw ERROR_FACTORY.create(\"invalid-bg-handler\" /* INVALID_BG_HANDLER */);\r\n }\r\n this.bgMessageHandler = callback;\r\n };\r\n SwController.prototype.onBackgroundMessage = function (nextOrObserver) {\r\n var _this = this;\r\n this.isOnBackgroundMessageUsed = true;\r\n this.bgMessageHandler = nextOrObserver;\r\n return function () {\r\n _this.bgMessageHandler = null;\r\n };\r\n };\r\n // TODO: Remove getToken from SW Controller. Calling this from an old SW can cause all kinds of\r\n // trouble.\r\n SwController.prototype.getToken = function () {\r\n var _a, _b;\r\n return __awaiter(this, void 0, void 0, function () {\r\n var tokenDetails;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n if (!!this.vapidKey) return [3 /*break*/, 2];\r\n return [4 /*yield*/, dbGet(this.firebaseDependencies)];\r\n case 1:\r\n tokenDetails = _c.sent();\r\n this.vapidKey =\r\n (_b = (_a = tokenDetails === null || tokenDetails === void 0 ? void 0 : tokenDetails.subscriptionOptions) === null || _a === void 0 ? void 0 : _a.vapidKey) !== null && _b !== void 0 ? _b : DEFAULT_VAPID_KEY;\r\n _c.label = 2;\r\n case 2: return [2 /*return*/, getToken(this.firebaseDependencies, self.registration, this.vapidKey)];\r\n }\r\n });\r\n });\r\n };\r\n // TODO: Remove deleteToken from SW Controller. Calling this from an old SW can cause all kinds of\r\n // trouble.\r\n SwController.prototype.deleteToken = function () {\r\n return deleteToken(this.firebaseDependencies, self.registration);\r\n };\r\n SwController.prototype.requestPermission = function () {\r\n throw ERROR_FACTORY.create(\"only-available-in-window\" /* AVAILABLE_IN_WINDOW */);\r\n };\r\n // TODO: Remove this together with getToken from SW Controller.\r\n SwController.prototype.usePublicVapidKey = function (vapidKey) {\r\n if (this.vapidKey !== null) {\r\n throw ERROR_FACTORY.create(\"use-vapid-key-after-get-token\" /* USE_VAPID_KEY_AFTER_GET_TOKEN */);\r\n }\r\n if (typeof vapidKey !== 'string' || vapidKey.length === 0) {\r\n throw ERROR_FACTORY.create(\"invalid-vapid-key\" /* INVALID_VAPID_KEY */);\r\n }\r\n this.vapidKey = vapidKey;\r\n };\r\n SwController.prototype.useServiceWorker = function () {\r\n throw ERROR_FACTORY.create(\"only-available-in-window\" /* AVAILABLE_IN_WINDOW */);\r\n };\r\n SwController.prototype.onMessage = function () {\r\n throw ERROR_FACTORY.create(\"only-available-in-window\" /* AVAILABLE_IN_WINDOW */);\r\n };\r\n SwController.prototype.onTokenRefresh = function () {\r\n throw ERROR_FACTORY.create(\"only-available-in-window\" /* AVAILABLE_IN_WINDOW */);\r\n };\r\n /**\r\n * A handler for push events that shows notifications based on the content of the payload.\r\n *\r\n * The payload must be a JSON-encoded Object with a `notification` key. The value of the\r\n * `notification` property will be used as the NotificationOptions object passed to\r\n * showNotification. Additionally, the `title` property of the notification object will be used as\r\n * the title.\r\n *\r\n * If there is no notification data in the payload then no notification will be shown.\r\n */\r\n SwController.prototype.onPush = function (event) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var internalPayload, clientList, isNotificationShown, payload;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n internalPayload = getMessagePayloadInternal(event);\r\n if (!internalPayload) {\r\n console.debug(TAG +\r\n 'failed to get parsed MessagePayload from the PushEvent. Skip handling the push.');\r\n return [2 /*return*/];\r\n }\r\n return [4 /*yield*/, getClientList()];\r\n case 1:\r\n clientList = _a.sent();\r\n if (hasVisibleClients(clientList)) {\r\n return [2 /*return*/, sendMessagePayloadInternalToWindows(clientList, internalPayload)];\r\n }\r\n isNotificationShown = false;\r\n if (!!!internalPayload.notification) return [3 /*break*/, 3];\r\n return [4 /*yield*/, showNotification(wrapInternalPayload(internalPayload))];\r\n case 2:\r\n _a.sent();\r\n isNotificationShown = true;\r\n _a.label = 3;\r\n case 3:\r\n // MessagePayload is only passed to `onBackgroundMessage`. Skip passing MessagePayload for\r\n // the legacy `setBackgroundMessageHandler` to preserve the SDK behaviors.\r\n if (isNotificationShown === true &&\r\n this.isOnBackgroundMessageUsed === false) {\r\n return [2 /*return*/];\r\n }\r\n if (!!this.bgMessageHandler) {\r\n payload = externalizePayload(internalPayload);\r\n if (typeof this.bgMessageHandler === 'function') {\r\n this.bgMessageHandler(payload);\r\n }\r\n else {\r\n this.bgMessageHandler.next(payload);\r\n }\r\n }\r\n // wait briefly to allow onBackgroundMessage to complete\r\n return [4 /*yield*/, sleep(BACKGROUND_HANDLE_EXECUTION_TIME_LIMIT_MS)];\r\n case 4:\r\n // wait briefly to allow onBackgroundMessage to complete\r\n _a.sent();\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n SwController.prototype.onSubChange = function (event) {\r\n var _a, _b;\r\n return __awaiter(this, void 0, void 0, function () {\r\n var newSubscription, tokenDetails;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n newSubscription = event.newSubscription;\r\n if (!!newSubscription) return [3 /*break*/, 2];\r\n // Subscription revoked, delete token\r\n return [4 /*yield*/, deleteToken(this.firebaseDependencies, self.registration)];\r\n case 1:\r\n // Subscription revoked, delete token\r\n _c.sent();\r\n return [2 /*return*/];\r\n case 2: return [4 /*yield*/, dbGet(this.firebaseDependencies)];\r\n case 3:\r\n tokenDetails = _c.sent();\r\n return [4 /*yield*/, deleteToken(this.firebaseDependencies, self.registration)];\r\n case 4:\r\n _c.sent();\r\n return [4 /*yield*/, getToken(this.firebaseDependencies, self.registration, (_b = (_a = tokenDetails === null || tokenDetails === void 0 ? void 0 : tokenDetails.subscriptionOptions) === null || _a === void 0 ? void 0 : _a.vapidKey) !== null && _b !== void 0 ? _b : DEFAULT_VAPID_KEY)];\r\n case 5:\r\n _c.sent();\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n SwController.prototype.onNotificationClick = function (event) {\r\n var _a, _b;\r\n return __awaiter(this, void 0, void 0, function () {\r\n var internalPayload, link, url, originUrl, client;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n internalPayload = (_b = (_a = event.notification) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b[FCM_MSG];\r\n if (!internalPayload) {\r\n return [2 /*return*/];\r\n }\r\n else if (event.action) {\r\n // User clicked on an action button. This will allow developers to act on action button clicks\r\n // by using a custom onNotificationClick listener that they define.\r\n return [2 /*return*/];\r\n }\r\n // Prevent other listeners from receiving the event\r\n event.stopImmediatePropagation();\r\n event.notification.close();\r\n link = getLink(internalPayload);\r\n if (!link) {\r\n return [2 /*return*/];\r\n }\r\n url = new URL(link, self.location.href);\r\n originUrl = new URL(self.location.origin);\r\n if (url.host !== originUrl.host) {\r\n return [2 /*return*/];\r\n }\r\n return [4 /*yield*/, getWindowClient(url)];\r\n case 1:\r\n client = _c.sent();\r\n if (!!client) return [3 /*break*/, 4];\r\n return [4 /*yield*/, self.clients.openWindow(link)];\r\n case 2:\r\n client = _c.sent();\r\n // Wait three seconds for the client to initialize and set up the message handler so that it\r\n // can receive the message.\r\n return [4 /*yield*/, sleep(FOREGROUND_HANDLE_PREPARATION_TIME_MS)];\r\n case 3:\r\n // Wait three seconds for the client to initialize and set up the message handler so that it\r\n // can receive the message.\r\n _c.sent();\r\n return [3 /*break*/, 6];\r\n case 4: return [4 /*yield*/, client.focus()];\r\n case 5:\r\n client = _c.sent();\r\n _c.label = 6;\r\n case 6:\r\n if (!client) {\r\n // Window Client will not be returned if it's for a third party origin.\r\n return [2 /*return*/];\r\n }\r\n internalPayload.messageType = MessageType.NOTIFICATION_CLICKED;\r\n internalPayload.isFirebaseMessaging = true;\r\n return [2 /*return*/, client.postMessage(internalPayload)];\r\n }\r\n });\r\n });\r\n };\r\n return SwController;\r\n}());\r\nfunction wrapInternalPayload(internalPayload) {\r\n var _a;\r\n var wrappedInternalPayload = __assign({}, internalPayload.notification);\r\n // Put the message payload under FCM_MSG name so we can identify the notification as being an FCM\r\n // notification vs a notification from somewhere else (i.e. normal web push or developer generated\r\n // notification).\r\n wrappedInternalPayload.data = (_a = {},\r\n _a[FCM_MSG] = internalPayload,\r\n _a);\r\n return wrappedInternalPayload;\r\n}\r\nfunction getMessagePayloadInternal(_a) {\r\n var data = _a.data;\r\n if (!data) {\r\n return null;\r\n }\r\n try {\r\n return data.json();\r\n }\r\n catch (err) {\r\n // Not JSON so not an FCM message.\r\n return null;\r\n }\r\n}\r\n/**\r\n * @param url The URL to look for when focusing a client.\r\n * @return Returns an existing window client or a newly opened WindowClient.\r\n */\r\nfunction getWindowClient(url) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var clientList, clientList_1, clientList_1_1, client, clientUrl;\r\n var e_1, _a;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0: return [4 /*yield*/, getClientList()];\r\n case 1:\r\n clientList = _b.sent();\r\n try {\r\n for (clientList_1 = __values(clientList), clientList_1_1 = clientList_1.next(); !clientList_1_1.done; clientList_1_1 = clientList_1.next()) {\r\n client = clientList_1_1.value;\r\n clientUrl = new URL(client.url, self.location.href);\r\n if (url.host === clientUrl.host) {\r\n return [2 /*return*/, client];\r\n }\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (clientList_1_1 && !clientList_1_1.done && (_a = clientList_1.return)) _a.call(clientList_1);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n return [2 /*return*/, null];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * @returns If there is currently a visible WindowClient, this method will resolve to true,\r\n * otherwise false.\r\n */\r\nfunction hasVisibleClients(clientList) {\r\n return clientList.some(function (client) {\r\n return client.visibilityState === 'visible' &&\r\n // Ignore chrome-extension clients as that matches the background pages of extensions, which\r\n // are always considered visible for some reason.\r\n !client.url.startsWith('chrome-extension://');\r\n });\r\n}\r\nfunction sendMessagePayloadInternalToWindows(clientList, internalPayload) {\r\n var e_2, _a;\r\n internalPayload.isFirebaseMessaging = true;\r\n internalPayload.messageType = MessageType.PUSH_RECEIVED;\r\n try {\r\n for (var clientList_2 = __values(clientList), clientList_2_1 = clientList_2.next(); !clientList_2_1.done; clientList_2_1 = clientList_2.next()) {\r\n var client = clientList_2_1.value;\r\n client.postMessage(internalPayload);\r\n }\r\n }\r\n catch (e_2_1) { e_2 = { error: e_2_1 }; }\r\n finally {\r\n try {\r\n if (clientList_2_1 && !clientList_2_1.done && (_a = clientList_2.return)) _a.call(clientList_2);\r\n }\r\n finally { if (e_2) throw e_2.error; }\r\n }\r\n}\r\nfunction getClientList() {\r\n return self.clients.matchAll({\r\n type: 'window',\r\n includeUncontrolled: true\r\n // TS doesn't know that \"type: 'window'\" means it'll return WindowClient[]\r\n });\r\n}\r\nfunction showNotification(notificationPayloadInternal) {\r\n var _a;\r\n // Note: Firefox does not support the maxActions property.\r\n // https://developer.mozilla.org/en-US/docs/Web/API/notification/maxActions\r\n var actions = notificationPayloadInternal.actions;\r\n var maxActions = Notification.maxActions;\r\n if (actions && maxActions && actions.length > maxActions) {\r\n console.warn(\"This browser only supports \" + maxActions + \" actions. The remaining actions will not be displayed.\");\r\n }\r\n return self.registration.showNotification(\r\n /* title= */ (_a = notificationPayloadInternal.title) !== null && _a !== void 0 ? _a : '', notificationPayloadInternal);\r\n}\r\nfunction getLink(payload) {\r\n var _a, _b, _c;\r\n // eslint-disable-next-line camelcase\r\n var link = (_b = (_a = payload.fcmOptions) === null || _a === void 0 ? void 0 : _a.link) !== null && _b !== void 0 ? _b : (_c = payload.notification) === null || _c === void 0 ? void 0 : _c.click_action;\r\n if (link) {\r\n return link;\r\n }\r\n if (isConsoleMessage(payload.data)) {\r\n // Notification created in the Firebase Console. Redirect to origin.\r\n return self.location.origin;\r\n }\r\n else {\r\n return null;\r\n }\r\n}\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 WindowController = /** @class */ (function () {\r\n function WindowController(firebaseDependencies) {\r\n var _this = this;\r\n this.firebaseDependencies = firebaseDependencies;\r\n this.vapidKey = null;\r\n this.onMessageCallback = null;\r\n navigator.serviceWorker.addEventListener('message', function (e) {\r\n return _this.messageEventListener(e);\r\n });\r\n }\r\n Object.defineProperty(WindowController.prototype, \"app\", {\r\n get: function () {\r\n return this.firebaseDependencies.app;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n WindowController.prototype.messageEventListener = function (event) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var internalPayload, dataPayload;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n internalPayload = event.data;\r\n if (!internalPayload.isFirebaseMessaging) {\r\n return [2 /*return*/];\r\n }\r\n // onMessageCallback is either a function or observer/subscriber.\r\n // TODO: in the modularization release, have onMessage handle type MessagePayload as supposed to\r\n // the legacy payload where some fields are in snake cases.\r\n if (this.onMessageCallback &&\r\n internalPayload.messageType === MessageType.PUSH_RECEIVED) {\r\n if (typeof this.onMessageCallback === 'function') {\r\n this.onMessageCallback(stripInternalFields(Object.assign({}, internalPayload)));\r\n }\r\n else {\r\n this.onMessageCallback.next(Object.assign({}, internalPayload));\r\n }\r\n }\r\n dataPayload = internalPayload.data;\r\n if (!(isConsoleMessage(dataPayload) &&\r\n dataPayload[CONSOLE_CAMPAIGN_ANALYTICS_ENABLED] === '1')) return [3 /*break*/, 2];\r\n return [4 /*yield*/, this.logEvent(internalPayload.messageType, dataPayload)];\r\n case 1:\r\n _a.sent();\r\n _a.label = 2;\r\n case 2: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n WindowController.prototype.getVapidKey = function () {\r\n return this.vapidKey;\r\n };\r\n WindowController.prototype.getSwReg = function () {\r\n return this.swRegistration;\r\n };\r\n WindowController.prototype.getToken = function (options) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!(Notification.permission === 'default')) return [3 /*break*/, 2];\r\n return [4 /*yield*/, Notification.requestPermission()];\r\n case 1:\r\n _a.sent();\r\n _a.label = 2;\r\n case 2:\r\n if (Notification.permission !== 'granted') {\r\n throw ERROR_FACTORY.create(\"permission-blocked\" /* PERMISSION_BLOCKED */);\r\n }\r\n return [4 /*yield*/, this.updateVapidKey(options === null || options === void 0 ? void 0 : options.vapidKey)];\r\n case 3:\r\n _a.sent();\r\n return [4 /*yield*/, this.updateSwReg(options === null || options === void 0 ? void 0 : options.serviceWorkerRegistration)];\r\n case 4:\r\n _a.sent();\r\n return [2 /*return*/, getToken(this.firebaseDependencies, this.swRegistration, this.vapidKey)];\r\n }\r\n });\r\n });\r\n };\r\n WindowController.prototype.updateVapidKey = function (vapidKey) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n if (!!vapidKey) {\r\n this.vapidKey = vapidKey;\r\n }\r\n else if (!this.vapidKey) {\r\n this.vapidKey = DEFAULT_VAPID_KEY;\r\n }\r\n return [2 /*return*/];\r\n });\r\n });\r\n };\r\n WindowController.prototype.updateSwReg = function (swRegistration) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!(!swRegistration && !this.swRegistration)) return [3 /*break*/, 2];\r\n return [4 /*yield*/, this.registerDefaultSw()];\r\n case 1:\r\n _a.sent();\r\n _a.label = 2;\r\n case 2:\r\n if (!swRegistration && !!this.swRegistration) {\r\n return [2 /*return*/];\r\n }\r\n if (!(swRegistration instanceof ServiceWorkerRegistration)) {\r\n throw ERROR_FACTORY.create(\"invalid-sw-registration\" /* INVALID_SW_REGISTRATION */);\r\n }\r\n this.swRegistration = swRegistration;\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n WindowController.prototype.registerDefaultSw = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, e_1;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n _b.trys.push([0, 2, , 3]);\r\n _a = this;\r\n return [4 /*yield*/, navigator.serviceWorker.register(DEFAULT_SW_PATH, {\r\n scope: DEFAULT_SW_SCOPE\r\n })];\r\n case 1:\r\n _a.swRegistration = _b.sent();\r\n // The timing when browser updates sw when sw has an update is unreliable by my experiment. It\r\n // leads to version conflict when the SDK upgrades to a newer version in the main page, but sw\r\n // is stuck with the old version. For example,\r\n // https://github.com/firebase/firebase-js-sdk/issues/2590 The following line reliably updates\r\n // sw if there was an update.\r\n this.swRegistration.update().catch(function () {\r\n /* it is non blocking and we don't care if it failed */\r\n });\r\n return [3 /*break*/, 3];\r\n case 2:\r\n e_1 = _b.sent();\r\n throw ERROR_FACTORY.create(\"failed-service-worker-registration\" /* FAILED_DEFAULT_REGISTRATION */, {\r\n browserErrorMessage: e_1.message\r\n });\r\n case 3: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n WindowController.prototype.deleteToken = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!!this.swRegistration) return [3 /*break*/, 2];\r\n return [4 /*yield*/, this.registerDefaultSw()];\r\n case 1:\r\n _a.sent();\r\n _a.label = 2;\r\n case 2: return [2 /*return*/, deleteToken(this.firebaseDependencies, this.swRegistration)];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * Request permission if it is not currently granted.\r\n *\r\n * @return Resolves if the permission was granted, rejects otherwise.\r\n *\r\n * @deprecated Use Notification.requestPermission() instead.\r\n * https://developer.mozilla.org/en-US/docs/Web/API/Notification/requestPermission\r\n */\r\n WindowController.prototype.requestPermission = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var permissionResult;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (Notification.permission === 'granted') {\r\n return [2 /*return*/];\r\n }\r\n return [4 /*yield*/, Notification.requestPermission()];\r\n case 1:\r\n permissionResult = _a.sent();\r\n if (permissionResult === 'granted') {\r\n return [2 /*return*/];\r\n }\r\n else if (permissionResult === 'denied') {\r\n throw ERROR_FACTORY.create(\"permission-blocked\" /* PERMISSION_BLOCKED */);\r\n }\r\n else {\r\n throw ERROR_FACTORY.create(\"permission-default\" /* PERMISSION_DEFAULT */);\r\n }\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * @deprecated. Use getToken(options?: {vapidKey?: string; serviceWorkerRegistration?:\r\n * ServiceWorkerRegistration;}): Promise instead.\r\n */\r\n WindowController.prototype.usePublicVapidKey = function (vapidKey) {\r\n if (this.vapidKey !== null) {\r\n throw ERROR_FACTORY.create(\"use-vapid-key-after-get-token\" /* USE_VAPID_KEY_AFTER_GET_TOKEN */);\r\n }\r\n if (typeof vapidKey !== 'string' || vapidKey.length === 0) {\r\n throw ERROR_FACTORY.create(\"invalid-vapid-key\" /* INVALID_VAPID_KEY */);\r\n }\r\n this.vapidKey = vapidKey;\r\n };\r\n /**\r\n * @deprecated. Use getToken(options?: {vapidKey?: string; serviceWorkerRegistration?:\r\n * ServiceWorkerRegistration;}): Promise instead.\r\n */\r\n WindowController.prototype.useServiceWorker = function (swRegistration) {\r\n if (!(swRegistration instanceof ServiceWorkerRegistration)) {\r\n throw ERROR_FACTORY.create(\"invalid-sw-registration\" /* INVALID_SW_REGISTRATION */);\r\n }\r\n if (this.swRegistration) {\r\n throw ERROR_FACTORY.create(\"use-sw-after-get-token\" /* USE_SW_AFTER_GET_TOKEN */);\r\n }\r\n this.swRegistration = swRegistration;\r\n };\r\n /**\r\n * @param nextOrObserver An observer object or a function triggered on message.\r\n *\r\n * @return The unsubscribe function for the observer.\r\n */\r\n WindowController.prototype.onMessage = function (nextOrObserver) {\r\n var _this = this;\r\n this.onMessageCallback = nextOrObserver;\r\n return function () {\r\n _this.onMessageCallback = null;\r\n };\r\n };\r\n WindowController.prototype.setBackgroundMessageHandler = function () {\r\n throw ERROR_FACTORY.create(\"only-available-in-sw\" /* AVAILABLE_IN_SW */);\r\n };\r\n WindowController.prototype.onBackgroundMessage = function () {\r\n throw ERROR_FACTORY.create(\"only-available-in-sw\" /* AVAILABLE_IN_SW */);\r\n };\r\n /**\r\n * @deprecated No-op. It was initially designed with token rotation requests from server in mind.\r\n * However, the plan to implement such feature was abandoned.\r\n */\r\n WindowController.prototype.onTokenRefresh = function () {\r\n return function () { };\r\n };\r\n WindowController.prototype.logEvent = function (messageType, data) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var eventType, analytics;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n eventType = getEventType(messageType);\r\n return [4 /*yield*/, this.firebaseDependencies.analyticsProvider.get()];\r\n case 1:\r\n analytics = _a.sent();\r\n analytics.logEvent(eventType, {\r\n /* eslint-disable camelcase */\r\n message_id: data[CONSOLE_CAMPAIGN_ID],\r\n message_name: data[CONSOLE_CAMPAIGN_NAME],\r\n message_time: data[CONSOLE_CAMPAIGN_TIME],\r\n message_device_time: Math.floor(Date.now() / 1000)\r\n /* eslint-enable camelcase */\r\n });\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n return WindowController;\r\n}());\r\nfunction getEventType(messageType) {\r\n switch (messageType) {\r\n case MessageType.NOTIFICATION_CLICKED:\r\n return 'notification_open';\r\n case MessageType.PUSH_RECEIVED:\r\n return 'notification_foreground';\r\n default:\r\n throw new Error();\r\n }\r\n}\r\nfunction stripInternalFields(internalPayload) {\r\n delete internalPayload.messageType;\r\n delete internalPayload.isFirebaseMessaging;\r\n return internalPayload;\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\nfunction extractAppConfig(app) {\r\n var e_1, _a;\r\n if (!app || !app.options) {\r\n throw getMissingValueError('App Configuration Object');\r\n }\r\n if (!app.name) {\r\n throw getMissingValueError('App Name');\r\n }\r\n // Required app config keys\r\n var configKeys = [\r\n 'projectId',\r\n 'apiKey',\r\n 'appId',\r\n 'messagingSenderId'\r\n ];\r\n var options = app.options;\r\n try {\r\n for (var configKeys_1 = __values(configKeys), configKeys_1_1 = configKeys_1.next(); !configKeys_1_1.done; configKeys_1_1 = configKeys_1.next()) {\r\n var keyName = configKeys_1_1.value;\r\n if (!options[keyName]) {\r\n throw getMissingValueError(keyName);\r\n }\r\n }\r\n }\r\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\r\n finally {\r\n try {\r\n if (configKeys_1_1 && !configKeys_1_1.done && (_a = configKeys_1.return)) _a.call(configKeys_1);\r\n }\r\n finally { if (e_1) throw e_1.error; }\r\n }\r\n return {\r\n appName: app.name,\r\n projectId: options.projectId,\r\n apiKey: options.apiKey,\r\n appId: options.appId,\r\n senderId: options.messagingSenderId\r\n };\r\n}\r\nfunction getMissingValueError(valueName) {\r\n return ERROR_FACTORY.create(\"missing-app-config-values\" /* MISSING_APP_CONFIG_VALUES */, {\r\n valueName: valueName\r\n });\r\n}\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 MESSAGING_NAME = 'messaging';\r\nfunction factoryMethod(container) {\r\n // Dependencies.\r\n var app = container.getProvider('app').getImmediate();\r\n var appConfig = extractAppConfig(app);\r\n var installations = container.getProvider('installations').getImmediate();\r\n var analyticsProvider = container.getProvider('analytics-internal');\r\n var firebaseDependencies = {\r\n app: app,\r\n appConfig: appConfig,\r\n installations: installations,\r\n analyticsProvider: analyticsProvider\r\n };\r\n if (!isSupported()) {\r\n throw ERROR_FACTORY.create(\"unsupported-browser\" /* UNSUPPORTED_BROWSER */);\r\n }\r\n if (self && 'ServiceWorkerGlobalScope' in self) {\r\n // Running in ServiceWorker context\r\n return new SwController(firebaseDependencies);\r\n }\r\n else {\r\n // Assume we are in the window context.\r\n return new WindowController(firebaseDependencies);\r\n }\r\n}\r\nvar NAMESPACE_EXPORTS = {\r\n isSupported: isSupported\r\n};\r\nfirebase.INTERNAL.registerComponent(new Component(MESSAGING_NAME, factoryMethod, \"PUBLIC\" /* PUBLIC */).setServiceProps(NAMESPACE_EXPORTS));\r\nfunction isSupported() {\r\n if (self && 'ServiceWorkerGlobalScope' in self) {\r\n // Running in ServiceWorker context\r\n return isSWControllerSupported();\r\n }\r\n else {\r\n // Assume we are in the window context.\r\n return isWindowControllerSupported();\r\n }\r\n}\r\n/**\r\n * Checks to see if the required APIs exist.\r\n */\r\nfunction isWindowControllerSupported() {\r\n return ('indexedDB' in window &&\r\n indexedDB !== null &&\r\n navigator.cookieEnabled &&\r\n 'serviceWorker' in navigator &&\r\n 'PushManager' in window &&\r\n 'Notification' in window &&\r\n 'fetch' in window &&\r\n ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\r\n PushSubscription.prototype.hasOwnProperty('getKey'));\r\n}\r\n/**\r\n * Checks to see if the required APIs exist within SW Context.\r\n */\r\nfunction isSWControllerSupported() {\r\n return ('indexedDB' in self &&\r\n indexedDB !== null &&\r\n 'PushManager' in self &&\r\n 'Notification' in self &&\r\n ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\r\n PushSubscription.prototype.hasOwnProperty('getKey'));\r\n}\n//# sourceMappingURL=index.esm.js.map\n"],"sourceRoot":""}