{"version":3,"sources":["webpack:///./node_modules/@firebase/remote-config/dist/index.esm.js","webpack:///./node_modules/@firebase/storage/dist/index.browser.esm.js"],"names":["_a","CachingClient","client","storage","storageCache","logger","this","prototype","isCachedDataFresh","cacheMaxAgeMillis","lastSuccessfulFetchTimestampMillis","debug","cacheAgeMillis","Date","now","fetch","request","lastSuccessfulFetchResponse","response","storageOperations","_b","label","Promise","all","getLastSuccessfulFetchTimestampMillis","getLastSuccessfulFetchResponse","sent","eTag","setLastSuccessfulFetchTimestampMillis","status","push","setLastSuccessfulFetchResponse","ERROR_DESCRIPTION_MAP","ERROR_FACTORY","hasErrorCode","e","errorCode","code","indexOf","getUserLanguage","navigatorLanguage","navigator","languages","language","RestClient","firebaseInstallations","sdkVersion","namespace","projectId","apiKey","appId","installationId","installationToken","urlBase","url","headers","requestBody","options","fetchPromise","timeoutPromise","originalError_1","responseEtag","config","state","responseBody","originalError_2","getId","getToken","window","FIREBASE_REMOTE_CONFIG_URL_BASE","sdk_version","app_instance_id","app_instance_id_token","app_id","language_code","method","body","JSON","stringify","_resolve","reject","signal","addEventListener","error","Error","name","trys","race","create","originalErrorMessage","message","get","undefined","json","httpStatus","RemoteConfigAbortSignal","listeners","listener","abort","forEach","DEFAULT_VALUE_FOR_BOOLEAN","DEFAULT_VALUE_FOR_STRING","DEFAULT_VALUE_FOR_NUMBER","BOOLEAN_TRUTHY_VALUES","Value","_source","_value","asString","asBoolean","toLowerCase","asNumber","num","Number","isNaN","getSource","DEFAULT_FETCH_TIMEOUT_MILLIS","DEFAULT_CACHE_MAX_AGE_MILLIS","RemoteConfig","app","_client","_storageCache","_storage","_logger","_isInitializationComplete","settings","fetchTimeoutMillis","minimumFetchIntervalMillis","defaultConfig","setLogLevel","logLevel","DEBUG","SILENT","ERROR","Object","defineProperty","enumerable","configurable","getLastFetchStatus","activate","activeConfigEtag","getActiveConfigEtag","setActiveConfig","setActiveConfigEtag","ensureInitialized","_this","_initializePromise","loadFromStorage","then","abortSignal","e_1","lastFetchStatus","setTimeout","setLastFetchStatus","fetchAndActivate","getAll","getAllKeys","getActiveConfig","reduce","allConfigs","key","getValue","getBoolean","getNumber","getString","activeConfig","String","obj1","obj2","keys","toFirebaseError","event","originalError","target","APP_NAMESPACE_STORE","DB_NAME","DB_VERSION","openDatabase","resolve","indexedDB","open","onerror","onsuccess","result","onupgradeneeded","db","oldVersion","createObjectStore","keyPath","Storage","appName","openDbPromise","set","timestamp","etag","getThrottleMetadata","setThrottleMetadata","metadata","deleteThrottleMetadata","delete","transaction","objectStore","compositeKey","createCompositeKey","value","put","join","StorageCache","lastFetchStatusPromise","lastSuccessfulFetchTimestampMillisPromise","activeConfigPromise","timestampMillis","setAbortableTimeout","throttleEndTimeMillis","backoffMillis","Math","max","timeout","clearTimeout","isRetriableError","customData","RetryingClient","throttleMetadata","backoffCount","attemptFetch","version","registerRemoteConfig","firebaseInstance","remoteConfigFactory","container","instanceIdentifier","getProvider","getImmediate","installations","restClient","SDK_VERSION","retryingClient","cachingClient","remoteConfigInstance","INTERNAL","registerComponent","setMultipleInstances","registerVersion","DEFAULT_HOST","CONFIG_STORAGE_BUCKET_KEY","DEFAULT_MAX_OPERATION_RETRY_TIME","DEFAULT_MAX_UPLOAD_RETRY_TIME","FirebaseStorageError","_super","call","prependCode","serverResponse","_baseMessage","setPrototypeOf","_codeEquals","unknown","objectNotFound","path","quotaExceeded","bucket","unauthenticated","unauthorizedApp","unauthorized","retryLimitExceeded","canceled","invalidUrl","invalidDefaultBucket","noDefaultBucket","cannotSliceBlob","serverFileWrongSize","noDownloadURL","invalidArgument","appDeleted","invalidRootOperation","invalidFormat","format","internalError","decodeBase64","encoded","atob","StringFormat","RAW","BASE64","BASE64URL","DATA_URL","StringData","data","contentType","dataFromString","stringData","utf8Bytes_","base64Bytes_","dataURLBytes_","dataURLContentType_","b","i","length","c","charCodeAt","valid","hi","lo","Uint8Array","percentEncodedBytes_","decoded","decodeURIComponent","hasMinus","hasUnder","invalidChar","hasPlus","hasSlash","replace","bytes","array","DataURLParts","dataURL","base64","matches","match","middle","endsWith","substring","rest","dataUrl","parts","s","end","longEnough","ErrorCode","TaskEvent","STATE_CHANGED","TaskState","RUNNING","PAUSED","SUCCESS","CANCELED","taskStateFromInternalTaskState","XhrConnection","sent_","xhr_","XMLHttpRequest","errorCode_","NO_ERROR","sendPromise_","ABORT","NETWORK_ERROR","send","hasOwnProperty","setRequestHeader","toString","getErrorCode","getStatus","getResponseText","responseText","getResponseHeader","header","addUploadProgressListener","upload","removeUploadProgressListener","removeEventListener","newConnection","ConnectionPool","createConnection","Location","path_","fullServerUrl","encode","encodeURIComponent","bucketOnlyServerUrl","makeFromBucketSpec","bucketString","host","bucketLocation","makeFromUrl","location","bucketDomain","gsModify","loc","charAt","slice","gsPath","gsRegex","RegExp","gsIndices","httpModify","firebaseStorageHost","firebaseStoragePath","firebaseStorageRegExp","firebaseStorageIndices","cloudStorageHost","cloudStoragePath","cloudStorageRegExp","cloudStorageIndices","groups","regex","indices","postModify","group","captures","exec","bucketValue","pathValue","FailRequest","promise_","getPromise","cancel","_appDelete","start","f","callback","waitSeconds","timeoutId","hitTimeout","cancelState","triggeredCallback","triggerCallback","args","_i","arguments","apply","callWithDelay","millis","handler","success","waitMillis","mustStop","random","stopped","stop","wasTimeout","id","isJustDef","p","isFunction","isNonArrayObject","Array","isArray","isString","isNativeBlob","isNativeBlobDefined","Blob","validateNumber","argument","minValue","maxValue","makeUrl","urlPart","protocolMatch","protocol","origin","makeQueryString","params","queryPart","nextPart","NetworkRequest","successCodes","additionalRetryCodes","errorCallback","progressCallback","pool","pendingConnection_","backoffId_","canceled_","appDelete_","url_","method_","headers_","body_","successCodes_","additionalRetryCodes_","callback_","errorCallback_","progressCallback_","timeout_","pool_","resolve_","reject_","start_","self","doTheRequest","backoffCallback","RequestEndStatus","connection","progressListener","hitServer","isRetryStatusCode_","successCode","wasCanceled","progressEvent","loaded","total","lengthComputable","backoffDone","requestWentThrough","wasSuccessCode","err","appDelete","isFiveHundredCode","extraRetryCodes","isExtraRetryCode","isRequestSpecificRetryCode","addAuthHeader_","authToken","addVersionHeader_","firebaseVersion","addGmpidHeader_","addAppCheckHeader_","appCheckToken","makeRequest","requestInfo","urlParams","assign","errorHandler","getBlobBuilder","BlobBuilder","WebKitBlobBuilder","getBlob","bb","append","sliceBlob","blob","webkitSlice","mozSlice","FbsBlob","elideCopy","size","blobType","data_","type","ArrayBuffer","byteLength","size_","type_","startByte","endByte","realBlob","sliced","buffer","blobby","map","val","uint8Arrays","finalLength_1","merged_1","index_1","uploadData","jsonObjectOrNull","obj","parse","parent","index","lastIndexOf","newPath","child","childPath","canonicalChildPath","split","filter","component","lastComponent","noXform_","Mapping","server","local","writable","xform","mappings_","xformPath","fullPath","getMappings","mappings","mappingsXformPath","_metadata","nameMapping","xformSize","sizeMapping","addRef","service","generateRef","_makeStorageReference","fromResource","resource","len","mapping","fromResourceString","resourceString","downloadUrlFromResourceString","tokens","tokensList","urls","token","base","queryString","alt","toResourceString","PREFIXES_KEY","ITEMS_KEY","fromBackendResponse","listResult","prefixes","items","nextPageToken","pathWithoutTrailingSlash","reference","_c","item","fromResponseString","RequestInfo","handlerCheck","cndn","metadataHandler","xhr","text","listHandler","downloadUrlHandler","sharedErrorHandler","newErr","includes","objectErrorHandler","shared","getMetadata$2","maxOperationRetryTime","list$2","delimiter","pageToken","maxResults","isRoot","getDownloadUrl","updateMetadata$2","deleteObject$2","_xhr","_text","determineContentType_","metadataForUpload_","metadataClone","multipartUpload","genBoundary","str","boundary","metadata_","metadataString","preBlobPart","postBlobPart","maxUploadRetryTime","ResumableUploadStatus","current","finalized","checkResumeHeader_","allowed","allowedStatus","createResumableUpload","metadataForUpload","getResumableUploadStatus","sizeString","RESUMABLE_UPLOAD_CHUNK_SIZE","continueResumableUpload","chunkSize","status_","bytesLeft","bytesToUpload","min","uploadCommand","uploadStatus","newCurrent","Observer","nextOrObserver","complete","asFunctions","next","observer","async","argsToForward","UploadTask","ref","_transferred","_needToFetchStatus","_needToFetchMetadata","_observers","_error","_uploadUrl","_request","_chunkMultiplier","_reject","_ref","_blob","_mappings","_resumable","_shouldDoResumable","_state","_errorHandler","completeTransitions_","_transition","_metadataErrorHandler","_promise","_start","_makeProgressCallback","sizeBefore","_updateProgress","_createResumable","_fetchStatus","_fetchMetadata","_continueUpload","_oneShotUpload","_resolveToken","_getAuthToken","_getAppCheckToken","_location","createRequest","_makeRequest","statusRequest","uploadRequest","newStatus","_increaseMultiplier","currentSize","metadataRequest","multipartRequest","transferred","old","_notifyObservers","wasPaused","externalState","bytesTransferred","totalBytes","task","on","completed","_addObserver","_removeObserver","onFulfilled","onRejected","catch","_notifyObserver","splice","_finishPromise","observers","triggered","bind","snapshot","toCall","resume","pause","Reference","_service","_newRef","_throwIfRoot","uploadBytesResumable$1","listAll$1","accumulator","listAllHelper","opt","nextPage","list$1","op","makeRequestWithTokens","getMetadata$1","updateMetadata$1","getDownloadURL$1","deleteObject$1","_getChild$1","isUrl","test","refFromURL","refFromPath","FirebaseStorageImpl","_bucket","ref$1","serviceOrRef","pathOrUrl","extractBucket","connectStorageEmulator$1","port","mockUserToken","_overrideAuthToken","_authProvider","_appCheckProvider","_pool","_url","_firebaseVersion","_host","_appId","_deleted","_maxOperationRetryTime","_maxUploadRetryTime","_requests","Set","time","POSITIVE_INFINITY","auth","tokenData","optional","accessToken","appCheck","_delete","clear","request_1","add","uploadBytesResumable","getMetadata","updateMetadata","list","listAll","getDownloadURL","deleteObject","_getChild","connectStorageEmulator","UploadTaskSnapshotCompat","_delegate","UploadTaskCompat","wrappedNextOrObserver","taskSnapshot","ListResultCompat","ReferenceCompat","root","putString","r","StorageServiceCompat","setMaxUploadRetryTime","setMaxOperationRetryTime","useEmulator","STORAGE_TYPE","factory","authProvider","appCheckProvider","storageServiceCompat","registerStorage","instance","namespaceExports","setServiceProps"],"mappings":"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","file":"js/chunk-vendors~bee55697.45aa82ad.js","sourcesContent":["import firebase from '@firebase/app';\nimport '@firebase/installations';\nimport { __awaiter, __generator, __assign } from 'tslib';\nimport { ErrorFactory, FirebaseError, calculateBackoffMillis } from '@firebase/util';\nimport { LogLevel, Logger } from '@firebase/logger';\nimport { Component } from '@firebase/component';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Implements the {@link RemoteConfigClient} abstraction with success response caching.\r\n *\r\n *

Comparable to the browser's Cache API for responses, but the Cache API requires a Service\r\n * Worker, which requires HTTPS, which would significantly complicate SDK installation. Also, the\r\n * Cache API doesn't support matching entries by time.\r\n */\r\nvar CachingClient = /** @class */ (function () {\r\n function CachingClient(client, storage, storageCache, logger) {\r\n this.client = client;\r\n this.storage = storage;\r\n this.storageCache = storageCache;\r\n this.logger = logger;\r\n }\r\n /**\r\n * Returns true if the age of the cached fetched configs is less than or equal to\r\n * {@link Settings#minimumFetchIntervalInSeconds}.\r\n *\r\n *

This is comparable to passing `headers = { 'Cache-Control': max-age }` to the\r\n * native Fetch API.\r\n *\r\n *

Visible for testing.\r\n */\r\n CachingClient.prototype.isCachedDataFresh = function (cacheMaxAgeMillis, lastSuccessfulFetchTimestampMillis) {\r\n // Cache can only be fresh if it's populated.\r\n if (!lastSuccessfulFetchTimestampMillis) {\r\n this.logger.debug('Config fetch cache check. Cache unpopulated.');\r\n return false;\r\n }\r\n // Calculates age of cache entry.\r\n var cacheAgeMillis = Date.now() - lastSuccessfulFetchTimestampMillis;\r\n var isCachedDataFresh = cacheAgeMillis <= cacheMaxAgeMillis;\r\n this.logger.debug('Config fetch cache check.' +\r\n (\" Cache age millis: \" + cacheAgeMillis + \".\") +\r\n (\" Cache max age millis (minimumFetchIntervalMillis setting): \" + cacheMaxAgeMillis + \".\") +\r\n (\" Is cache hit: \" + isCachedDataFresh + \".\"));\r\n return isCachedDataFresh;\r\n };\r\n CachingClient.prototype.fetch = function (request) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, lastSuccessfulFetchTimestampMillis, lastSuccessfulFetchResponse, response, storageOperations;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0: return [4 /*yield*/, Promise.all([\r\n this.storage.getLastSuccessfulFetchTimestampMillis(),\r\n this.storage.getLastSuccessfulFetchResponse()\r\n ])];\r\n case 1:\r\n _a = _b.sent(), lastSuccessfulFetchTimestampMillis = _a[0], lastSuccessfulFetchResponse = _a[1];\r\n // Exits early on cache hit.\r\n if (lastSuccessfulFetchResponse &&\r\n this.isCachedDataFresh(request.cacheMaxAgeMillis, lastSuccessfulFetchTimestampMillis)) {\r\n return [2 /*return*/, lastSuccessfulFetchResponse];\r\n }\r\n // Deviates from pure decorator by not honoring a passed ETag since we don't have a public API\r\n // that allows the caller to pass an ETag.\r\n request.eTag =\r\n lastSuccessfulFetchResponse && lastSuccessfulFetchResponse.eTag;\r\n return [4 /*yield*/, this.client.fetch(request)];\r\n case 2:\r\n response = _b.sent();\r\n storageOperations = [\r\n // Uses write-through cache for consistency with synchronous public API.\r\n this.storageCache.setLastSuccessfulFetchTimestampMillis(Date.now())\r\n ];\r\n if (response.status === 200) {\r\n // Caches response only if it has changed, ie non-304 responses.\r\n storageOperations.push(this.storage.setLastSuccessfulFetchResponse(response));\r\n }\r\n return [4 /*yield*/, Promise.all(storageOperations)];\r\n case 3:\r\n _b.sent();\r\n return [2 /*return*/, response];\r\n }\r\n });\r\n });\r\n };\r\n return CachingClient;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar _a;\r\nvar ERROR_DESCRIPTION_MAP = (_a = {},\r\n _a[\"registration-window\" /* REGISTRATION_WINDOW */] = 'Undefined window object. This SDK only supports usage in a browser environment.',\r\n _a[\"registration-project-id\" /* REGISTRATION_PROJECT_ID */] = 'Undefined project identifier. Check Firebase app initialization.',\r\n _a[\"registration-api-key\" /* REGISTRATION_API_KEY */] = 'Undefined API key. Check Firebase app initialization.',\r\n _a[\"registration-app-id\" /* REGISTRATION_APP_ID */] = 'Undefined app identifier. Check Firebase app initialization.',\r\n _a[\"storage-open\" /* STORAGE_OPEN */] = 'Error thrown when opening storage. Original error: {$originalErrorMessage}.',\r\n _a[\"storage-get\" /* STORAGE_GET */] = 'Error thrown when reading from storage. Original error: {$originalErrorMessage}.',\r\n _a[\"storage-set\" /* STORAGE_SET */] = 'Error thrown when writing to storage. Original error: {$originalErrorMessage}.',\r\n _a[\"storage-delete\" /* STORAGE_DELETE */] = 'Error thrown when deleting from storage. Original error: {$originalErrorMessage}.',\r\n _a[\"fetch-client-network\" /* FETCH_NETWORK */] = 'Fetch client failed to connect to a network. Check Internet connection.' +\r\n ' Original error: {$originalErrorMessage}.',\r\n _a[\"fetch-timeout\" /* FETCH_TIMEOUT */] = 'The config fetch request timed out. ' +\r\n ' Configure timeout using \"fetchTimeoutMillis\" SDK setting.',\r\n _a[\"fetch-throttle\" /* FETCH_THROTTLE */] = 'The config fetch request timed out while in an exponential backoff state.' +\r\n ' Configure timeout using \"fetchTimeoutMillis\" SDK setting.' +\r\n ' Unix timestamp in milliseconds when fetch request throttling ends: {$throttleEndTimeMillis}.',\r\n _a[\"fetch-client-parse\" /* FETCH_PARSE */] = 'Fetch client could not parse response.' +\r\n ' Original error: {$originalErrorMessage}.',\r\n _a[\"fetch-status\" /* FETCH_STATUS */] = 'Fetch server returned an HTTP error status. HTTP status: {$httpStatus}.',\r\n _a);\r\nvar ERROR_FACTORY = new ErrorFactory('remoteconfig' /* service */, 'Remote Config' /* service name */, ERROR_DESCRIPTION_MAP);\r\n// Note how this is like typeof/instanceof, but for ErrorCode.\r\nfunction hasErrorCode(e, errorCode) {\r\n return e instanceof FirebaseError && e.code.indexOf(errorCode) !== -1;\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/**\r\n * Attempts to get the most accurate browser language setting.\r\n *\r\n *

Adapted from getUserLanguage in packages/auth/src/utils.js for TypeScript.\r\n *\r\n *

Defers default language specification to server logic for consistency.\r\n *\r\n * @param navigatorLanguage Enables tests to override read-only {@link NavigatorLanguage}.\r\n */\r\nfunction getUserLanguage(navigatorLanguage) {\r\n if (navigatorLanguage === void 0) { navigatorLanguage = navigator; }\r\n return (\r\n // Most reliable, but only supported in Chrome/Firefox.\r\n (navigatorLanguage.languages && navigatorLanguage.languages[0]) ||\r\n // Supported in most browsers, but returns the language of the browser\r\n // UI, not the language set in browser settings.\r\n navigatorLanguage.language\r\n // Polyfill otherwise.\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/**\r\n * Implements the Client abstraction for the Remote Config REST API.\r\n */\r\nvar RestClient = /** @class */ (function () {\r\n function RestClient(firebaseInstallations, sdkVersion, namespace, projectId, apiKey, appId) {\r\n this.firebaseInstallations = firebaseInstallations;\r\n this.sdkVersion = sdkVersion;\r\n this.namespace = namespace;\r\n this.projectId = projectId;\r\n this.apiKey = apiKey;\r\n this.appId = appId;\r\n }\r\n /**\r\n * Fetches from the Remote Config REST API.\r\n *\r\n * @throws a {@link ErrorCode.FETCH_NETWORK} error if {@link GlobalFetch#fetch} can't\r\n * connect to the network.\r\n * @throws a {@link ErrorCode.FETCH_PARSE} error if {@link Response#json} can't parse the\r\n * fetch response.\r\n * @throws a {@link ErrorCode.FETCH_STATUS} error if the service returns an HTTP error status.\r\n */\r\n RestClient.prototype.fetch = function (request) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, installationId, installationToken, urlBase, url, headers, requestBody, options, fetchPromise, timeoutPromise, response, originalError_1, errorCode, status, responseEtag, config, state, responseBody, originalError_2;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0: return [4 /*yield*/, Promise.all([\r\n this.firebaseInstallations.getId(),\r\n this.firebaseInstallations.getToken()\r\n ])];\r\n case 1:\r\n _a = _b.sent(), installationId = _a[0], installationToken = _a[1];\r\n urlBase = window.FIREBASE_REMOTE_CONFIG_URL_BASE ||\r\n 'https://firebaseremoteconfig.googleapis.com';\r\n url = urlBase + \"/v1/projects/\" + this.projectId + \"/namespaces/\" + this.namespace + \":fetch?key=\" + this.apiKey;\r\n headers = {\r\n 'Content-Type': 'application/json',\r\n 'Content-Encoding': 'gzip',\r\n // Deviates from pure decorator by not passing max-age header since we don't currently have\r\n // service behavior using that header.\r\n 'If-None-Match': request.eTag || '*'\r\n };\r\n requestBody = {\r\n /* eslint-disable camelcase */\r\n sdk_version: this.sdkVersion,\r\n app_instance_id: installationId,\r\n app_instance_id_token: installationToken,\r\n app_id: this.appId,\r\n language_code: getUserLanguage()\r\n /* eslint-enable camelcase */\r\n };\r\n options = {\r\n method: 'POST',\r\n headers: headers,\r\n body: JSON.stringify(requestBody)\r\n };\r\n fetchPromise = fetch(url, options);\r\n timeoutPromise = new Promise(function (_resolve, reject) {\r\n // Maps async event listener to Promise API.\r\n request.signal.addEventListener(function () {\r\n // Emulates https://heycam.github.io/webidl/#aborterror\r\n var error = new Error('The operation was aborted.');\r\n error.name = 'AbortError';\r\n reject(error);\r\n });\r\n });\r\n _b.label = 2;\r\n case 2:\r\n _b.trys.push([2, 5, , 6]);\r\n return [4 /*yield*/, Promise.race([fetchPromise, timeoutPromise])];\r\n case 3:\r\n _b.sent();\r\n return [4 /*yield*/, fetchPromise];\r\n case 4:\r\n response = _b.sent();\r\n return [3 /*break*/, 6];\r\n case 5:\r\n originalError_1 = _b.sent();\r\n errorCode = \"fetch-client-network\" /* FETCH_NETWORK */;\r\n if (originalError_1.name === 'AbortError') {\r\n errorCode = \"fetch-timeout\" /* FETCH_TIMEOUT */;\r\n }\r\n throw ERROR_FACTORY.create(errorCode, {\r\n originalErrorMessage: originalError_1.message\r\n });\r\n case 6:\r\n status = response.status;\r\n responseEtag = response.headers.get('ETag') || undefined;\r\n if (!(response.status === 200)) return [3 /*break*/, 11];\r\n responseBody = void 0;\r\n _b.label = 7;\r\n case 7:\r\n _b.trys.push([7, 9, , 10]);\r\n return [4 /*yield*/, response.json()];\r\n case 8:\r\n responseBody = _b.sent();\r\n return [3 /*break*/, 10];\r\n case 9:\r\n originalError_2 = _b.sent();\r\n throw ERROR_FACTORY.create(\"fetch-client-parse\" /* FETCH_PARSE */, {\r\n originalErrorMessage: originalError_2.message\r\n });\r\n case 10:\r\n config = responseBody['entries'];\r\n state = responseBody['state'];\r\n _b.label = 11;\r\n case 11:\r\n // Normalizes based on legacy state.\r\n if (state === 'INSTANCE_STATE_UNSPECIFIED') {\r\n status = 500;\r\n }\r\n else if (state === 'NO_CHANGE') {\r\n status = 304;\r\n }\r\n else if (state === 'NO_TEMPLATE' || state === 'EMPTY_CONFIG') {\r\n // These cases can be fixed remotely, so normalize to safe value.\r\n config = {};\r\n }\r\n // Normalize to exception-based control flow for non-success cases.\r\n // Encapsulates HTTP specifics in this class as much as possible. Status is still the best for\r\n // differentiating success states (200 from 304; the state body param is undefined in a\r\n // standard 304).\r\n if (status !== 304 && status !== 200) {\r\n throw ERROR_FACTORY.create(\"fetch-status\" /* FETCH_STATUS */, {\r\n httpStatus: status\r\n });\r\n }\r\n return [2 /*return*/, { status: status, eTag: responseEtag, config: config }];\r\n }\r\n });\r\n });\r\n };\r\n return RestClient;\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/**\r\n * Shims a minimal AbortSignal.\r\n *\r\n *

AbortController's AbortSignal conveniently decouples fetch timeout logic from other aspects\r\n * of networking, such as retries. Firebase doesn't use AbortController enough to justify a\r\n * polyfill recommendation, like we do with the Fetch API, but this minimal shim can easily be\r\n * swapped out if/when we do.\r\n */\r\nvar RemoteConfigAbortSignal = /** @class */ (function () {\r\n function RemoteConfigAbortSignal() {\r\n this.listeners = [];\r\n }\r\n RemoteConfigAbortSignal.prototype.addEventListener = function (listener) {\r\n this.listeners.push(listener);\r\n };\r\n RemoteConfigAbortSignal.prototype.abort = function () {\r\n this.listeners.forEach(function (listener) { return listener(); });\r\n };\r\n return RemoteConfigAbortSignal;\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_VALUE_FOR_BOOLEAN = false;\r\nvar DEFAULT_VALUE_FOR_STRING = '';\r\nvar DEFAULT_VALUE_FOR_NUMBER = 0;\r\nvar BOOLEAN_TRUTHY_VALUES = ['1', 'true', 't', 'yes', 'y', 'on'];\r\nvar Value = /** @class */ (function () {\r\n function Value(_source, _value) {\r\n if (_value === void 0) { _value = DEFAULT_VALUE_FOR_STRING; }\r\n this._source = _source;\r\n this._value = _value;\r\n }\r\n Value.prototype.asString = function () {\r\n return this._value;\r\n };\r\n Value.prototype.asBoolean = function () {\r\n if (this._source === 'static') {\r\n return DEFAULT_VALUE_FOR_BOOLEAN;\r\n }\r\n return BOOLEAN_TRUTHY_VALUES.indexOf(this._value.toLowerCase()) >= 0;\r\n };\r\n Value.prototype.asNumber = function () {\r\n if (this._source === 'static') {\r\n return DEFAULT_VALUE_FOR_NUMBER;\r\n }\r\n var num = Number(this._value);\r\n if (isNaN(num)) {\r\n num = DEFAULT_VALUE_FOR_NUMBER;\r\n }\r\n return num;\r\n };\r\n Value.prototype.getSource = function () {\r\n return this._source;\r\n };\r\n return Value;\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_FETCH_TIMEOUT_MILLIS = 60 * 1000; // One minute\r\nvar DEFAULT_CACHE_MAX_AGE_MILLIS = 12 * 60 * 60 * 1000; // Twelve hours.\r\n/**\r\n * Encapsulates business logic mapping network and storage dependencies to the public SDK API.\r\n *\r\n * See {@link https://github.com/FirebasePrivate/firebase-js-sdk/blob/master/packages/firebase/index.d.ts|interface documentation} for method descriptions.\r\n */\r\nvar RemoteConfig = /** @class */ (function () {\r\n function RemoteConfig(\r\n // Required by FirebaseServiceFactory interface.\r\n app, \r\n // JS doesn't support private yet\r\n // (https://github.com/tc39/proposal-class-fields#private-fields), so we hint using an\r\n // underscore prefix.\r\n _client, _storageCache, _storage, _logger) {\r\n this.app = app;\r\n this._client = _client;\r\n this._storageCache = _storageCache;\r\n this._storage = _storage;\r\n this._logger = _logger;\r\n // Tracks completion of initialization promise.\r\n this._isInitializationComplete = false;\r\n this.settings = {\r\n fetchTimeoutMillis: DEFAULT_FETCH_TIMEOUT_MILLIS,\r\n minimumFetchIntervalMillis: DEFAULT_CACHE_MAX_AGE_MILLIS\r\n };\r\n this.defaultConfig = {};\r\n }\r\n // Based on packages/firestore/src/util/log.ts but not static because we need per-instance levels\r\n // to differentiate 2p and 3p use-cases.\r\n RemoteConfig.prototype.setLogLevel = function (logLevel) {\r\n switch (logLevel) {\r\n case 'debug':\r\n this._logger.logLevel = LogLevel.DEBUG;\r\n break;\r\n case 'silent':\r\n this._logger.logLevel = LogLevel.SILENT;\r\n break;\r\n default:\r\n this._logger.logLevel = LogLevel.ERROR;\r\n }\r\n };\r\n Object.defineProperty(RemoteConfig.prototype, \"fetchTimeMillis\", {\r\n get: function () {\r\n return this._storageCache.getLastSuccessfulFetchTimestampMillis() || -1;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(RemoteConfig.prototype, \"lastFetchStatus\", {\r\n get: function () {\r\n return this._storageCache.getLastFetchStatus() || 'no-fetch-yet';\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n RemoteConfig.prototype.activate = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, lastSuccessfulFetchResponse, activeConfigEtag;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0: return [4 /*yield*/, Promise.all([\r\n this._storage.getLastSuccessfulFetchResponse(),\r\n this._storage.getActiveConfigEtag()\r\n ])];\r\n case 1:\r\n _a = _b.sent(), lastSuccessfulFetchResponse = _a[0], activeConfigEtag = _a[1];\r\n if (!lastSuccessfulFetchResponse ||\r\n !lastSuccessfulFetchResponse.config ||\r\n !lastSuccessfulFetchResponse.eTag ||\r\n lastSuccessfulFetchResponse.eTag === activeConfigEtag) {\r\n // Either there is no successful fetched config, or is the same as current active\r\n // config.\r\n return [2 /*return*/, false];\r\n }\r\n return [4 /*yield*/, Promise.all([\r\n this._storageCache.setActiveConfig(lastSuccessfulFetchResponse.config),\r\n this._storage.setActiveConfigEtag(lastSuccessfulFetchResponse.eTag)\r\n ])];\r\n case 2:\r\n _b.sent();\r\n return [2 /*return*/, true];\r\n }\r\n });\r\n });\r\n };\r\n RemoteConfig.prototype.ensureInitialized = function () {\r\n var _this = this;\r\n if (!this._initializePromise) {\r\n this._initializePromise = this._storageCache\r\n .loadFromStorage()\r\n .then(function () {\r\n _this._isInitializationComplete = true;\r\n });\r\n }\r\n return this._initializePromise;\r\n };\r\n /**\r\n * @throws a {@link ErrorCode.FETCH_CLIENT_TIMEOUT} if the request takes longer than\r\n * {@link Settings.fetchTimeoutInSeconds} or\r\n * {@link DEFAULT_FETCH_TIMEOUT_SECONDS}.\r\n */\r\n RemoteConfig.prototype.fetch = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var abortSignal, e_1, lastFetchStatus;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n abortSignal = new RemoteConfigAbortSignal();\r\n setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {\r\n return __generator(this, function (_a) {\r\n // Note a very low delay, eg < 10ms, can elapse before listeners are initialized.\r\n abortSignal.abort();\r\n return [2 /*return*/];\r\n });\r\n }); }, this.settings.fetchTimeoutMillis);\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 4, , 6]);\r\n return [4 /*yield*/, this._client.fetch({\r\n cacheMaxAgeMillis: this.settings.minimumFetchIntervalMillis,\r\n signal: abortSignal\r\n })];\r\n case 2:\r\n _a.sent();\r\n return [4 /*yield*/, this._storageCache.setLastFetchStatus('success')];\r\n case 3:\r\n _a.sent();\r\n return [3 /*break*/, 6];\r\n case 4:\r\n e_1 = _a.sent();\r\n lastFetchStatus = hasErrorCode(e_1, \"fetch-throttle\" /* FETCH_THROTTLE */)\r\n ? 'throttle'\r\n : 'failure';\r\n return [4 /*yield*/, this._storageCache.setLastFetchStatus(lastFetchStatus)];\r\n case 5:\r\n _a.sent();\r\n throw e_1;\r\n case 6: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n RemoteConfig.prototype.fetchAndActivate = 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: return [4 /*yield*/, this.fetch()];\r\n case 1:\r\n _a.sent();\r\n return [2 /*return*/, this.activate()];\r\n }\r\n });\r\n });\r\n };\r\n RemoteConfig.prototype.getAll = function () {\r\n var _this = this;\r\n return getAllKeys(this._storageCache.getActiveConfig(), this.defaultConfig).reduce(function (allConfigs, key) {\r\n allConfigs[key] = _this.getValue(key);\r\n return allConfigs;\r\n }, {});\r\n };\r\n RemoteConfig.prototype.getBoolean = function (key) {\r\n return this.getValue(key).asBoolean();\r\n };\r\n RemoteConfig.prototype.getNumber = function (key) {\r\n return this.getValue(key).asNumber();\r\n };\r\n RemoteConfig.prototype.getString = function (key) {\r\n return this.getValue(key).asString();\r\n };\r\n RemoteConfig.prototype.getValue = function (key) {\r\n if (!this._isInitializationComplete) {\r\n this._logger.debug(\"A value was requested for key \\\"\" + key + \"\\\" before SDK initialization completed.\" +\r\n ' Await on ensureInitialized if the intent was to get a previously activated value.');\r\n }\r\n var activeConfig = this._storageCache.getActiveConfig();\r\n if (activeConfig && activeConfig[key] !== undefined) {\r\n return new Value('remote', activeConfig[key]);\r\n }\r\n else if (this.defaultConfig && this.defaultConfig[key] !== undefined) {\r\n return new Value('default', String(this.defaultConfig[key]));\r\n }\r\n this._logger.debug(\"Returning static value for key \\\"\" + key + \"\\\".\" +\r\n ' Define a default or remote value if this is unintentional.');\r\n return new Value('static');\r\n };\r\n return RemoteConfig;\r\n}());\r\n/**\r\n * Dedupes and returns an array of all the keys of the received objects.\r\n */\r\nfunction getAllKeys(obj1, obj2) {\r\n if (obj1 === void 0) { obj1 = {}; }\r\n if (obj2 === void 0) { obj2 = {}; }\r\n return Object.keys(__assign(__assign({}, obj1), obj2));\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/**\r\n * Converts an error event associated with a {@link IDBRequest} to a {@link FirebaseError}.\r\n */\r\nfunction toFirebaseError(event, errorCode) {\r\n var originalError = event.target.error || undefined;\r\n return ERROR_FACTORY.create(errorCode, {\r\n originalErrorMessage: originalError && originalError.message\r\n });\r\n}\r\n/**\r\n * A general-purpose store keyed by app + namespace + {@link\r\n * ProjectNamespaceKeyFieldValue}.\r\n *\r\n *

The Remote Config SDK can be used with multiple app installations, and each app can interact\r\n * with multiple namespaces, so this store uses app (ID + name) and namespace as common parent keys\r\n * for a set of key-value pairs. See {@link Storage#createCompositeKey}.\r\n *\r\n *

Visible for testing.\r\n */\r\nvar APP_NAMESPACE_STORE = 'app_namespace_store';\r\nvar DB_NAME = 'firebase_remote_config';\r\nvar DB_VERSION = 1;\r\n// Visible for testing.\r\nfunction openDatabase() {\r\n return new Promise(function (resolve, reject) {\r\n var request = indexedDB.open(DB_NAME, DB_VERSION);\r\n request.onerror = function (event) {\r\n reject(toFirebaseError(event, \"storage-open\" /* STORAGE_OPEN */));\r\n };\r\n request.onsuccess = function (event) {\r\n resolve(event.target.result);\r\n };\r\n request.onupgradeneeded = function (event) {\r\n var db = event.target.result;\r\n // We don't use 'break' in this switch statement, the fall-through\r\n // behavior is what we want, because if there are multiple versions between\r\n // the old version and the current version, we want ALL the migrations\r\n // that correspond to those versions to run, not only the last one.\r\n // eslint-disable-next-line default-case\r\n switch (event.oldVersion) {\r\n case 0:\r\n db.createObjectStore(APP_NAMESPACE_STORE, {\r\n keyPath: 'compositeKey'\r\n });\r\n }\r\n };\r\n });\r\n}\r\n/**\r\n * Abstracts data persistence.\r\n */\r\nvar Storage = /** @class */ (function () {\r\n /**\r\n * @param appId enables storage segmentation by app (ID + name).\r\n * @param appName enables storage segmentation by app (ID + name).\r\n * @param namespace enables storage segmentation by namespace.\r\n */\r\n function Storage(appId, appName, namespace, openDbPromise) {\r\n if (openDbPromise === void 0) { openDbPromise = openDatabase(); }\r\n this.appId = appId;\r\n this.appName = appName;\r\n this.namespace = namespace;\r\n this.openDbPromise = openDbPromise;\r\n }\r\n Storage.prototype.getLastFetchStatus = function () {\r\n return this.get('last_fetch_status');\r\n };\r\n Storage.prototype.setLastFetchStatus = function (status) {\r\n return this.set('last_fetch_status', status);\r\n };\r\n // This is comparable to a cache entry timestamp. If we need to expire other data, we could\r\n // consider adding timestamp to all storage records and an optional max age arg to getters.\r\n Storage.prototype.getLastSuccessfulFetchTimestampMillis = function () {\r\n return this.get('last_successful_fetch_timestamp_millis');\r\n };\r\n Storage.prototype.setLastSuccessfulFetchTimestampMillis = function (timestamp) {\r\n return this.set('last_successful_fetch_timestamp_millis', timestamp);\r\n };\r\n Storage.prototype.getLastSuccessfulFetchResponse = function () {\r\n return this.get('last_successful_fetch_response');\r\n };\r\n Storage.prototype.setLastSuccessfulFetchResponse = function (response) {\r\n return this.set('last_successful_fetch_response', response);\r\n };\r\n Storage.prototype.getActiveConfig = function () {\r\n return this.get('active_config');\r\n };\r\n Storage.prototype.setActiveConfig = function (config) {\r\n return this.set('active_config', config);\r\n };\r\n Storage.prototype.getActiveConfigEtag = function () {\r\n return this.get('active_config_etag');\r\n };\r\n Storage.prototype.setActiveConfigEtag = function (etag) {\r\n return this.set('active_config_etag', etag);\r\n };\r\n Storage.prototype.getThrottleMetadata = function () {\r\n return this.get('throttle_metadata');\r\n };\r\n Storage.prototype.setThrottleMetadata = function (metadata) {\r\n return this.set('throttle_metadata', metadata);\r\n };\r\n Storage.prototype.deleteThrottleMetadata = function () {\r\n return this.delete('throttle_metadata');\r\n };\r\n Storage.prototype.get = function (key) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var db;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.openDbPromise];\r\n case 1:\r\n db = _a.sent();\r\n return [2 /*return*/, new Promise(function (resolve, reject) {\r\n var transaction = db.transaction([APP_NAMESPACE_STORE], 'readonly');\r\n var objectStore = transaction.objectStore(APP_NAMESPACE_STORE);\r\n var compositeKey = _this.createCompositeKey(key);\r\n try {\r\n var request = objectStore.get(compositeKey);\r\n request.onerror = function (event) {\r\n reject(toFirebaseError(event, \"storage-get\" /* STORAGE_GET */));\r\n };\r\n request.onsuccess = function (event) {\r\n var result = event.target.result;\r\n if (result) {\r\n resolve(result.value);\r\n }\r\n else {\r\n resolve(undefined);\r\n }\r\n };\r\n }\r\n catch (e) {\r\n reject(ERROR_FACTORY.create(\"storage-get\" /* STORAGE_GET */, {\r\n originalErrorMessage: e && e.message\r\n }));\r\n }\r\n })];\r\n }\r\n });\r\n });\r\n };\r\n Storage.prototype.set = function (key, value) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var db;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.openDbPromise];\r\n case 1:\r\n db = _a.sent();\r\n return [2 /*return*/, new Promise(function (resolve, reject) {\r\n var transaction = db.transaction([APP_NAMESPACE_STORE], 'readwrite');\r\n var objectStore = transaction.objectStore(APP_NAMESPACE_STORE);\r\n var compositeKey = _this.createCompositeKey(key);\r\n try {\r\n var request = objectStore.put({\r\n compositeKey: compositeKey,\r\n value: value\r\n });\r\n request.onerror = function (event) {\r\n reject(toFirebaseError(event, \"storage-set\" /* STORAGE_SET */));\r\n };\r\n request.onsuccess = function () {\r\n resolve();\r\n };\r\n }\r\n catch (e) {\r\n reject(ERROR_FACTORY.create(\"storage-set\" /* STORAGE_SET */, {\r\n originalErrorMessage: e && e.message\r\n }));\r\n }\r\n })];\r\n }\r\n });\r\n });\r\n };\r\n Storage.prototype.delete = function (key) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var db;\r\n var _this = this;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.openDbPromise];\r\n case 1:\r\n db = _a.sent();\r\n return [2 /*return*/, new Promise(function (resolve, reject) {\r\n var transaction = db.transaction([APP_NAMESPACE_STORE], 'readwrite');\r\n var objectStore = transaction.objectStore(APP_NAMESPACE_STORE);\r\n var compositeKey = _this.createCompositeKey(key);\r\n try {\r\n var request = objectStore.delete(compositeKey);\r\n request.onerror = function (event) {\r\n reject(toFirebaseError(event, \"storage-delete\" /* STORAGE_DELETE */));\r\n };\r\n request.onsuccess = function () {\r\n resolve();\r\n };\r\n }\r\n catch (e) {\r\n reject(ERROR_FACTORY.create(\"storage-delete\" /* STORAGE_DELETE */, {\r\n originalErrorMessage: e && e.message\r\n }));\r\n }\r\n })];\r\n }\r\n });\r\n });\r\n };\r\n // Facilitates composite key functionality (which is unsupported in IE).\r\n Storage.prototype.createCompositeKey = function (key) {\r\n return [this.appId, this.appName, this.namespace, key].join();\r\n };\r\n return Storage;\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/**\r\n * A memory cache layer over storage to support the SDK's synchronous read requirements.\r\n */\r\nvar StorageCache = /** @class */ (function () {\r\n function StorageCache(storage) {\r\n this.storage = storage;\r\n }\r\n /**\r\n * Memory-only getters\r\n */\r\n StorageCache.prototype.getLastFetchStatus = function () {\r\n return this.lastFetchStatus;\r\n };\r\n StorageCache.prototype.getLastSuccessfulFetchTimestampMillis = function () {\r\n return this.lastSuccessfulFetchTimestampMillis;\r\n };\r\n StorageCache.prototype.getActiveConfig = function () {\r\n return this.activeConfig;\r\n };\r\n /**\r\n * Read-ahead getter\r\n */\r\n StorageCache.prototype.loadFromStorage = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var lastFetchStatusPromise, lastSuccessfulFetchTimestampMillisPromise, activeConfigPromise, lastFetchStatus, lastSuccessfulFetchTimestampMillis, activeConfig;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n lastFetchStatusPromise = this.storage.getLastFetchStatus();\r\n lastSuccessfulFetchTimestampMillisPromise = this.storage.getLastSuccessfulFetchTimestampMillis();\r\n activeConfigPromise = this.storage.getActiveConfig();\r\n return [4 /*yield*/, lastFetchStatusPromise];\r\n case 1:\r\n lastFetchStatus = _a.sent();\r\n if (lastFetchStatus) {\r\n this.lastFetchStatus = lastFetchStatus;\r\n }\r\n return [4 /*yield*/, lastSuccessfulFetchTimestampMillisPromise];\r\n case 2:\r\n lastSuccessfulFetchTimestampMillis = _a.sent();\r\n if (lastSuccessfulFetchTimestampMillis) {\r\n this.lastSuccessfulFetchTimestampMillis = lastSuccessfulFetchTimestampMillis;\r\n }\r\n return [4 /*yield*/, activeConfigPromise];\r\n case 3:\r\n activeConfig = _a.sent();\r\n if (activeConfig) {\r\n this.activeConfig = activeConfig;\r\n }\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * Write-through setters\r\n */\r\n StorageCache.prototype.setLastFetchStatus = function (status) {\r\n this.lastFetchStatus = status;\r\n return this.storage.setLastFetchStatus(status);\r\n };\r\n StorageCache.prototype.setLastSuccessfulFetchTimestampMillis = function (timestampMillis) {\r\n this.lastSuccessfulFetchTimestampMillis = timestampMillis;\r\n return this.storage.setLastSuccessfulFetchTimestampMillis(timestampMillis);\r\n };\r\n StorageCache.prototype.setActiveConfig = function (activeConfig) {\r\n this.activeConfig = activeConfig;\r\n return this.storage.setActiveConfig(activeConfig);\r\n };\r\n return StorageCache;\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/**\r\n * Supports waiting on a backoff by:\r\n *\r\n *

\r\n *\r\n *

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

Comparable to CachingClient, but uses backoff logic instead of cache max age and doesn't cache\r\n * responses (because the SDK has no use for error responses).\r\n */\r\nvar RetryingClient = /** @class */ (function () {\r\n function RetryingClient(client, storage) {\r\n this.client = client;\r\n this.storage = storage;\r\n }\r\n RetryingClient.prototype.fetch = function (request) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var throttleMetadata;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.storage.getThrottleMetadata()];\r\n case 1:\r\n throttleMetadata = (_a.sent()) || {\r\n backoffCount: 0,\r\n throttleEndTimeMillis: Date.now()\r\n };\r\n return [2 /*return*/, this.attemptFetch(request, throttleMetadata)];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * A recursive helper for attempting a fetch request repeatedly.\r\n *\r\n * @throws any non-retriable errors.\r\n */\r\n RetryingClient.prototype.attemptFetch = function (request, _a) {\r\n var throttleEndTimeMillis = _a.throttleEndTimeMillis, backoffCount = _a.backoffCount;\r\n return __awaiter(this, void 0, void 0, function () {\r\n var response, e_1, throttleMetadata;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0: \r\n // Starts with a (potentially zero) timeout to support resumption from stored state.\r\n // Ensures the throttle end time is honored if the last attempt timed out.\r\n // Note the SDK will never make a request if the fetch timeout expires at this point.\r\n return [4 /*yield*/, setAbortableTimeout(request.signal, throttleEndTimeMillis)];\r\n case 1:\r\n // Starts with a (potentially zero) timeout to support resumption from stored state.\r\n // Ensures the throttle end time is honored if the last attempt timed out.\r\n // Note the SDK will never make a request if the fetch timeout expires at this point.\r\n _b.sent();\r\n _b.label = 2;\r\n case 2:\r\n _b.trys.push([2, 5, , 7]);\r\n return [4 /*yield*/, this.client.fetch(request)];\r\n case 3:\r\n response = _b.sent();\r\n // Note the SDK only clears throttle state if response is success or non-retriable.\r\n return [4 /*yield*/, this.storage.deleteThrottleMetadata()];\r\n case 4:\r\n // Note the SDK only clears throttle state if response is success or non-retriable.\r\n _b.sent();\r\n return [2 /*return*/, response];\r\n case 5:\r\n e_1 = _b.sent();\r\n if (!isRetriableError(e_1)) {\r\n throw e_1;\r\n }\r\n throttleMetadata = {\r\n throttleEndTimeMillis: Date.now() + calculateBackoffMillis(backoffCount),\r\n backoffCount: backoffCount + 1\r\n };\r\n // Persists state.\r\n return [4 /*yield*/, this.storage.setThrottleMetadata(throttleMetadata)];\r\n case 6:\r\n // Persists state.\r\n _b.sent();\r\n return [2 /*return*/, this.attemptFetch(request, throttleMetadata)];\r\n case 7: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n return RetryingClient;\r\n}());\n\nvar name = \"@firebase/remote-config\";\nvar version = \"0.1.43\";\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 registerRemoteConfig(firebaseInstance) {\r\n firebaseInstance.INTERNAL.registerComponent(new Component('remoteConfig', remoteConfigFactory, \"PUBLIC\" /* PUBLIC */).setMultipleInstances(true));\r\n firebaseInstance.registerVersion(name, version);\r\n function remoteConfigFactory(container, _a) {\r\n var namespace = _a.instanceIdentifier;\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 rc has `import '@firebase/installations'`\r\n var installations = container.getProvider('installations').getImmediate();\r\n // Guards against the SDK being used in non-browser environments.\r\n if (typeof window === 'undefined') {\r\n throw ERROR_FACTORY.create(\"registration-window\" /* REGISTRATION_WINDOW */);\r\n }\r\n // Normalizes optional inputs.\r\n var _b = app.options, projectId = _b.projectId, apiKey = _b.apiKey, appId = _b.appId;\r\n if (!projectId) {\r\n throw ERROR_FACTORY.create(\"registration-project-id\" /* REGISTRATION_PROJECT_ID */);\r\n }\r\n if (!apiKey) {\r\n throw ERROR_FACTORY.create(\"registration-api-key\" /* REGISTRATION_API_KEY */);\r\n }\r\n if (!appId) {\r\n throw ERROR_FACTORY.create(\"registration-app-id\" /* REGISTRATION_APP_ID */);\r\n }\r\n namespace = namespace || 'firebase';\r\n var storage = new Storage(appId, app.name, namespace);\r\n var storageCache = new StorageCache(storage);\r\n var logger = new Logger(name);\r\n // Sets ERROR as the default log level.\r\n // See RemoteConfig#setLogLevel for corresponding normalization to ERROR log level.\r\n logger.logLevel = LogLevel.ERROR;\r\n var restClient = new RestClient(installations, \r\n // Uses the JS SDK version, by which the RC package version can be deduced, if necessary.\r\n firebaseInstance.SDK_VERSION, namespace, projectId, apiKey, appId);\r\n var retryingClient = new RetryingClient(restClient, storage);\r\n var cachingClient = new CachingClient(retryingClient, storage, storageCache, logger);\r\n var remoteConfigInstance = new RemoteConfig(app, cachingClient, storageCache, storage, logger);\r\n // Starts warming cache.\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n remoteConfigInstance.ensureInitialized();\r\n return remoteConfigInstance;\r\n }\r\n}\r\nregisterRemoteConfig(firebase);\n\nexport { registerRemoteConfig };\n//# sourceMappingURL=index.esm.js.map\n","import firebase from '@firebase/app';\nimport { __extends, __spreadArray, __awaiter, __generator, __assign } from 'tslib';\nimport { FirebaseError, createMockUserToken, getModularInstance } from '@firebase/util';\nimport { Component } from '@firebase/component';\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\n/**\r\n * @fileoverview Constants used in the Firebase Storage library.\r\n */\r\n/**\r\n * Domain name for firebase storage.\r\n */\r\nvar DEFAULT_HOST = 'firebasestorage.googleapis.com';\r\n/**\r\n * The key in Firebase config json for the storage bucket.\r\n */\r\nvar CONFIG_STORAGE_BUCKET_KEY = 'storageBucket';\r\n/**\r\n * 2 minutes\r\n *\r\n * The timeout for all operations except upload.\r\n */\r\nvar DEFAULT_MAX_OPERATION_RETRY_TIME = 2 * 60 * 1000;\r\n/**\r\n * 10 minutes\r\n *\r\n * The timeout for upload.\r\n */\r\nvar DEFAULT_MAX_UPLOAD_RETRY_TIME = 10 * 60 * 1000;\n\n/**\r\n * An error returned by the Firebase Storage SDK.\r\n * @public\r\n */\r\nvar FirebaseStorageError = /** @class */ (function (_super) {\r\n __extends(FirebaseStorageError, _super);\r\n /**\r\n * @param code - A StorageErrorCode string to be prefixed with 'storage/' and\r\n * added to the end of the message.\r\n * @param message - Error message.\r\n */\r\n function FirebaseStorageError(code, message) {\r\n var _this = _super.call(this, prependCode(code), \"Firebase Storage: \" + message + \" (\" + prependCode(code) + \")\") || this;\r\n /**\r\n * Stores custom error data unque to FirebaseStorageError.\r\n */\r\n _this.customData = { serverResponse: null };\r\n _this._baseMessage = _this.message;\r\n // Without this, `instanceof FirebaseStorageError`, in tests for example,\r\n // returns false.\r\n Object.setPrototypeOf(_this, FirebaseStorageError.prototype);\r\n return _this;\r\n }\r\n /**\r\n * Compares a StorageErrorCode against this error's code, filtering out the prefix.\r\n */\r\n FirebaseStorageError.prototype._codeEquals = function (code) {\r\n return prependCode(code) === this.code;\r\n };\r\n Object.defineProperty(FirebaseStorageError.prototype, \"serverResponse\", {\r\n /**\r\n * Optional response message that was added by the server.\r\n */\r\n get: function () {\r\n return this.customData.serverResponse;\r\n },\r\n set: function (serverResponse) {\r\n this.customData.serverResponse = serverResponse;\r\n if (this.customData.serverResponse) {\r\n this.message = this._baseMessage + \"\\n\" + this.customData.serverResponse;\r\n }\r\n else {\r\n this.message = this._baseMessage;\r\n }\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n return FirebaseStorageError;\r\n}(FirebaseError));\r\nfunction prependCode(code) {\r\n return 'storage/' + code;\r\n}\r\nfunction unknown() {\r\n var message = 'An unknown error occurred, please check the error payload for ' +\r\n 'server response.';\r\n return new FirebaseStorageError(\"unknown\" /* UNKNOWN */, message);\r\n}\r\nfunction objectNotFound(path) {\r\n return new FirebaseStorageError(\"object-not-found\" /* OBJECT_NOT_FOUND */, \"Object '\" + path + \"' does not exist.\");\r\n}\r\nfunction quotaExceeded(bucket) {\r\n return new FirebaseStorageError(\"quota-exceeded\" /* QUOTA_EXCEEDED */, \"Quota for bucket '\" +\r\n bucket +\r\n \"' exceeded, please view quota on \" +\r\n 'https://firebase.google.com/pricing/.');\r\n}\r\nfunction unauthenticated() {\r\n var message = 'User is not authenticated, please authenticate using Firebase ' +\r\n 'Authentication and try again.';\r\n return new FirebaseStorageError(\"unauthenticated\" /* UNAUTHENTICATED */, message);\r\n}\r\nfunction unauthorizedApp() {\r\n return new FirebaseStorageError(\"unauthorized-app\" /* UNAUTHORIZED_APP */, 'This app does not have permission to access Firebase Storage on this project.');\r\n}\r\nfunction unauthorized(path) {\r\n return new FirebaseStorageError(\"unauthorized\" /* UNAUTHORIZED */, \"User does not have permission to access '\" + path + \"'.\");\r\n}\r\nfunction retryLimitExceeded() {\r\n return new FirebaseStorageError(\"retry-limit-exceeded\" /* RETRY_LIMIT_EXCEEDED */, 'Max retry time for operation exceeded, please try again.');\r\n}\r\nfunction canceled() {\r\n return new FirebaseStorageError(\"canceled\" /* CANCELED */, 'User canceled the upload/download.');\r\n}\r\nfunction invalidUrl(url) {\r\n return new FirebaseStorageError(\"invalid-url\" /* INVALID_URL */, \"Invalid URL '\" + url + \"'.\");\r\n}\r\nfunction invalidDefaultBucket(bucket) {\r\n return new FirebaseStorageError(\"invalid-default-bucket\" /* INVALID_DEFAULT_BUCKET */, \"Invalid default bucket '\" + bucket + \"'.\");\r\n}\r\nfunction noDefaultBucket() {\r\n return new FirebaseStorageError(\"no-default-bucket\" /* NO_DEFAULT_BUCKET */, 'No default bucket ' +\r\n \"found. Did you set the '\" +\r\n CONFIG_STORAGE_BUCKET_KEY +\r\n \"' property when initializing the app?\");\r\n}\r\nfunction cannotSliceBlob() {\r\n return new FirebaseStorageError(\"cannot-slice-blob\" /* CANNOT_SLICE_BLOB */, 'Cannot slice blob for upload. Please retry the upload.');\r\n}\r\nfunction serverFileWrongSize() {\r\n return new FirebaseStorageError(\"server-file-wrong-size\" /* SERVER_FILE_WRONG_SIZE */, 'Server recorded incorrect upload file size, please retry the upload.');\r\n}\r\nfunction noDownloadURL() {\r\n return new FirebaseStorageError(\"no-download-url\" /* NO_DOWNLOAD_URL */, 'The given file does not have any download URLs.');\r\n}\r\nfunction invalidArgument(message) {\r\n return new FirebaseStorageError(\"invalid-argument\" /* INVALID_ARGUMENT */, message);\r\n}\r\nfunction appDeleted() {\r\n return new FirebaseStorageError(\"app-deleted\" /* APP_DELETED */, 'The Firebase app was deleted.');\r\n}\r\n/**\r\n * @param name - The name of the operation that was invalid.\r\n */\r\nfunction invalidRootOperation(name) {\r\n return new FirebaseStorageError(\"invalid-root-operation\" /* INVALID_ROOT_OPERATION */, \"The operation '\" +\r\n name +\r\n \"' cannot be performed on a root reference, create a non-root \" +\r\n \"reference using child, such as .child('file.png').\");\r\n}\r\n/**\r\n * @param format - The format that was not valid.\r\n * @param message - A message describing the format violation.\r\n */\r\nfunction invalidFormat(format, message) {\r\n return new FirebaseStorageError(\"invalid-format\" /* INVALID_FORMAT */, \"String does not match format '\" + format + \"': \" + message);\r\n}\r\n/**\r\n * @param message - A message describing the internal error.\r\n */\r\nfunction internalError(message) {\r\n throw new FirebaseStorageError(\"internal-error\" /* INTERNAL_ERROR */, 'Internal error: ' + message);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** Converts a Base64 encoded string to a binary string. */\r\nfunction decodeBase64(encoded) {\r\n return atob(encoded);\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\n/**\r\n * An enumeration of the possible string formats for upload.\r\n * @public\r\n */\r\nvar StringFormat = {\r\n /**\r\n * Indicates the string should be interpreted \"raw\", that is, as normal text.\r\n * The string will be interpreted as UTF-16, then uploaded as a UTF-8 byte\r\n * sequence.\r\n * Example: The string 'Hello! \\\\ud83d\\\\ude0a' becomes the byte sequence\r\n * 48 65 6c 6c 6f 21 20 f0 9f 98 8a\r\n */\r\n RAW: 'raw',\r\n /**\r\n * Indicates the string should be interpreted as base64-encoded data.\r\n * Padding characters (trailing '='s) are optional.\r\n * Example: The string 'rWmO++E6t7/rlw==' becomes the byte sequence\r\n * ad 69 8e fb e1 3a b7 bf eb 97\r\n */\r\n BASE64: 'base64',\r\n /**\r\n * Indicates the string should be interpreted as base64url-encoded data.\r\n * Padding characters (trailing '='s) are optional.\r\n * Example: The string 'rWmO--E6t7_rlw==' becomes the byte sequence\r\n * ad 69 8e fb e1 3a b7 bf eb 97\r\n */\r\n BASE64URL: 'base64url',\r\n /**\r\n * Indicates the string is a data URL, such as one obtained from\r\n * canvas.toDataURL().\r\n * Example: the string 'data:application/octet-stream;base64,aaaa'\r\n * becomes the byte sequence\r\n * 69 a6 9a\r\n * (the content-type \"application/octet-stream\" is also applied, but can\r\n * be overridden in the metadata object).\r\n */\r\n DATA_URL: 'data_url'\r\n};\r\nvar StringData = /** @class */ (function () {\r\n function StringData(data, contentType) {\r\n this.data = data;\r\n this.contentType = contentType || null;\r\n }\r\n return StringData;\r\n}());\r\nfunction dataFromString(format, stringData) {\r\n switch (format) {\r\n case StringFormat.RAW:\r\n return new StringData(utf8Bytes_(stringData));\r\n case StringFormat.BASE64:\r\n case StringFormat.BASE64URL:\r\n return new StringData(base64Bytes_(format, stringData));\r\n case StringFormat.DATA_URL:\r\n return new StringData(dataURLBytes_(stringData), dataURLContentType_(stringData));\r\n // do nothing\r\n }\r\n // assert(false);\r\n throw unknown();\r\n}\r\nfunction utf8Bytes_(value) {\r\n var b = [];\r\n for (var i = 0; i < value.length; i++) {\r\n var c = value.charCodeAt(i);\r\n if (c <= 127) {\r\n b.push(c);\r\n }\r\n else {\r\n if (c <= 2047) {\r\n b.push(192 | (c >> 6), 128 | (c & 63));\r\n }\r\n else {\r\n if ((c & 64512) === 55296) {\r\n // The start of a surrogate pair.\r\n var valid = i < value.length - 1 && (value.charCodeAt(i + 1) & 64512) === 56320;\r\n if (!valid) {\r\n // The second surrogate wasn't there.\r\n b.push(239, 191, 189);\r\n }\r\n else {\r\n var hi = c;\r\n var lo = value.charCodeAt(++i);\r\n c = 65536 | ((hi & 1023) << 10) | (lo & 1023);\r\n b.push(240 | (c >> 18), 128 | ((c >> 12) & 63), 128 | ((c >> 6) & 63), 128 | (c & 63));\r\n }\r\n }\r\n else {\r\n if ((c & 64512) === 56320) {\r\n // Invalid low surrogate.\r\n b.push(239, 191, 189);\r\n }\r\n else {\r\n b.push(224 | (c >> 12), 128 | ((c >> 6) & 63), 128 | (c & 63));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return new Uint8Array(b);\r\n}\r\nfunction percentEncodedBytes_(value) {\r\n var decoded;\r\n try {\r\n decoded = decodeURIComponent(value);\r\n }\r\n catch (e) {\r\n throw invalidFormat(StringFormat.DATA_URL, 'Malformed data URL.');\r\n }\r\n return utf8Bytes_(decoded);\r\n}\r\nfunction base64Bytes_(format, value) {\r\n switch (format) {\r\n case StringFormat.BASE64: {\r\n var hasMinus = value.indexOf('-') !== -1;\r\n var hasUnder = value.indexOf('_') !== -1;\r\n if (hasMinus || hasUnder) {\r\n var invalidChar = hasMinus ? '-' : '_';\r\n throw invalidFormat(format, \"Invalid character '\" +\r\n invalidChar +\r\n \"' found: is it base64url encoded?\");\r\n }\r\n break;\r\n }\r\n case StringFormat.BASE64URL: {\r\n var hasPlus = value.indexOf('+') !== -1;\r\n var hasSlash = value.indexOf('/') !== -1;\r\n if (hasPlus || hasSlash) {\r\n var invalidChar = hasPlus ? '+' : '/';\r\n throw invalidFormat(format, \"Invalid character '\" + invalidChar + \"' found: is it base64 encoded?\");\r\n }\r\n value = value.replace(/-/g, '+').replace(/_/g, '/');\r\n break;\r\n }\r\n // do nothing\r\n }\r\n var bytes;\r\n try {\r\n bytes = decodeBase64(value);\r\n }\r\n catch (e) {\r\n throw invalidFormat(format, 'Invalid character found');\r\n }\r\n var array = new Uint8Array(bytes.length);\r\n for (var i = 0; i < bytes.length; i++) {\r\n array[i] = bytes.charCodeAt(i);\r\n }\r\n return array;\r\n}\r\nvar DataURLParts = /** @class */ (function () {\r\n function DataURLParts(dataURL) {\r\n this.base64 = false;\r\n this.contentType = null;\r\n var matches = dataURL.match(/^data:([^,]+)?,/);\r\n if (matches === null) {\r\n throw invalidFormat(StringFormat.DATA_URL, \"Must be formatted 'data:[][;base64],\");\r\n }\r\n var middle = matches[1] || null;\r\n if (middle != null) {\r\n this.base64 = endsWith(middle, ';base64');\r\n this.contentType = this.base64\r\n ? middle.substring(0, middle.length - ';base64'.length)\r\n : middle;\r\n }\r\n this.rest = dataURL.substring(dataURL.indexOf(',') + 1);\r\n }\r\n return DataURLParts;\r\n}());\r\nfunction dataURLBytes_(dataUrl) {\r\n var parts = new DataURLParts(dataUrl);\r\n if (parts.base64) {\r\n return base64Bytes_(StringFormat.BASE64, parts.rest);\r\n }\r\n else {\r\n return percentEncodedBytes_(parts.rest);\r\n }\r\n}\r\nfunction dataURLContentType_(dataUrl) {\r\n var parts = new DataURLParts(dataUrl);\r\n return parts.contentType;\r\n}\r\nfunction endsWith(s, end) {\r\n var longEnough = s.length >= end.length;\r\n if (!longEnough) {\r\n return false;\r\n }\r\n return s.substring(s.length - end.length) === end;\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\n/**\r\n * An event that is triggered on a task.\r\n */\r\nvar TaskEvent = {\r\n /**\r\n * For this event,\r\n *

\r\n */\r\n STATE_CHANGED: 'state_changed'\r\n};\r\n/**\r\n * Represents the current state of a running upload.\r\n */\r\nvar TaskState = {\r\n /** The task is currently transferring data. */\r\n RUNNING: 'running',\r\n /** The task was paused by the user. */\r\n PAUSED: 'paused',\r\n /** The task completed successfully. */\r\n SUCCESS: 'success',\r\n /** The task was canceled. */\r\n CANCELED: 'canceled',\r\n /** The task failed with an error. */\r\n ERROR: 'error'\r\n};\r\nfunction taskStateFromInternalTaskState(state) {\r\n switch (state) {\r\n case \"running\" /* RUNNING */:\r\n case \"pausing\" /* PAUSING */:\r\n case \"canceling\" /* CANCELING */:\r\n return TaskState.RUNNING;\r\n case \"paused\" /* PAUSED */:\r\n return TaskState.PAUSED;\r\n case \"success\" /* SUCCESS */:\r\n return TaskState.SUCCESS;\r\n case \"canceled\" /* CANCELED */:\r\n return TaskState.CANCELED;\r\n case \"error\" /* ERROR */:\r\n return TaskState.ERROR;\r\n default:\r\n // TODO(andysoto): assert(false);\r\n return TaskState.ERROR;\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\n/**\r\n * Error codes for requests made by the the XhrIo wrapper.\r\n */\r\nvar ErrorCode;\r\n(function (ErrorCode) {\r\n ErrorCode[ErrorCode[\"NO_ERROR\"] = 0] = \"NO_ERROR\";\r\n ErrorCode[ErrorCode[\"NETWORK_ERROR\"] = 1] = \"NETWORK_ERROR\";\r\n ErrorCode[ErrorCode[\"ABORT\"] = 2] = \"ABORT\";\r\n})(ErrorCode || (ErrorCode = {}));\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\n/**\r\n * Network layer for browsers. We use this instead of goog.net.XhrIo because\r\n * goog.net.XhrIo is hyuuuuge and doesn't work in React Native on Android.\r\n */\r\nvar XhrConnection = /** @class */ (function () {\r\n function XhrConnection() {\r\n var _this = this;\r\n this.sent_ = false;\r\n this.xhr_ = new XMLHttpRequest();\r\n this.errorCode_ = ErrorCode.NO_ERROR;\r\n this.sendPromise_ = new Promise(function (resolve) {\r\n _this.xhr_.addEventListener('abort', function () {\r\n _this.errorCode_ = ErrorCode.ABORT;\r\n resolve();\r\n });\r\n _this.xhr_.addEventListener('error', function () {\r\n _this.errorCode_ = ErrorCode.NETWORK_ERROR;\r\n resolve();\r\n });\r\n _this.xhr_.addEventListener('load', function () {\r\n resolve();\r\n });\r\n });\r\n }\r\n /**\r\n * @override\r\n */\r\n XhrConnection.prototype.send = function (url, method, body, headers) {\r\n if (this.sent_) {\r\n throw internalError('cannot .send() more than once');\r\n }\r\n this.sent_ = true;\r\n this.xhr_.open(method, url, true);\r\n if (headers !== undefined) {\r\n for (var key in headers) {\r\n if (headers.hasOwnProperty(key)) {\r\n this.xhr_.setRequestHeader(key, headers[key].toString());\r\n }\r\n }\r\n }\r\n if (body !== undefined) {\r\n this.xhr_.send(body);\r\n }\r\n else {\r\n this.xhr_.send();\r\n }\r\n return this.sendPromise_;\r\n };\r\n /**\r\n * @override\r\n */\r\n XhrConnection.prototype.getErrorCode = function () {\r\n if (!this.sent_) {\r\n throw internalError('cannot .getErrorCode() before sending');\r\n }\r\n return this.errorCode_;\r\n };\r\n /**\r\n * @override\r\n */\r\n XhrConnection.prototype.getStatus = function () {\r\n if (!this.sent_) {\r\n throw internalError('cannot .getStatus() before sending');\r\n }\r\n try {\r\n return this.xhr_.status;\r\n }\r\n catch (e) {\r\n return -1;\r\n }\r\n };\r\n /**\r\n * @override\r\n */\r\n XhrConnection.prototype.getResponseText = function () {\r\n if (!this.sent_) {\r\n throw internalError('cannot .getResponseText() before sending');\r\n }\r\n return this.xhr_.responseText;\r\n };\r\n /**\r\n * Aborts the request.\r\n * @override\r\n */\r\n XhrConnection.prototype.abort = function () {\r\n this.xhr_.abort();\r\n };\r\n /**\r\n * @override\r\n */\r\n XhrConnection.prototype.getResponseHeader = function (header) {\r\n return this.xhr_.getResponseHeader(header);\r\n };\r\n /**\r\n * @override\r\n */\r\n XhrConnection.prototype.addUploadProgressListener = function (listener) {\r\n if (this.xhr_.upload != null) {\r\n this.xhr_.upload.addEventListener('progress', listener);\r\n }\r\n };\r\n /**\r\n * @override\r\n */\r\n XhrConnection.prototype.removeUploadProgressListener = function (listener) {\r\n if (this.xhr_.upload != null) {\r\n this.xhr_.upload.removeEventListener('progress', listener);\r\n }\r\n };\r\n return XhrConnection;\r\n}());\r\nfunction newConnection() {\r\n return new XhrConnection();\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\n/**\r\n * Factory-like class for creating XhrIo instances.\r\n */\r\nvar ConnectionPool = /** @class */ (function () {\r\n function ConnectionPool() {\r\n }\r\n ConnectionPool.prototype.createConnection = function () {\r\n return newConnection();\r\n };\r\n return ConnectionPool;\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\n/**\r\n * Firebase Storage location data.\r\n *\r\n * @internal\r\n */\r\nvar Location = /** @class */ (function () {\r\n function Location(bucket, path) {\r\n this.bucket = bucket;\r\n this.path_ = path;\r\n }\r\n Object.defineProperty(Location.prototype, \"path\", {\r\n get: function () {\r\n return this.path_;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(Location.prototype, \"isRoot\", {\r\n get: function () {\r\n return this.path.length === 0;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Location.prototype.fullServerUrl = function () {\r\n var encode = encodeURIComponent;\r\n return '/b/' + encode(this.bucket) + '/o/' + encode(this.path);\r\n };\r\n Location.prototype.bucketOnlyServerUrl = function () {\r\n var encode = encodeURIComponent;\r\n return '/b/' + encode(this.bucket) + '/o';\r\n };\r\n Location.makeFromBucketSpec = function (bucketString, host) {\r\n var bucketLocation;\r\n try {\r\n bucketLocation = Location.makeFromUrl(bucketString, host);\r\n }\r\n catch (e) {\r\n // Not valid URL, use as-is. This lets you put bare bucket names in\r\n // config.\r\n return new Location(bucketString, '');\r\n }\r\n if (bucketLocation.path === '') {\r\n return bucketLocation;\r\n }\r\n else {\r\n throw invalidDefaultBucket(bucketString);\r\n }\r\n };\r\n Location.makeFromUrl = function (url, host) {\r\n var location = null;\r\n var bucketDomain = '([A-Za-z0-9.\\\\-_]+)';\r\n function gsModify(loc) {\r\n if (loc.path.charAt(loc.path.length - 1) === '/') {\r\n loc.path_ = loc.path_.slice(0, -1);\r\n }\r\n }\r\n var gsPath = '(/(.*))?$';\r\n var gsRegex = new RegExp('^gs://' + bucketDomain + gsPath, 'i');\r\n var gsIndices = { bucket: 1, path: 3 };\r\n function httpModify(loc) {\r\n loc.path_ = decodeURIComponent(loc.path);\r\n }\r\n var version = 'v[A-Za-z0-9_]+';\r\n var firebaseStorageHost = host.replace(/[.]/g, '\\\\.');\r\n var firebaseStoragePath = '(/([^?#]*).*)?$';\r\n var firebaseStorageRegExp = new RegExp(\"^https?://\" + firebaseStorageHost + \"/\" + version + \"/b/\" + bucketDomain + \"/o\" + firebaseStoragePath, 'i');\r\n var firebaseStorageIndices = { bucket: 1, path: 3 };\r\n var cloudStorageHost = host === DEFAULT_HOST\r\n ? '(?:storage.googleapis.com|storage.cloud.google.com)'\r\n : host;\r\n var cloudStoragePath = '([^?#]*)';\r\n var cloudStorageRegExp = new RegExp(\"^https?://\" + cloudStorageHost + \"/\" + bucketDomain + \"/\" + cloudStoragePath, 'i');\r\n var cloudStorageIndices = { bucket: 1, path: 2 };\r\n var groups = [\r\n { regex: gsRegex, indices: gsIndices, postModify: gsModify },\r\n {\r\n regex: firebaseStorageRegExp,\r\n indices: firebaseStorageIndices,\r\n postModify: httpModify\r\n },\r\n {\r\n regex: cloudStorageRegExp,\r\n indices: cloudStorageIndices,\r\n postModify: httpModify\r\n }\r\n ];\r\n for (var i = 0; i < groups.length; i++) {\r\n var group = groups[i];\r\n var captures = group.regex.exec(url);\r\n if (captures) {\r\n var bucketValue = captures[group.indices.bucket];\r\n var pathValue = captures[group.indices.path];\r\n if (!pathValue) {\r\n pathValue = '';\r\n }\r\n location = new Location(bucketValue, pathValue);\r\n group.postModify(location);\r\n break;\r\n }\r\n }\r\n if (location == null) {\r\n throw invalidUrl(url);\r\n }\r\n return location;\r\n };\r\n return Location;\r\n}());\n\n/**\r\n * A request whose promise always fails.\r\n */\r\nvar FailRequest = /** @class */ (function () {\r\n function FailRequest(error) {\r\n this.promise_ = Promise.reject(error);\r\n }\r\n /** @inheritDoc */\r\n FailRequest.prototype.getPromise = function () {\r\n return this.promise_;\r\n };\r\n /** @inheritDoc */\r\n FailRequest.prototype.cancel = function (_appDelete) {\r\n };\r\n return FailRequest;\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\n/**\r\n * @param f May be invoked\r\n * before the function returns.\r\n * @param callback Get all the arguments passed to the function\r\n * passed to f, including the initial boolean.\r\n */\r\nfunction start(f, \r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ncallback, timeout) {\r\n // TODO(andysoto): make this code cleaner (probably refactor into an actual\r\n // type instead of a bunch of functions with state shared in the closure)\r\n var waitSeconds = 1;\r\n // Would type this as \"number\" but that doesn't work for Node so ¯\\_(ツ)_/¯\r\n // TODO: find a way to exclude Node type definition for storage because storage only works in browser\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n var timeoutId = null;\r\n var hitTimeout = false;\r\n var cancelState = 0;\r\n function canceled() {\r\n return cancelState === 2;\r\n }\r\n var triggeredCallback = false;\r\n function triggerCallback() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n if (!triggeredCallback) {\r\n triggeredCallback = true;\r\n callback.apply(null, args);\r\n }\r\n }\r\n function callWithDelay(millis) {\r\n timeoutId = setTimeout(function () {\r\n timeoutId = null;\r\n f(handler, canceled());\r\n }, millis);\r\n }\r\n function handler(success) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n if (triggeredCallback) {\r\n return;\r\n }\r\n if (success) {\r\n triggerCallback.call.apply(triggerCallback, __spreadArray([null, success], args));\r\n return;\r\n }\r\n var mustStop = canceled() || hitTimeout;\r\n if (mustStop) {\r\n triggerCallback.call.apply(triggerCallback, __spreadArray([null, success], args));\r\n return;\r\n }\r\n if (waitSeconds < 64) {\r\n /* TODO(andysoto): don't back off so quickly if we know we're offline. */\r\n waitSeconds *= 2;\r\n }\r\n var waitMillis;\r\n if (cancelState === 1) {\r\n cancelState = 2;\r\n waitMillis = 0;\r\n }\r\n else {\r\n waitMillis = (waitSeconds + Math.random()) * 1000;\r\n }\r\n callWithDelay(waitMillis);\r\n }\r\n var stopped = false;\r\n function stop(wasTimeout) {\r\n if (stopped) {\r\n return;\r\n }\r\n stopped = true;\r\n if (triggeredCallback) {\r\n return;\r\n }\r\n if (timeoutId !== null) {\r\n if (!wasTimeout) {\r\n cancelState = 2;\r\n }\r\n clearTimeout(timeoutId);\r\n callWithDelay(0);\r\n }\r\n else {\r\n if (!wasTimeout) {\r\n cancelState = 1;\r\n }\r\n }\r\n }\r\n callWithDelay(0);\r\n setTimeout(function () {\r\n hitTimeout = true;\r\n stop(true);\r\n }, timeout);\r\n return stop;\r\n}\r\n/**\r\n * Stops the retry loop from repeating.\r\n * If the function is currently \"in between\" retries, it is invoked immediately\r\n * with the second parameter as \"true\". Otherwise, it will be invoked once more\r\n * after the current invocation finishes iff the current invocation would have\r\n * triggered another retry.\r\n */\r\nfunction stop(id) {\r\n id(false);\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\nfunction isJustDef(p) {\r\n return p !== void 0;\r\n}\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nfunction isFunction(p) {\r\n return typeof p === 'function';\r\n}\r\nfunction isNonArrayObject(p) {\r\n return typeof p === 'object' && !Array.isArray(p);\r\n}\r\nfunction isString(p) {\r\n return typeof p === 'string' || p instanceof String;\r\n}\r\nfunction isNativeBlob(p) {\r\n return isNativeBlobDefined() && p instanceof Blob;\r\n}\r\nfunction isNativeBlobDefined() {\r\n return typeof Blob !== 'undefined';\r\n}\r\nfunction validateNumber(argument, minValue, maxValue, value) {\r\n if (value < minValue) {\r\n throw invalidArgument(\"Invalid value for '\" + argument + \"'. Expected \" + minValue + \" or greater.\");\r\n }\r\n if (value > maxValue) {\r\n throw invalidArgument(\"Invalid value for '\" + argument + \"'. Expected \" + maxValue + \" or less.\");\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\nfunction makeUrl(urlPart, host) {\r\n var protocolMatch = host.match(/^(\\w+):\\/\\/.+/);\r\n var protocol = protocolMatch === null || protocolMatch === void 0 ? void 0 : protocolMatch[1];\r\n var origin = host;\r\n if (protocol == null) {\r\n origin = \"https://\" + host;\r\n }\r\n return origin + \"/v0\" + urlPart;\r\n}\r\nfunction makeQueryString(params) {\r\n var encode = encodeURIComponent;\r\n var queryPart = '?';\r\n for (var key in params) {\r\n if (params.hasOwnProperty(key)) {\r\n var nextPart = encode(key) + '=' + encode(params[key]);\r\n queryPart = queryPart + nextPart + '&';\r\n }\r\n }\r\n // Chop off the extra '&' or '?' on the end\r\n queryPart = queryPart.slice(0, -1);\r\n return queryPart;\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 NetworkRequest = /** @class */ (function () {\r\n function NetworkRequest(url, method, headers, body, successCodes, additionalRetryCodes, callback, errorCallback, timeout, progressCallback, pool) {\r\n var _this = this;\r\n this.pendingConnection_ = null;\r\n this.backoffId_ = null;\r\n this.canceled_ = false;\r\n this.appDelete_ = false;\r\n this.url_ = url;\r\n this.method_ = method;\r\n this.headers_ = headers;\r\n this.body_ = body;\r\n this.successCodes_ = successCodes.slice();\r\n this.additionalRetryCodes_ = additionalRetryCodes.slice();\r\n this.callback_ = callback;\r\n this.errorCallback_ = errorCallback;\r\n this.progressCallback_ = progressCallback;\r\n this.timeout_ = timeout;\r\n this.pool_ = pool;\r\n this.promise_ = new Promise(function (resolve, reject) {\r\n _this.resolve_ = resolve;\r\n _this.reject_ = reject;\r\n _this.start_();\r\n });\r\n }\r\n /**\r\n * Actually starts the retry loop.\r\n */\r\n NetworkRequest.prototype.start_ = function () {\r\n var self = this;\r\n function doTheRequest(backoffCallback, canceled) {\r\n if (canceled) {\r\n backoffCallback(false, new RequestEndStatus(false, null, true));\r\n return;\r\n }\r\n var connection = self.pool_.createConnection();\r\n self.pendingConnection_ = connection;\r\n function progressListener(progressEvent) {\r\n var loaded = progressEvent.loaded;\r\n var total = progressEvent.lengthComputable ? progressEvent.total : -1;\r\n if (self.progressCallback_ !== null) {\r\n self.progressCallback_(loaded, total);\r\n }\r\n }\r\n if (self.progressCallback_ !== null) {\r\n connection.addUploadProgressListener(progressListener);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n connection\r\n .send(self.url_, self.method_, self.body_, self.headers_)\r\n .then(function () {\r\n if (self.progressCallback_ !== null) {\r\n connection.removeUploadProgressListener(progressListener);\r\n }\r\n self.pendingConnection_ = null;\r\n var hitServer = connection.getErrorCode() === ErrorCode.NO_ERROR;\r\n var status = connection.getStatus();\r\n if (!hitServer || self.isRetryStatusCode_(status)) {\r\n var wasCanceled = connection.getErrorCode() === ErrorCode.ABORT;\r\n backoffCallback(false, new RequestEndStatus(false, null, wasCanceled));\r\n return;\r\n }\r\n var successCode = self.successCodes_.indexOf(status) !== -1;\r\n backoffCallback(true, new RequestEndStatus(successCode, connection));\r\n });\r\n }\r\n /**\r\n * @param requestWentThrough - True if the request eventually went\r\n * through, false if it hit the retry limit or was canceled.\r\n */\r\n function backoffDone(requestWentThrough, status) {\r\n var resolve = self.resolve_;\r\n var reject = self.reject_;\r\n var connection = status.connection;\r\n if (status.wasSuccessCode) {\r\n try {\r\n var result = self.callback_(connection, connection.getResponseText());\r\n if (isJustDef(result)) {\r\n resolve(result);\r\n }\r\n else {\r\n resolve();\r\n }\r\n }\r\n catch (e) {\r\n reject(e);\r\n }\r\n }\r\n else {\r\n if (connection !== null) {\r\n var err = unknown();\r\n err.serverResponse = connection.getResponseText();\r\n if (self.errorCallback_) {\r\n reject(self.errorCallback_(connection, err));\r\n }\r\n else {\r\n reject(err);\r\n }\r\n }\r\n else {\r\n if (status.canceled) {\r\n var err = self.appDelete_ ? appDeleted() : canceled();\r\n reject(err);\r\n }\r\n else {\r\n var err = retryLimitExceeded();\r\n reject(err);\r\n }\r\n }\r\n }\r\n }\r\n if (this.canceled_) {\r\n backoffDone(false, new RequestEndStatus(false, null, true));\r\n }\r\n else {\r\n this.backoffId_ = start(doTheRequest, backoffDone, this.timeout_);\r\n }\r\n };\r\n /** @inheritDoc */\r\n NetworkRequest.prototype.getPromise = function () {\r\n return this.promise_;\r\n };\r\n /** @inheritDoc */\r\n NetworkRequest.prototype.cancel = function (appDelete) {\r\n this.canceled_ = true;\r\n this.appDelete_ = appDelete || false;\r\n if (this.backoffId_ !== null) {\r\n stop(this.backoffId_);\r\n }\r\n if (this.pendingConnection_ !== null) {\r\n this.pendingConnection_.abort();\r\n }\r\n };\r\n NetworkRequest.prototype.isRetryStatusCode_ = function (status) {\r\n // The codes for which to retry came from this page:\r\n // https://cloud.google.com/storage/docs/exponential-backoff\r\n var isFiveHundredCode = status >= 500 && status < 600;\r\n var extraRetryCodes = [\r\n // Request Timeout: web server didn't receive full request in time.\r\n 408,\r\n // Too Many Requests: you're getting rate-limited, basically.\r\n 429\r\n ];\r\n var isExtraRetryCode = extraRetryCodes.indexOf(status) !== -1;\r\n var isRequestSpecificRetryCode = this.additionalRetryCodes_.indexOf(status) !== -1;\r\n return isFiveHundredCode || isExtraRetryCode || isRequestSpecificRetryCode;\r\n };\r\n return NetworkRequest;\r\n}());\r\n/**\r\n * A collection of information about the result of a network request.\r\n * @param opt_canceled - Defaults to false.\r\n */\r\nvar RequestEndStatus = /** @class */ (function () {\r\n function RequestEndStatus(wasSuccessCode, connection, canceled) {\r\n this.wasSuccessCode = wasSuccessCode;\r\n this.connection = connection;\r\n this.canceled = !!canceled;\r\n }\r\n return RequestEndStatus;\r\n}());\r\nfunction addAuthHeader_(headers, authToken) {\r\n if (authToken !== null && authToken.length > 0) {\r\n headers['Authorization'] = 'Firebase ' + authToken;\r\n }\r\n}\r\nfunction addVersionHeader_(headers, firebaseVersion) {\r\n headers['X-Firebase-Storage-Version'] =\r\n 'webjs/' + (firebaseVersion !== null && firebaseVersion !== void 0 ? firebaseVersion : 'AppManager');\r\n}\r\nfunction addGmpidHeader_(headers, appId) {\r\n if (appId) {\r\n headers['X-Firebase-GMPID'] = appId;\r\n }\r\n}\r\nfunction addAppCheckHeader_(headers, appCheckToken) {\r\n if (appCheckToken !== null) {\r\n headers['X-Firebase-AppCheck'] = appCheckToken;\r\n }\r\n}\r\nfunction makeRequest(requestInfo, appId, authToken, appCheckToken, pool, firebaseVersion) {\r\n var queryPart = makeQueryString(requestInfo.urlParams);\r\n var url = requestInfo.url + queryPart;\r\n var headers = Object.assign({}, requestInfo.headers);\r\n addGmpidHeader_(headers, appId);\r\n addAuthHeader_(headers, authToken);\r\n addVersionHeader_(headers, firebaseVersion);\r\n addAppCheckHeader_(headers, appCheckToken);\r\n return new NetworkRequest(url, requestInfo.method, headers, requestInfo.body, requestInfo.successCodes, requestInfo.additionalRetryCodes, requestInfo.handler, requestInfo.errorHandler, requestInfo.timeout, requestInfo.progressCallback, pool);\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\nfunction getBlobBuilder() {\r\n if (typeof BlobBuilder !== 'undefined') {\r\n return BlobBuilder;\r\n }\r\n else if (typeof WebKitBlobBuilder !== 'undefined') {\r\n return WebKitBlobBuilder;\r\n }\r\n else {\r\n return undefined;\r\n }\r\n}\r\n/**\r\n * Concatenates one or more values together and converts them to a Blob.\r\n *\r\n * @param args The values that will make up the resulting blob.\r\n * @return The blob.\r\n */\r\nfunction getBlob() {\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 BlobBuilder = getBlobBuilder();\r\n if (BlobBuilder !== undefined) {\r\n var bb = new BlobBuilder();\r\n for (var i = 0; i < args.length; i++) {\r\n bb.append(args[i]);\r\n }\r\n return bb.getBlob();\r\n }\r\n else {\r\n if (isNativeBlobDefined()) {\r\n return new Blob(args);\r\n }\r\n else {\r\n throw new FirebaseStorageError(\"unsupported-environment\" /* UNSUPPORTED_ENVIRONMENT */, \"This browser doesn't seem to support creating Blobs\");\r\n }\r\n }\r\n}\r\n/**\r\n * Slices the blob. The returned blob contains data from the start byte\r\n * (inclusive) till the end byte (exclusive). Negative indices cannot be used.\r\n *\r\n * @param blob The blob to be sliced.\r\n * @param start Index of the starting byte.\r\n * @param end Index of the ending byte.\r\n * @return The blob slice or null if not supported.\r\n */\r\nfunction sliceBlob(blob, start, end) {\r\n if (blob.webkitSlice) {\r\n return blob.webkitSlice(start, end);\r\n }\r\n else if (blob.mozSlice) {\r\n return blob.mozSlice(start, end);\r\n }\r\n else if (blob.slice) {\r\n return blob.slice(start, end);\r\n }\r\n return null;\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\n/**\r\n * @param opt_elideCopy - If true, doesn't copy mutable input data\r\n * (e.g. Uint8Arrays). Pass true only if you know the objects will not be\r\n * modified after this blob's construction.\r\n *\r\n * @internal\r\n */\r\nvar FbsBlob = /** @class */ (function () {\r\n function FbsBlob(data, elideCopy) {\r\n var size = 0;\r\n var blobType = '';\r\n if (isNativeBlob(data)) {\r\n this.data_ = data;\r\n size = data.size;\r\n blobType = data.type;\r\n }\r\n else if (data instanceof ArrayBuffer) {\r\n if (elideCopy) {\r\n this.data_ = new Uint8Array(data);\r\n }\r\n else {\r\n this.data_ = new Uint8Array(data.byteLength);\r\n this.data_.set(new Uint8Array(data));\r\n }\r\n size = this.data_.length;\r\n }\r\n else if (data instanceof Uint8Array) {\r\n if (elideCopy) {\r\n this.data_ = data;\r\n }\r\n else {\r\n this.data_ = new Uint8Array(data.length);\r\n this.data_.set(data);\r\n }\r\n size = data.length;\r\n }\r\n this.size_ = size;\r\n this.type_ = blobType;\r\n }\r\n FbsBlob.prototype.size = function () {\r\n return this.size_;\r\n };\r\n FbsBlob.prototype.type = function () {\r\n return this.type_;\r\n };\r\n FbsBlob.prototype.slice = function (startByte, endByte) {\r\n if (isNativeBlob(this.data_)) {\r\n var realBlob = this.data_;\r\n var sliced = sliceBlob(realBlob, startByte, endByte);\r\n if (sliced === null) {\r\n return null;\r\n }\r\n return new FbsBlob(sliced);\r\n }\r\n else {\r\n var slice = new Uint8Array(this.data_.buffer, startByte, endByte - startByte);\r\n return new FbsBlob(slice, true);\r\n }\r\n };\r\n FbsBlob.getBlob = 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 if (isNativeBlobDefined()) {\r\n var blobby = args.map(function (val) {\r\n if (val instanceof FbsBlob) {\r\n return val.data_;\r\n }\r\n else {\r\n return val;\r\n }\r\n });\r\n return new FbsBlob(getBlob.apply(null, blobby));\r\n }\r\n else {\r\n var uint8Arrays = args.map(function (val) {\r\n if (isString(val)) {\r\n return dataFromString(StringFormat.RAW, val).data;\r\n }\r\n else {\r\n // Blobs don't exist, so this has to be a Uint8Array.\r\n return val.data_;\r\n }\r\n });\r\n var finalLength_1 = 0;\r\n uint8Arrays.forEach(function (array) {\r\n finalLength_1 += array.byteLength;\r\n });\r\n var merged_1 = new Uint8Array(finalLength_1);\r\n var index_1 = 0;\r\n uint8Arrays.forEach(function (array) {\r\n for (var i = 0; i < array.length; i++) {\r\n merged_1[index_1++] = array[i];\r\n }\r\n });\r\n return new FbsBlob(merged_1, true);\r\n }\r\n };\r\n FbsBlob.prototype.uploadData = function () {\r\n return this.data_;\r\n };\r\n return FbsBlob;\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\n/**\r\n * Returns the Object resulting from parsing the given JSON, or null if the\r\n * given string does not represent a JSON object.\r\n */\r\nfunction jsonObjectOrNull(s) {\r\n var obj;\r\n try {\r\n obj = JSON.parse(s);\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n if (isNonArrayObject(obj)) {\r\n return obj;\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\n/**\r\n * @fileoverview Contains helper methods for manipulating paths.\r\n */\r\n/**\r\n * @return Null if the path is already at the root.\r\n */\r\nfunction parent(path) {\r\n if (path.length === 0) {\r\n return null;\r\n }\r\n var index = path.lastIndexOf('/');\r\n if (index === -1) {\r\n return '';\r\n }\r\n var newPath = path.slice(0, index);\r\n return newPath;\r\n}\r\nfunction child(path, childPath) {\r\n var canonicalChildPath = childPath\r\n .split('/')\r\n .filter(function (component) { return component.length > 0; })\r\n .join('/');\r\n if (path.length === 0) {\r\n return canonicalChildPath;\r\n }\r\n else {\r\n return path + '/' + canonicalChildPath;\r\n }\r\n}\r\n/**\r\n * Returns the last component of a path.\r\n * '/foo/bar' -> 'bar'\r\n * '/foo/bar/baz/' -> 'baz/'\r\n * '/a' -> 'a'\r\n */\r\nfunction lastComponent(path) {\r\n var index = path.lastIndexOf('/', path.length - 2);\r\n if (index === -1) {\r\n return path;\r\n }\r\n else {\r\n return path.slice(index + 1);\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\nfunction noXform_(metadata, value) {\r\n return value;\r\n}\r\nvar Mapping = /** @class */ (function () {\r\n function Mapping(server, local, writable, xform) {\r\n this.server = server;\r\n this.local = local || server;\r\n this.writable = !!writable;\r\n this.xform = xform || noXform_;\r\n }\r\n return Mapping;\r\n}());\r\nvar mappings_ = null;\r\nfunction xformPath(fullPath) {\r\n if (!isString(fullPath) || fullPath.length < 2) {\r\n return fullPath;\r\n }\r\n else {\r\n return lastComponent(fullPath);\r\n }\r\n}\r\nfunction getMappings() {\r\n if (mappings_) {\r\n return mappings_;\r\n }\r\n var mappings = [];\r\n mappings.push(new Mapping('bucket'));\r\n mappings.push(new Mapping('generation'));\r\n mappings.push(new Mapping('metageneration'));\r\n mappings.push(new Mapping('name', 'fullPath', true));\r\n function mappingsXformPath(_metadata, fullPath) {\r\n return xformPath(fullPath);\r\n }\r\n var nameMapping = new Mapping('name');\r\n nameMapping.xform = mappingsXformPath;\r\n mappings.push(nameMapping);\r\n /**\r\n * Coerces the second param to a number, if it is defined.\r\n */\r\n function xformSize(_metadata, size) {\r\n if (size !== undefined) {\r\n return Number(size);\r\n }\r\n else {\r\n return size;\r\n }\r\n }\r\n var sizeMapping = new Mapping('size');\r\n sizeMapping.xform = xformSize;\r\n mappings.push(sizeMapping);\r\n mappings.push(new Mapping('timeCreated'));\r\n mappings.push(new Mapping('updated'));\r\n mappings.push(new Mapping('md5Hash', null, true));\r\n mappings.push(new Mapping('cacheControl', null, true));\r\n mappings.push(new Mapping('contentDisposition', null, true));\r\n mappings.push(new Mapping('contentEncoding', null, true));\r\n mappings.push(new Mapping('contentLanguage', null, true));\r\n mappings.push(new Mapping('contentType', null, true));\r\n mappings.push(new Mapping('metadata', 'customMetadata', true));\r\n mappings_ = mappings;\r\n return mappings_;\r\n}\r\nfunction addRef(metadata, service) {\r\n function generateRef() {\r\n var bucket = metadata['bucket'];\r\n var path = metadata['fullPath'];\r\n var loc = new Location(bucket, path);\r\n return service._makeStorageReference(loc);\r\n }\r\n Object.defineProperty(metadata, 'ref', { get: generateRef });\r\n}\r\nfunction fromResource(service, resource, mappings) {\r\n var metadata = {};\r\n metadata['type'] = 'file';\r\n var len = mappings.length;\r\n for (var i = 0; i < len; i++) {\r\n var mapping = mappings[i];\r\n metadata[mapping.local] = mapping.xform(metadata, resource[mapping.server]);\r\n }\r\n addRef(metadata, service);\r\n return metadata;\r\n}\r\nfunction fromResourceString(service, resourceString, mappings) {\r\n var obj = jsonObjectOrNull(resourceString);\r\n if (obj === null) {\r\n return null;\r\n }\r\n var resource = obj;\r\n return fromResource(service, resource, mappings);\r\n}\r\nfunction downloadUrlFromResourceString(metadata, resourceString, host) {\r\n var obj = jsonObjectOrNull(resourceString);\r\n if (obj === null) {\r\n return null;\r\n }\r\n if (!isString(obj['downloadTokens'])) {\r\n // This can happen if objects are uploaded through GCS and retrieved\r\n // through list, so we don't want to throw an Error.\r\n return null;\r\n }\r\n var tokens = obj['downloadTokens'];\r\n if (tokens.length === 0) {\r\n return null;\r\n }\r\n var encode = encodeURIComponent;\r\n var tokensList = tokens.split(',');\r\n var urls = tokensList.map(function (token) {\r\n var bucket = metadata['bucket'];\r\n var path = metadata['fullPath'];\r\n var urlPart = '/b/' + encode(bucket) + '/o/' + encode(path);\r\n var base = makeUrl(urlPart, host);\r\n var queryString = makeQueryString({\r\n alt: 'media',\r\n token: token\r\n });\r\n return base + queryString;\r\n });\r\n return urls[0];\r\n}\r\nfunction toResourceString(metadata, mappings) {\r\n var resource = {};\r\n var len = mappings.length;\r\n for (var i = 0; i < len; i++) {\r\n var mapping = mappings[i];\r\n if (mapping.writable) {\r\n resource[mapping.server] = metadata[mapping.local];\r\n }\r\n }\r\n return JSON.stringify(resource);\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 PREFIXES_KEY = 'prefixes';\r\nvar ITEMS_KEY = 'items';\r\nfunction fromBackendResponse(service, bucket, resource) {\r\n var listResult = {\r\n prefixes: [],\r\n items: [],\r\n nextPageToken: resource['nextPageToken']\r\n };\r\n if (resource[PREFIXES_KEY]) {\r\n for (var _i = 0, _a = resource[PREFIXES_KEY]; _i < _a.length; _i++) {\r\n var path = _a[_i];\r\n var pathWithoutTrailingSlash = path.replace(/\\/$/, '');\r\n var reference = service._makeStorageReference(new Location(bucket, pathWithoutTrailingSlash));\r\n listResult.prefixes.push(reference);\r\n }\r\n }\r\n if (resource[ITEMS_KEY]) {\r\n for (var _b = 0, _c = resource[ITEMS_KEY]; _b < _c.length; _b++) {\r\n var item = _c[_b];\r\n var reference = service._makeStorageReference(new Location(bucket, item['name']));\r\n listResult.items.push(reference);\r\n }\r\n }\r\n return listResult;\r\n}\r\nfunction fromResponseString(service, bucket, resourceString) {\r\n var obj = jsonObjectOrNull(resourceString);\r\n if (obj === null) {\r\n return null;\r\n }\r\n var resource = obj;\r\n return fromBackendResponse(service, bucket, resource);\r\n}\n\nvar RequestInfo = /** @class */ (function () {\r\n function RequestInfo(url, method, \r\n /**\r\n * Returns the value with which to resolve the request's promise. Only called\r\n * if the request is successful. Throw from this function to reject the\r\n * returned Request's promise with the thrown error.\r\n * Note: The XhrIo passed to this function may be reused after this callback\r\n * returns. Do not keep a reference to it in any way.\r\n */\r\n handler, timeout) {\r\n this.url = url;\r\n this.method = method;\r\n this.handler = handler;\r\n this.timeout = timeout;\r\n this.urlParams = {};\r\n this.headers = {};\r\n this.body = null;\r\n this.errorHandler = null;\r\n /**\r\n * Called with the current number of bytes uploaded and total size (-1 if not\r\n * computable) of the request body (i.e. used to report upload progress).\r\n */\r\n this.progressCallback = null;\r\n this.successCodes = [200];\r\n this.additionalRetryCodes = [];\r\n }\r\n return RequestInfo;\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\n/**\r\n * Throws the UNKNOWN FirebaseStorageError if cndn is false.\r\n */\r\nfunction handlerCheck(cndn) {\r\n if (!cndn) {\r\n throw unknown();\r\n }\r\n}\r\nfunction metadataHandler(service, mappings) {\r\n function handler(xhr, text) {\r\n var metadata = fromResourceString(service, text, mappings);\r\n handlerCheck(metadata !== null);\r\n return metadata;\r\n }\r\n return handler;\r\n}\r\nfunction listHandler(service, bucket) {\r\n function handler(xhr, text) {\r\n var listResult = fromResponseString(service, bucket, text);\r\n handlerCheck(listResult !== null);\r\n return listResult;\r\n }\r\n return handler;\r\n}\r\nfunction downloadUrlHandler(service, mappings) {\r\n function handler(xhr, text) {\r\n var metadata = fromResourceString(service, text, mappings);\r\n handlerCheck(metadata !== null);\r\n return downloadUrlFromResourceString(metadata, text, service.host);\r\n }\r\n return handler;\r\n}\r\nfunction sharedErrorHandler(location) {\r\n function errorHandler(xhr, err) {\r\n var newErr;\r\n if (xhr.getStatus() === 401) {\r\n if (\r\n // This exact message string is the only consistent part of the\r\n // server's error response that identifies it as an App Check error.\r\n xhr.getResponseText().includes('Firebase App Check token is invalid')) {\r\n newErr = unauthorizedApp();\r\n }\r\n else {\r\n newErr = unauthenticated();\r\n }\r\n }\r\n else {\r\n if (xhr.getStatus() === 402) {\r\n newErr = quotaExceeded(location.bucket);\r\n }\r\n else {\r\n if (xhr.getStatus() === 403) {\r\n newErr = unauthorized(location.path);\r\n }\r\n else {\r\n newErr = err;\r\n }\r\n }\r\n }\r\n newErr.serverResponse = err.serverResponse;\r\n return newErr;\r\n }\r\n return errorHandler;\r\n}\r\nfunction objectErrorHandler(location) {\r\n var shared = sharedErrorHandler(location);\r\n function errorHandler(xhr, err) {\r\n var newErr = shared(xhr, err);\r\n if (xhr.getStatus() === 404) {\r\n newErr = objectNotFound(location.path);\r\n }\r\n newErr.serverResponse = err.serverResponse;\r\n return newErr;\r\n }\r\n return errorHandler;\r\n}\r\nfunction getMetadata$2(service, location, mappings) {\r\n var urlPart = location.fullServerUrl();\r\n var url = makeUrl(urlPart, service.host);\r\n var method = 'GET';\r\n var timeout = service.maxOperationRetryTime;\r\n var requestInfo = new RequestInfo(url, method, metadataHandler(service, mappings), timeout);\r\n requestInfo.errorHandler = objectErrorHandler(location);\r\n return requestInfo;\r\n}\r\nfunction list$2(service, location, delimiter, pageToken, maxResults) {\r\n var urlParams = {};\r\n if (location.isRoot) {\r\n urlParams['prefix'] = '';\r\n }\r\n else {\r\n urlParams['prefix'] = location.path + '/';\r\n }\r\n if (delimiter && delimiter.length > 0) {\r\n urlParams['delimiter'] = delimiter;\r\n }\r\n if (pageToken) {\r\n urlParams['pageToken'] = pageToken;\r\n }\r\n if (maxResults) {\r\n urlParams['maxResults'] = maxResults;\r\n }\r\n var urlPart = location.bucketOnlyServerUrl();\r\n var url = makeUrl(urlPart, service.host);\r\n var method = 'GET';\r\n var timeout = service.maxOperationRetryTime;\r\n var requestInfo = new RequestInfo(url, method, listHandler(service, location.bucket), timeout);\r\n requestInfo.urlParams = urlParams;\r\n requestInfo.errorHandler = sharedErrorHandler(location);\r\n return requestInfo;\r\n}\r\nfunction getDownloadUrl(service, location, mappings) {\r\n var urlPart = location.fullServerUrl();\r\n var url = makeUrl(urlPart, service.host);\r\n var method = 'GET';\r\n var timeout = service.maxOperationRetryTime;\r\n var requestInfo = new RequestInfo(url, method, downloadUrlHandler(service, mappings), timeout);\r\n requestInfo.errorHandler = objectErrorHandler(location);\r\n return requestInfo;\r\n}\r\nfunction updateMetadata$2(service, location, metadata, mappings) {\r\n var urlPart = location.fullServerUrl();\r\n var url = makeUrl(urlPart, service.host);\r\n var method = 'PATCH';\r\n var body = toResourceString(metadata, mappings);\r\n var headers = { 'Content-Type': 'application/json; charset=utf-8' };\r\n var timeout = service.maxOperationRetryTime;\r\n var requestInfo = new RequestInfo(url, method, metadataHandler(service, mappings), timeout);\r\n requestInfo.headers = headers;\r\n requestInfo.body = body;\r\n requestInfo.errorHandler = objectErrorHandler(location);\r\n return requestInfo;\r\n}\r\nfunction deleteObject$2(service, location) {\r\n var urlPart = location.fullServerUrl();\r\n var url = makeUrl(urlPart, service.host);\r\n var method = 'DELETE';\r\n var timeout = service.maxOperationRetryTime;\r\n function handler(_xhr, _text) { }\r\n var requestInfo = new RequestInfo(url, method, handler, timeout);\r\n requestInfo.successCodes = [200, 204];\r\n requestInfo.errorHandler = objectErrorHandler(location);\r\n return requestInfo;\r\n}\r\nfunction determineContentType_(metadata, blob) {\r\n return ((metadata && metadata['contentType']) ||\r\n (blob && blob.type()) ||\r\n 'application/octet-stream');\r\n}\r\nfunction metadataForUpload_(location, blob, metadata) {\r\n var metadataClone = Object.assign({}, metadata);\r\n metadataClone['fullPath'] = location.path;\r\n metadataClone['size'] = blob.size();\r\n if (!metadataClone['contentType']) {\r\n metadataClone['contentType'] = determineContentType_(null, blob);\r\n }\r\n return metadataClone;\r\n}\r\n/**\r\n * Prepare RequestInfo for uploads as Content-Type: multipart.\r\n */\r\nfunction multipartUpload(service, location, mappings, blob, metadata) {\r\n var urlPart = location.bucketOnlyServerUrl();\r\n var headers = {\r\n 'X-Goog-Upload-Protocol': 'multipart'\r\n };\r\n function genBoundary() {\r\n var str = '';\r\n for (var i = 0; i < 2; i++) {\r\n str = str + Math.random().toString().slice(2);\r\n }\r\n return str;\r\n }\r\n var boundary = genBoundary();\r\n headers['Content-Type'] = 'multipart/related; boundary=' + boundary;\r\n var metadata_ = metadataForUpload_(location, blob, metadata);\r\n var metadataString = toResourceString(metadata_, mappings);\r\n var preBlobPart = '--' +\r\n boundary +\r\n '\\r\\n' +\r\n 'Content-Type: application/json; charset=utf-8\\r\\n\\r\\n' +\r\n metadataString +\r\n '\\r\\n--' +\r\n boundary +\r\n '\\r\\n' +\r\n 'Content-Type: ' +\r\n metadata_['contentType'] +\r\n '\\r\\n\\r\\n';\r\n var postBlobPart = '\\r\\n--' + boundary + '--';\r\n var body = FbsBlob.getBlob(preBlobPart, blob, postBlobPart);\r\n if (body === null) {\r\n throw cannotSliceBlob();\r\n }\r\n var urlParams = { name: metadata_['fullPath'] };\r\n var url = makeUrl(urlPart, service.host);\r\n var method = 'POST';\r\n var timeout = service.maxUploadRetryTime;\r\n var requestInfo = new RequestInfo(url, method, metadataHandler(service, mappings), timeout);\r\n requestInfo.urlParams = urlParams;\r\n requestInfo.headers = headers;\r\n requestInfo.body = body.uploadData();\r\n requestInfo.errorHandler = sharedErrorHandler(location);\r\n return requestInfo;\r\n}\r\n/**\r\n * @param current The number of bytes that have been uploaded so far.\r\n * @param total The total number of bytes in the upload.\r\n * @param opt_finalized True if the server has finished the upload.\r\n * @param opt_metadata The upload metadata, should\r\n * only be passed if opt_finalized is true.\r\n */\r\nvar ResumableUploadStatus = /** @class */ (function () {\r\n function ResumableUploadStatus(current, total, finalized, metadata) {\r\n this.current = current;\r\n this.total = total;\r\n this.finalized = !!finalized;\r\n this.metadata = metadata || null;\r\n }\r\n return ResumableUploadStatus;\r\n}());\r\nfunction checkResumeHeader_(xhr, allowed) {\r\n var status = null;\r\n try {\r\n status = xhr.getResponseHeader('X-Goog-Upload-Status');\r\n }\r\n catch (e) {\r\n handlerCheck(false);\r\n }\r\n var allowedStatus = allowed || ['active'];\r\n handlerCheck(!!status && allowedStatus.indexOf(status) !== -1);\r\n return status;\r\n}\r\nfunction createResumableUpload(service, location, mappings, blob, metadata) {\r\n var urlPart = location.bucketOnlyServerUrl();\r\n var metadataForUpload = metadataForUpload_(location, blob, metadata);\r\n var urlParams = { name: metadataForUpload['fullPath'] };\r\n var url = makeUrl(urlPart, service.host);\r\n var method = 'POST';\r\n var headers = {\r\n 'X-Goog-Upload-Protocol': 'resumable',\r\n 'X-Goog-Upload-Command': 'start',\r\n 'X-Goog-Upload-Header-Content-Length': \"\" + blob.size(),\r\n 'X-Goog-Upload-Header-Content-Type': metadataForUpload['contentType'],\r\n 'Content-Type': 'application/json; charset=utf-8'\r\n };\r\n var body = toResourceString(metadataForUpload, mappings);\r\n var timeout = service.maxUploadRetryTime;\r\n function handler(xhr) {\r\n checkResumeHeader_(xhr);\r\n var url;\r\n try {\r\n url = xhr.getResponseHeader('X-Goog-Upload-URL');\r\n }\r\n catch (e) {\r\n handlerCheck(false);\r\n }\r\n handlerCheck(isString(url));\r\n return url;\r\n }\r\n var requestInfo = new RequestInfo(url, method, handler, timeout);\r\n requestInfo.urlParams = urlParams;\r\n requestInfo.headers = headers;\r\n requestInfo.body = body;\r\n requestInfo.errorHandler = sharedErrorHandler(location);\r\n return requestInfo;\r\n}\r\n/**\r\n * @param url From a call to fbs.requests.createResumableUpload.\r\n */\r\nfunction getResumableUploadStatus(service, location, url, blob) {\r\n var headers = { 'X-Goog-Upload-Command': 'query' };\r\n function handler(xhr) {\r\n var status = checkResumeHeader_(xhr, ['active', 'final']);\r\n var sizeString = null;\r\n try {\r\n sizeString = xhr.getResponseHeader('X-Goog-Upload-Size-Received');\r\n }\r\n catch (e) {\r\n handlerCheck(false);\r\n }\r\n if (!sizeString) {\r\n // null or empty string\r\n handlerCheck(false);\r\n }\r\n var size = Number(sizeString);\r\n handlerCheck(!isNaN(size));\r\n return new ResumableUploadStatus(size, blob.size(), status === 'final');\r\n }\r\n var method = 'POST';\r\n var timeout = service.maxUploadRetryTime;\r\n var requestInfo = new RequestInfo(url, method, handler, timeout);\r\n requestInfo.headers = headers;\r\n requestInfo.errorHandler = sharedErrorHandler(location);\r\n return requestInfo;\r\n}\r\n/**\r\n * Any uploads via the resumable upload API must transfer a number of bytes\r\n * that is a multiple of this number.\r\n */\r\nvar RESUMABLE_UPLOAD_CHUNK_SIZE = 256 * 1024;\r\n/**\r\n * @param url From a call to fbs.requests.createResumableUpload.\r\n * @param chunkSize Number of bytes to upload.\r\n * @param status The previous status.\r\n * If not passed or null, we start from the beginning.\r\n * @throws fbs.Error If the upload is already complete, the passed in status\r\n * has a final size inconsistent with the blob, or the blob cannot be sliced\r\n * for upload.\r\n */\r\nfunction continueResumableUpload(location, service, url, blob, chunkSize, mappings, status, progressCallback) {\r\n // TODO(andysoto): standardize on internal asserts\r\n // assert(!(opt_status && opt_status.finalized));\r\n var status_ = new ResumableUploadStatus(0, 0);\r\n if (status) {\r\n status_.current = status.current;\r\n status_.total = status.total;\r\n }\r\n else {\r\n status_.current = 0;\r\n status_.total = blob.size();\r\n }\r\n if (blob.size() !== status_.total) {\r\n throw serverFileWrongSize();\r\n }\r\n var bytesLeft = status_.total - status_.current;\r\n var bytesToUpload = bytesLeft;\r\n if (chunkSize > 0) {\r\n bytesToUpload = Math.min(bytesToUpload, chunkSize);\r\n }\r\n var startByte = status_.current;\r\n var endByte = startByte + bytesToUpload;\r\n var uploadCommand = bytesToUpload === bytesLeft ? 'upload, finalize' : 'upload';\r\n var headers = {\r\n 'X-Goog-Upload-Command': uploadCommand,\r\n 'X-Goog-Upload-Offset': \"\" + status_.current\r\n };\r\n var body = blob.slice(startByte, endByte);\r\n if (body === null) {\r\n throw cannotSliceBlob();\r\n }\r\n function handler(xhr, text) {\r\n // TODO(andysoto): Verify the MD5 of each uploaded range:\r\n // the 'x-range-md5' header comes back with status code 308 responses.\r\n // We'll only be able to bail out though, because you can't re-upload a\r\n // range that you previously uploaded.\r\n var uploadStatus = checkResumeHeader_(xhr, ['active', 'final']);\r\n var newCurrent = status_.current + bytesToUpload;\r\n var size = blob.size();\r\n var metadata;\r\n if (uploadStatus === 'final') {\r\n metadata = metadataHandler(service, mappings)(xhr, text);\r\n }\r\n else {\r\n metadata = null;\r\n }\r\n return new ResumableUploadStatus(newCurrent, size, uploadStatus === 'final', metadata);\r\n }\r\n var method = 'POST';\r\n var timeout = service.maxUploadRetryTime;\r\n var requestInfo = new RequestInfo(url, method, handler, timeout);\r\n requestInfo.headers = headers;\r\n requestInfo.body = body.uploadData();\r\n requestInfo.progressCallback = progressCallback || null;\r\n requestInfo.errorHandler = sharedErrorHandler(location);\r\n return requestInfo;\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 Observer = /** @class */ (function () {\r\n function Observer(nextOrObserver, error, complete) {\r\n var asFunctions = isFunction(nextOrObserver) || error != null || complete != null;\r\n if (asFunctions) {\r\n this.next = nextOrObserver;\r\n this.error = error;\r\n this.complete = complete;\r\n }\r\n else {\r\n var observer = nextOrObserver;\r\n this.next = observer.next;\r\n this.error = observer.error;\r\n this.complete = observer.complete;\r\n }\r\n }\r\n return Observer;\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\n/**\r\n * Returns a function that invokes f with its arguments asynchronously as a\r\n * microtask, i.e. as soon as possible after the current script returns back\r\n * into browser code.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/ban-types\r\nfunction async(f) {\r\n return function () {\r\n var argsToForward = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n argsToForward[_i] = arguments[_i];\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n Promise.resolve().then(function () { return f.apply(void 0, argsToForward); });\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\n/**\r\n * Represents a blob being uploaded. Can be used to pause/resume/cancel the\r\n * upload and manage callbacks for various events.\r\n * @internal\r\n */\r\nvar UploadTask = /** @class */ (function () {\r\n /**\r\n * @param ref - The firebaseStorage.Reference object this task came\r\n * from, untyped to avoid cyclic dependencies.\r\n * @param blob - The blob to upload.\r\n */\r\n function UploadTask(ref, blob, metadata) {\r\n var _this = this;\r\n if (metadata === void 0) { metadata = null; }\r\n /**\r\n * Number of bytes transferred so far.\r\n */\r\n this._transferred = 0;\r\n this._needToFetchStatus = false;\r\n this._needToFetchMetadata = false;\r\n this._observers = [];\r\n this._error = undefined;\r\n this._uploadUrl = undefined;\r\n this._request = undefined;\r\n this._chunkMultiplier = 1;\r\n this._resolve = undefined;\r\n this._reject = undefined;\r\n this._ref = ref;\r\n this._blob = blob;\r\n this._metadata = metadata;\r\n this._mappings = getMappings();\r\n this._resumable = this._shouldDoResumable(this._blob);\r\n this._state = \"running\" /* RUNNING */;\r\n this._errorHandler = function (error) {\r\n _this._request = undefined;\r\n _this._chunkMultiplier = 1;\r\n if (error._codeEquals(\"canceled\" /* CANCELED */)) {\r\n _this._needToFetchStatus = true;\r\n _this.completeTransitions_();\r\n }\r\n else {\r\n _this._error = error;\r\n _this._transition(\"error\" /* ERROR */);\r\n }\r\n };\r\n this._metadataErrorHandler = function (error) {\r\n _this._request = undefined;\r\n if (error._codeEquals(\"canceled\" /* CANCELED */)) {\r\n _this.completeTransitions_();\r\n }\r\n else {\r\n _this._error = error;\r\n _this._transition(\"error\" /* ERROR */);\r\n }\r\n };\r\n this._promise = new Promise(function (resolve, reject) {\r\n _this._resolve = resolve;\r\n _this._reject = reject;\r\n _this._start();\r\n });\r\n // Prevent uncaught rejections on the internal promise from bubbling out\r\n // to the top level with a dummy handler.\r\n this._promise.then(null, function () { });\r\n }\r\n UploadTask.prototype._makeProgressCallback = function () {\r\n var _this = this;\r\n var sizeBefore = this._transferred;\r\n return function (loaded) { return _this._updateProgress(sizeBefore + loaded); };\r\n };\r\n UploadTask.prototype._shouldDoResumable = function (blob) {\r\n return blob.size() > 256 * 1024;\r\n };\r\n UploadTask.prototype._start = function () {\r\n if (this._state !== \"running\" /* RUNNING */) {\r\n // This can happen if someone pauses us in a resume callback, for example.\r\n return;\r\n }\r\n if (this._request !== undefined) {\r\n return;\r\n }\r\n if (this._resumable) {\r\n if (this._uploadUrl === undefined) {\r\n this._createResumable();\r\n }\r\n else {\r\n if (this._needToFetchStatus) {\r\n this._fetchStatus();\r\n }\r\n else {\r\n if (this._needToFetchMetadata) {\r\n // Happens if we miss the metadata on upload completion.\r\n this._fetchMetadata();\r\n }\r\n else {\r\n this._continueUpload();\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n this._oneShotUpload();\r\n }\r\n };\r\n UploadTask.prototype._resolveToken = function (callback) {\r\n var _this = this;\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n Promise.all([\r\n this._ref.storage._getAuthToken(),\r\n this._ref.storage._getAppCheckToken()\r\n ]).then(function (_a) {\r\n var authToken = _a[0], appCheckToken = _a[1];\r\n switch (_this._state) {\r\n case \"running\" /* RUNNING */:\r\n callback(authToken, appCheckToken);\r\n break;\r\n case \"canceling\" /* CANCELING */:\r\n _this._transition(\"canceled\" /* CANCELED */);\r\n break;\r\n case \"pausing\" /* PAUSING */:\r\n _this._transition(\"paused\" /* PAUSED */);\r\n break;\r\n }\r\n });\r\n };\r\n // TODO(andysoto): assert false\r\n UploadTask.prototype._createResumable = function () {\r\n var _this = this;\r\n this._resolveToken(function (authToken, appCheckToken) {\r\n var requestInfo = createResumableUpload(_this._ref.storage, _this._ref._location, _this._mappings, _this._blob, _this._metadata);\r\n var createRequest = _this._ref.storage._makeRequest(requestInfo, authToken, appCheckToken);\r\n _this._request = createRequest;\r\n createRequest.getPromise().then(function (url) {\r\n _this._request = undefined;\r\n _this._uploadUrl = url;\r\n _this._needToFetchStatus = false;\r\n _this.completeTransitions_();\r\n }, _this._errorHandler);\r\n });\r\n };\r\n UploadTask.prototype._fetchStatus = function () {\r\n var _this = this;\r\n // TODO(andysoto): assert(this.uploadUrl_ !== null);\r\n var url = this._uploadUrl;\r\n this._resolveToken(function (authToken, appCheckToken) {\r\n var requestInfo = getResumableUploadStatus(_this._ref.storage, _this._ref._location, url, _this._blob);\r\n var statusRequest = _this._ref.storage._makeRequest(requestInfo, authToken, appCheckToken);\r\n _this._request = statusRequest;\r\n statusRequest.getPromise().then(function (status) {\r\n status = status;\r\n _this._request = undefined;\r\n _this._updateProgress(status.current);\r\n _this._needToFetchStatus = false;\r\n if (status.finalized) {\r\n _this._needToFetchMetadata = true;\r\n }\r\n _this.completeTransitions_();\r\n }, _this._errorHandler);\r\n });\r\n };\r\n UploadTask.prototype._continueUpload = function () {\r\n var _this = this;\r\n var chunkSize = RESUMABLE_UPLOAD_CHUNK_SIZE * this._chunkMultiplier;\r\n var status = new ResumableUploadStatus(this._transferred, this._blob.size());\r\n // TODO(andysoto): assert(this.uploadUrl_ !== null);\r\n var url = this._uploadUrl;\r\n this._resolveToken(function (authToken, appCheckToken) {\r\n var requestInfo;\r\n try {\r\n requestInfo = continueResumableUpload(_this._ref._location, _this._ref.storage, url, _this._blob, chunkSize, _this._mappings, status, _this._makeProgressCallback());\r\n }\r\n catch (e) {\r\n _this._error = e;\r\n _this._transition(\"error\" /* ERROR */);\r\n return;\r\n }\r\n var uploadRequest = _this._ref.storage._makeRequest(requestInfo, authToken, appCheckToken);\r\n _this._request = uploadRequest;\r\n uploadRequest.getPromise().then(function (newStatus) {\r\n _this._increaseMultiplier();\r\n _this._request = undefined;\r\n _this._updateProgress(newStatus.current);\r\n if (newStatus.finalized) {\r\n _this._metadata = newStatus.metadata;\r\n _this._transition(\"success\" /* SUCCESS */);\r\n }\r\n else {\r\n _this.completeTransitions_();\r\n }\r\n }, _this._errorHandler);\r\n });\r\n };\r\n UploadTask.prototype._increaseMultiplier = function () {\r\n var currentSize = RESUMABLE_UPLOAD_CHUNK_SIZE * this._chunkMultiplier;\r\n // Max chunk size is 32M.\r\n if (currentSize < 32 * 1024 * 1024) {\r\n this._chunkMultiplier *= 2;\r\n }\r\n };\r\n UploadTask.prototype._fetchMetadata = function () {\r\n var _this = this;\r\n this._resolveToken(function (authToken, appCheckToken) {\r\n var requestInfo = getMetadata$2(_this._ref.storage, _this._ref._location, _this._mappings);\r\n var metadataRequest = _this._ref.storage._makeRequest(requestInfo, authToken, appCheckToken);\r\n _this._request = metadataRequest;\r\n metadataRequest.getPromise().then(function (metadata) {\r\n _this._request = undefined;\r\n _this._metadata = metadata;\r\n _this._transition(\"success\" /* SUCCESS */);\r\n }, _this._metadataErrorHandler);\r\n });\r\n };\r\n UploadTask.prototype._oneShotUpload = function () {\r\n var _this = this;\r\n this._resolveToken(function (authToken, appCheckToken) {\r\n var requestInfo = multipartUpload(_this._ref.storage, _this._ref._location, _this._mappings, _this._blob, _this._metadata);\r\n var multipartRequest = _this._ref.storage._makeRequest(requestInfo, authToken, appCheckToken);\r\n _this._request = multipartRequest;\r\n multipartRequest.getPromise().then(function (metadata) {\r\n _this._request = undefined;\r\n _this._metadata = metadata;\r\n _this._updateProgress(_this._blob.size());\r\n _this._transition(\"success\" /* SUCCESS */);\r\n }, _this._errorHandler);\r\n });\r\n };\r\n UploadTask.prototype._updateProgress = function (transferred) {\r\n var old = this._transferred;\r\n this._transferred = transferred;\r\n // A progress update can make the \"transferred\" value smaller (e.g. a\r\n // partial upload not completed by server, after which the \"transferred\"\r\n // value may reset to the value at the beginning of the request).\r\n if (this._transferred !== old) {\r\n this._notifyObservers();\r\n }\r\n };\r\n UploadTask.prototype._transition = function (state) {\r\n if (this._state === state) {\r\n return;\r\n }\r\n switch (state) {\r\n case \"canceling\" /* CANCELING */:\r\n // TODO(andysoto):\r\n // assert(this.state_ === InternalTaskState.RUNNING ||\r\n // this.state_ === InternalTaskState.PAUSING);\r\n this._state = state;\r\n if (this._request !== undefined) {\r\n this._request.cancel();\r\n }\r\n break;\r\n case \"pausing\" /* PAUSING */:\r\n // TODO(andysoto):\r\n // assert(this.state_ === InternalTaskState.RUNNING);\r\n this._state = state;\r\n if (this._request !== undefined) {\r\n this._request.cancel();\r\n }\r\n break;\r\n case \"running\" /* RUNNING */:\r\n // TODO(andysoto):\r\n // assert(this.state_ === InternalTaskState.PAUSED ||\r\n // this.state_ === InternalTaskState.PAUSING);\r\n var wasPaused = this._state === \"paused\" /* PAUSED */;\r\n this._state = state;\r\n if (wasPaused) {\r\n this._notifyObservers();\r\n this._start();\r\n }\r\n break;\r\n case \"paused\" /* PAUSED */:\r\n // TODO(andysoto):\r\n // assert(this.state_ === InternalTaskState.PAUSING);\r\n this._state = state;\r\n this._notifyObservers();\r\n break;\r\n case \"canceled\" /* CANCELED */:\r\n // TODO(andysoto):\r\n // assert(this.state_ === InternalTaskState.PAUSED ||\r\n // this.state_ === InternalTaskState.CANCELING);\r\n this._error = canceled();\r\n this._state = state;\r\n this._notifyObservers();\r\n break;\r\n case \"error\" /* ERROR */:\r\n // TODO(andysoto):\r\n // assert(this.state_ === InternalTaskState.RUNNING ||\r\n // this.state_ === InternalTaskState.PAUSING ||\r\n // this.state_ === InternalTaskState.CANCELING);\r\n this._state = state;\r\n this._notifyObservers();\r\n break;\r\n case \"success\" /* SUCCESS */:\r\n // TODO(andysoto):\r\n // assert(this.state_ === InternalTaskState.RUNNING ||\r\n // this.state_ === InternalTaskState.PAUSING ||\r\n // this.state_ === InternalTaskState.CANCELING);\r\n this._state = state;\r\n this._notifyObservers();\r\n break;\r\n }\r\n };\r\n UploadTask.prototype.completeTransitions_ = function () {\r\n switch (this._state) {\r\n case \"pausing\" /* PAUSING */:\r\n this._transition(\"paused\" /* PAUSED */);\r\n break;\r\n case \"canceling\" /* CANCELING */:\r\n this._transition(\"canceled\" /* CANCELED */);\r\n break;\r\n case \"running\" /* RUNNING */:\r\n this._start();\r\n break;\r\n }\r\n };\r\n Object.defineProperty(UploadTask.prototype, \"snapshot\", {\r\n /**\r\n * A snapshot of the current task state.\r\n */\r\n get: function () {\r\n var externalState = taskStateFromInternalTaskState(this._state);\r\n return {\r\n bytesTransferred: this._transferred,\r\n totalBytes: this._blob.size(),\r\n state: externalState,\r\n metadata: this._metadata,\r\n task: this,\r\n ref: this._ref\r\n };\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n /**\r\n * Adds a callback for an event.\r\n * @param type - The type of event to listen for.\r\n * @param nextOrObserver -\r\n * The `next` function, which gets called for each item in\r\n * the event stream, or an observer object with some or all of these three\r\n * properties (`next`, `error`, `complete`).\r\n * @param error - A function that gets called with a `FirebaseStorageError`\r\n * if the event stream ends due to an error.\r\n * @param completed - A function that gets called if the\r\n * event stream ends normally.\r\n * @returns\r\n * If only the event argument is passed, returns a function you can use to\r\n * add callbacks (see the examples above). If more than just the event\r\n * argument is passed, returns a function you can call to unregister the\r\n * callbacks.\r\n */\r\n UploadTask.prototype.on = function (type, nextOrObserver, error, completed) {\r\n var _this = this;\r\n var observer = new Observer(nextOrObserver, error, completed);\r\n this._addObserver(observer);\r\n return function () {\r\n _this._removeObserver(observer);\r\n };\r\n };\r\n /**\r\n * This object behaves like a Promise, and resolves with its snapshot data\r\n * when the upload completes.\r\n * @param onFulfilled - The fulfillment callback. Promise chaining works as normal.\r\n * @param onRejected - The rejection callback.\r\n */\r\n UploadTask.prototype.then = function (onFulfilled, onRejected) {\r\n // These casts are needed so that TypeScript can infer the types of the\r\n // resulting Promise.\r\n return this._promise.then(onFulfilled, onRejected);\r\n };\r\n /**\r\n * Equivalent to calling `then(null, onRejected)`.\r\n */\r\n UploadTask.prototype.catch = function (onRejected) {\r\n return this.then(null, onRejected);\r\n };\r\n /**\r\n * Adds the given observer.\r\n */\r\n UploadTask.prototype._addObserver = function (observer) {\r\n this._observers.push(observer);\r\n this._notifyObserver(observer);\r\n };\r\n /**\r\n * Removes the given observer.\r\n */\r\n UploadTask.prototype._removeObserver = function (observer) {\r\n var i = this._observers.indexOf(observer);\r\n if (i !== -1) {\r\n this._observers.splice(i, 1);\r\n }\r\n };\r\n UploadTask.prototype._notifyObservers = function () {\r\n var _this = this;\r\n this._finishPromise();\r\n var observers = this._observers.slice();\r\n observers.forEach(function (observer) {\r\n _this._notifyObserver(observer);\r\n });\r\n };\r\n UploadTask.prototype._finishPromise = function () {\r\n if (this._resolve !== undefined) {\r\n var triggered = true;\r\n switch (taskStateFromInternalTaskState(this._state)) {\r\n case TaskState.SUCCESS:\r\n async(this._resolve.bind(null, this.snapshot))();\r\n break;\r\n case TaskState.CANCELED:\r\n case TaskState.ERROR:\r\n var toCall = this._reject;\r\n async(toCall.bind(null, this._error))();\r\n break;\r\n default:\r\n triggered = false;\r\n break;\r\n }\r\n if (triggered) {\r\n this._resolve = undefined;\r\n this._reject = undefined;\r\n }\r\n }\r\n };\r\n UploadTask.prototype._notifyObserver = function (observer) {\r\n var externalState = taskStateFromInternalTaskState(this._state);\r\n switch (externalState) {\r\n case TaskState.RUNNING:\r\n case TaskState.PAUSED:\r\n if (observer.next) {\r\n async(observer.next.bind(observer, this.snapshot))();\r\n }\r\n break;\r\n case TaskState.SUCCESS:\r\n if (observer.complete) {\r\n async(observer.complete.bind(observer))();\r\n }\r\n break;\r\n case TaskState.CANCELED:\r\n case TaskState.ERROR:\r\n if (observer.error) {\r\n async(observer.error.bind(observer, this._error))();\r\n }\r\n break;\r\n default:\r\n // TODO(andysoto): assert(false);\r\n if (observer.error) {\r\n async(observer.error.bind(observer, this._error))();\r\n }\r\n }\r\n };\r\n /**\r\n * Resumes a paused task. Has no effect on a currently running or failed task.\r\n * @returns True if the operation took effect, false if ignored.\r\n */\r\n UploadTask.prototype.resume = function () {\r\n var valid = this._state === \"paused\" /* PAUSED */ ||\r\n this._state === \"pausing\" /* PAUSING */;\r\n if (valid) {\r\n this._transition(\"running\" /* RUNNING */);\r\n }\r\n return valid;\r\n };\r\n /**\r\n * Pauses a currently running task. Has no effect on a paused or failed task.\r\n * @returns True if the operation took effect, false if ignored.\r\n */\r\n UploadTask.prototype.pause = function () {\r\n var valid = this._state === \"running\" /* RUNNING */;\r\n if (valid) {\r\n this._transition(\"pausing\" /* PAUSING */);\r\n }\r\n return valid;\r\n };\r\n /**\r\n * Cancels a currently running or paused task. Has no effect on a complete or\r\n * failed task.\r\n * @returns True if the operation took effect, false if ignored.\r\n */\r\n UploadTask.prototype.cancel = function () {\r\n var valid = this._state === \"running\" /* RUNNING */ ||\r\n this._state === \"pausing\" /* PAUSING */;\r\n if (valid) {\r\n this._transition(\"canceling\" /* CANCELING */);\r\n }\r\n return valid;\r\n };\r\n return UploadTask;\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/**\r\n * Provides methods to interact with a bucket in the Firebase Storage service.\r\n * @internal\r\n * @param _location - An fbs.location, or the URL at\r\n * which to base this object, in one of the following forms:\r\n * gs:///\r\n * http[s]://firebasestorage.googleapis.com/\r\n * /b//o/\r\n * Any query or fragment strings will be ignored in the http[s]\r\n * format. If no value is passed, the storage object will use a URL based on\r\n * the project ID of the base firebase.App instance.\r\n */\r\nvar Reference = /** @class */ (function () {\r\n function Reference(_service, location) {\r\n this._service = _service;\r\n if (location instanceof Location) {\r\n this._location = location;\r\n }\r\n else {\r\n this._location = Location.makeFromUrl(location, _service.host);\r\n }\r\n }\r\n /**\r\n * Returns the URL for the bucket and path this object references,\r\n * in the form gs:///\r\n * @override\r\n */\r\n Reference.prototype.toString = function () {\r\n return 'gs://' + this._location.bucket + '/' + this._location.path;\r\n };\r\n Reference.prototype._newRef = function (service, location) {\r\n return new Reference(service, location);\r\n };\r\n Object.defineProperty(Reference.prototype, \"root\", {\r\n /**\r\n * A reference to the root of this object's bucket.\r\n */\r\n get: function () {\r\n var location = new Location(this._location.bucket, '');\r\n return this._newRef(this._service, location);\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(Reference.prototype, \"bucket\", {\r\n /**\r\n * The name of the bucket containing this reference's object.\r\n */\r\n get: function () {\r\n return this._location.bucket;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(Reference.prototype, \"fullPath\", {\r\n /**\r\n * The full path of this object.\r\n */\r\n get: function () {\r\n return this._location.path;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(Reference.prototype, \"name\", {\r\n /**\r\n * The short name of this object, which is the last component of the full path.\r\n * For example, if fullPath is 'full/path/image.png', name is 'image.png'.\r\n */\r\n get: function () {\r\n return lastComponent(this._location.path);\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(Reference.prototype, \"storage\", {\r\n /**\r\n * The `StorageService` instance this `StorageReference` is associated with.\r\n */\r\n get: function () {\r\n return this._service;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(Reference.prototype, \"parent\", {\r\n /**\r\n * A `StorageReference` pointing to the parent location of this `StorageReference`, or null if\r\n * this reference is the root.\r\n */\r\n get: function () {\r\n var newPath = parent(this._location.path);\r\n if (newPath === null) {\r\n return null;\r\n }\r\n var location = new Location(this._location.bucket, newPath);\r\n return new Reference(this._service, location);\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n /**\r\n * Utility function to throw an error in methods that do not accept a root reference.\r\n */\r\n Reference.prototype._throwIfRoot = function (name) {\r\n if (this._location.path === '') {\r\n throw invalidRootOperation(name);\r\n }\r\n };\r\n return Reference;\r\n}());\r\n/**\r\n * Uploads data to this object's location.\r\n * The upload can be paused and resumed, and exposes progress updates.\r\n * @public\r\n * @param ref - StorageReference where data should be uploaded.\r\n * @param data - The data to upload.\r\n * @param metadata - Metadata for the newly uploaded data.\r\n * @returns An UploadTask\r\n */\r\nfunction uploadBytesResumable$1(ref, data, metadata) {\r\n ref._throwIfRoot('uploadBytesResumable');\r\n return new UploadTask(ref, new FbsBlob(data), metadata);\r\n}\r\n/**\r\n * List all items (files) and prefixes (folders) under this storage reference.\r\n *\r\n * This is a helper method for calling list() repeatedly until there are\r\n * no more results. The default pagination size is 1000.\r\n *\r\n * Note: The results may not be consistent if objects are changed while this\r\n * operation is running.\r\n *\r\n * Warning: listAll may potentially consume too many resources if there are\r\n * too many results.\r\n * @public\r\n * @param ref - StorageReference to get list from.\r\n *\r\n * @returns A Promise that resolves with all the items and prefixes under\r\n * the current storage reference. `prefixes` contains references to\r\n * sub-directories and `items` contains references to objects in this\r\n * folder. `nextPageToken` is never returned.\r\n */\r\nfunction listAll$1(ref) {\r\n var accumulator = {\r\n prefixes: [],\r\n items: []\r\n };\r\n return listAllHelper(ref, accumulator).then(function () { return accumulator; });\r\n}\r\n/**\r\n * Separated from listAll because async functions can't use \"arguments\".\r\n * @param ref\r\n * @param accumulator\r\n * @param pageToken\r\n */\r\nfunction listAllHelper(ref, accumulator, pageToken) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var opt, nextPage;\r\n var _a, _b;\r\n return __generator(this, function (_c) {\r\n switch (_c.label) {\r\n case 0:\r\n opt = {\r\n // maxResults is 1000 by default.\r\n pageToken: pageToken\r\n };\r\n return [4 /*yield*/, list$1(ref, opt)];\r\n case 1:\r\n nextPage = _c.sent();\r\n (_a = accumulator.prefixes).push.apply(_a, nextPage.prefixes);\r\n (_b = accumulator.items).push.apply(_b, nextPage.items);\r\n if (!(nextPage.nextPageToken != null)) return [3 /*break*/, 3];\r\n return [4 /*yield*/, listAllHelper(ref, accumulator, nextPage.nextPageToken)];\r\n case 2:\r\n _c.sent();\r\n _c.label = 3;\r\n case 3: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * List items (files) and prefixes (folders) under this storage reference.\r\n *\r\n * List API is only available for Firebase Rules Version 2.\r\n *\r\n * GCS is a key-blob store. Firebase Storage imposes the semantic of '/'\r\n * delimited folder structure.\r\n * Refer to GCS's List API if you want to learn more.\r\n *\r\n * To adhere to Firebase Rules's Semantics, Firebase Storage does not\r\n * support objects whose paths end with \"/\" or contain two consecutive\r\n * \"/\"s. Firebase Storage List API will filter these unsupported objects.\r\n * list() may fail if there are too many unsupported objects in the bucket.\r\n * @public\r\n *\r\n * @param ref - StorageReference to get list from.\r\n * @param options - See ListOptions for details.\r\n * @returns A Promise that resolves with the items and prefixes.\r\n * `prefixes` contains references to sub-folders and `items`\r\n * contains references to objects in this folder. `nextPageToken`\r\n * can be used to get the rest of the results.\r\n */\r\nfunction list$1(ref, options) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var op, requestInfo;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (options != null) {\r\n if (typeof options.maxResults === 'number') {\r\n validateNumber('options.maxResults', \r\n /* minValue= */ 1, \r\n /* maxValue= */ 1000, options.maxResults);\r\n }\r\n }\r\n op = options || {};\r\n requestInfo = list$2(ref.storage, ref._location, \r\n /*delimiter= */ '/', op.pageToken, op.maxResults);\r\n return [4 /*yield*/, ref.storage.makeRequestWithTokens(requestInfo)];\r\n case 1: return [2 /*return*/, (_a.sent()).getPromise()];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * A `Promise` that resolves with the metadata for this object. If this\r\n * object doesn't exist or metadata cannot be retreived, the promise is\r\n * rejected.\r\n * @public\r\n * @param ref - StorageReference to get metadata from.\r\n */\r\nfunction getMetadata$1(ref) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var requestInfo;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n ref._throwIfRoot('getMetadata');\r\n requestInfo = getMetadata$2(ref.storage, ref._location, getMappings());\r\n return [4 /*yield*/, ref.storage.makeRequestWithTokens(requestInfo)];\r\n case 1: return [2 /*return*/, (_a.sent()).getPromise()];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * Updates the metadata for this object.\r\n * @public\r\n * @param ref - StorageReference to update metadata for.\r\n * @param metadata - The new metadata for the object.\r\n * Only values that have been explicitly set will be changed. Explicitly\r\n * setting a value to null will remove the metadata.\r\n * @returns A `Promise` that resolves\r\n * with the new metadata for this object.\r\n * See `firebaseStorage.Reference.prototype.getMetadata`\r\n */\r\nfunction updateMetadata$1(ref, metadata) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var requestInfo;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n ref._throwIfRoot('updateMetadata');\r\n requestInfo = updateMetadata$2(ref.storage, ref._location, metadata, getMappings());\r\n return [4 /*yield*/, ref.storage.makeRequestWithTokens(requestInfo)];\r\n case 1: return [2 /*return*/, (_a.sent()).getPromise()];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * Returns the download URL for the given Reference.\r\n * @public\r\n * @returns A `Promise` that resolves with the download\r\n * URL for this object.\r\n */\r\nfunction getDownloadURL$1(ref) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var requestInfo;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n ref._throwIfRoot('getDownloadURL');\r\n requestInfo = getDownloadUrl(ref.storage, ref._location, getMappings());\r\n return [4 /*yield*/, ref.storage.makeRequestWithTokens(requestInfo)];\r\n case 1: return [2 /*return*/, (_a.sent())\r\n .getPromise()\r\n .then(function (url) {\r\n if (url === null) {\r\n throw noDownloadURL();\r\n }\r\n return url;\r\n })];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * Deletes the object at this location.\r\n * @public\r\n * @param ref - StorageReference for object to delete.\r\n * @returns A `Promise` that resolves if the deletion succeeds.\r\n */\r\nfunction deleteObject$1(ref) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var requestInfo;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n ref._throwIfRoot('deleteObject');\r\n requestInfo = deleteObject$2(ref.storage, ref._location);\r\n return [4 /*yield*/, ref.storage.makeRequestWithTokens(requestInfo)];\r\n case 1: return [2 /*return*/, (_a.sent()).getPromise()];\r\n }\r\n });\r\n });\r\n}\r\n/**\r\n * Returns reference for object obtained by appending `childPath` to `ref`.\r\n *\r\n * @param ref - StorageReference to get child of.\r\n * @param childPath - Child path from provided ref.\r\n * @returns A reference to the object obtained by\r\n * appending childPath, removing any duplicate, beginning, or trailing\r\n * slashes.\r\n *\r\n */\r\nfunction _getChild$1(ref, childPath) {\r\n var newPath = child(ref._location.path, childPath);\r\n var location = new Location(ref._location.bucket, newPath);\r\n return new Reference(ref.storage, location);\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\nfunction isUrl(path) {\r\n return /^[A-Za-z]+:\\/\\//.test(path);\r\n}\r\n/**\r\n * Returns a firebaseStorage.Reference for the given url.\r\n */\r\nfunction refFromURL(service, url) {\r\n return new Reference(service, url);\r\n}\r\n/**\r\n * Returns a firebaseStorage.Reference for the given path in the default\r\n * bucket.\r\n */\r\nfunction refFromPath(ref, path) {\r\n if (ref instanceof FirebaseStorageImpl) {\r\n var service = ref;\r\n if (service._bucket == null) {\r\n throw noDefaultBucket();\r\n }\r\n var reference = new Reference(service, service._bucket);\r\n if (path != null) {\r\n return refFromPath(reference, path);\r\n }\r\n else {\r\n return reference;\r\n }\r\n }\r\n else {\r\n // ref is a Reference\r\n if (path !== undefined) {\r\n return _getChild$1(ref, path);\r\n }\r\n else {\r\n return ref;\r\n }\r\n }\r\n}\r\nfunction ref$1(serviceOrRef, pathOrUrl) {\r\n if (pathOrUrl && isUrl(pathOrUrl)) {\r\n if (serviceOrRef instanceof FirebaseStorageImpl) {\r\n return refFromURL(serviceOrRef, pathOrUrl);\r\n }\r\n else {\r\n throw invalidArgument('To use ref(service, url), the first argument must be a Storage instance.');\r\n }\r\n }\r\n else {\r\n return refFromPath(serviceOrRef, pathOrUrl);\r\n }\r\n}\r\nfunction extractBucket(host, config) {\r\n var bucketString = config === null || config === void 0 ? void 0 : config[CONFIG_STORAGE_BUCKET_KEY];\r\n if (bucketString == null) {\r\n return null;\r\n }\r\n return Location.makeFromBucketSpec(bucketString, host);\r\n}\r\nfunction connectStorageEmulator$1(storage, host, port, options) {\r\n if (options === void 0) { options = {}; }\r\n storage.host = \"http://\" + host + \":\" + port;\r\n var mockUserToken = options.mockUserToken;\r\n if (mockUserToken) {\r\n storage._overrideAuthToken =\r\n typeof mockUserToken === 'string'\r\n ? mockUserToken\r\n : createMockUserToken(mockUserToken, storage.app.options.projectId);\r\n }\r\n}\r\n/**\r\n * A service that provides Firebase Storage Reference instances.\r\n * @public\r\n * @param opt_url - gs:// url to a custom Storage Bucket\r\n */\r\nvar FirebaseStorageImpl = /** @class */ (function () {\r\n function FirebaseStorageImpl(\r\n /**\r\n * FirebaseApp associated with this StorageService instance.\r\n */\r\n app, _authProvider, \r\n /**\r\n * @internal\r\n */\r\n _appCheckProvider, \r\n /**\r\n * @internal\r\n */\r\n _pool, _url, _firebaseVersion) {\r\n this.app = app;\r\n this._authProvider = _authProvider;\r\n this._appCheckProvider = _appCheckProvider;\r\n this._pool = _pool;\r\n this._url = _url;\r\n this._firebaseVersion = _firebaseVersion;\r\n this._bucket = null;\r\n /**\r\n * This string can be in the formats:\r\n * - host\r\n * - host:port\r\n * - protocol://host:port\r\n */\r\n this._host = DEFAULT_HOST;\r\n this._appId = null;\r\n this._deleted = false;\r\n this._maxOperationRetryTime = DEFAULT_MAX_OPERATION_RETRY_TIME;\r\n this._maxUploadRetryTime = DEFAULT_MAX_UPLOAD_RETRY_TIME;\r\n this._requests = new Set();\r\n if (_url != null) {\r\n this._bucket = Location.makeFromBucketSpec(_url, this._host);\r\n }\r\n else {\r\n this._bucket = extractBucket(this._host, this.app.options);\r\n }\r\n }\r\n Object.defineProperty(FirebaseStorageImpl.prototype, \"host\", {\r\n get: function () {\r\n return this._host;\r\n },\r\n /**\r\n * Set host string for this service.\r\n * @param host - host string in the form of host, host:port,\r\n * or protocol://host:port\r\n */\r\n set: function (host) {\r\n this._host = host;\r\n if (this._url != null) {\r\n this._bucket = Location.makeFromBucketSpec(this._url, host);\r\n }\r\n else {\r\n this._bucket = extractBucket(host, this.app.options);\r\n }\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(FirebaseStorageImpl.prototype, \"maxUploadRetryTime\", {\r\n /**\r\n * The maximum time to retry uploads in milliseconds.\r\n */\r\n get: function () {\r\n return this._maxUploadRetryTime;\r\n },\r\n set: function (time) {\r\n validateNumber('time', \r\n /* minValue=*/ 0, \r\n /* maxValue= */ Number.POSITIVE_INFINITY, time);\r\n this._maxUploadRetryTime = time;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(FirebaseStorageImpl.prototype, \"maxOperationRetryTime\", {\r\n /**\r\n * The maximum time to retry operations other than uploads or downloads in\r\n * milliseconds.\r\n */\r\n get: function () {\r\n return this._maxOperationRetryTime;\r\n },\r\n set: function (time) {\r\n validateNumber('time', \r\n /* minValue=*/ 0, \r\n /* maxValue= */ Number.POSITIVE_INFINITY, time);\r\n this._maxOperationRetryTime = time;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n FirebaseStorageImpl.prototype._getAuthToken = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var auth, tokenData;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (this._overrideAuthToken) {\r\n return [2 /*return*/, this._overrideAuthToken];\r\n }\r\n auth = this._authProvider.getImmediate({ optional: true });\r\n if (!auth) return [3 /*break*/, 2];\r\n return [4 /*yield*/, auth.getToken()];\r\n case 1:\r\n tokenData = _a.sent();\r\n if (tokenData !== null) {\r\n return [2 /*return*/, tokenData.accessToken];\r\n }\r\n _a.label = 2;\r\n case 2: return [2 /*return*/, null];\r\n }\r\n });\r\n });\r\n };\r\n FirebaseStorageImpl.prototype._getAppCheckToken = function () {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var appCheck, result;\r\n return __generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n appCheck = this._appCheckProvider.getImmediate({ optional: true });\r\n if (!appCheck) return [3 /*break*/, 2];\r\n return [4 /*yield*/, appCheck.getToken()];\r\n case 1:\r\n result = _a.sent();\r\n // TODO: What do we want to do if there is an error getting the token?\r\n // Context: appCheck.getToken() will never throw even if an error happened. In the error case, a dummy token will be\r\n // returned along with an error field describing the error. In general, we shouldn't care about the error condition and just use\r\n // the token (actual or dummy) to send requests.\r\n return [2 /*return*/, result.token];\r\n case 2: return [2 /*return*/, null];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * Stop running requests and prevent more from being created.\r\n */\r\n FirebaseStorageImpl.prototype._delete = function () {\r\n if (!this._deleted) {\r\n this._deleted = true;\r\n this._requests.forEach(function (request) { return request.cancel(); });\r\n this._requests.clear();\r\n }\r\n return Promise.resolve();\r\n };\r\n /**\r\n * Returns a new firebaseStorage.Reference object referencing this StorageService\r\n * at the given Location.\r\n */\r\n FirebaseStorageImpl.prototype._makeStorageReference = function (loc) {\r\n return new Reference(this, loc);\r\n };\r\n /**\r\n * @param requestInfo - HTTP RequestInfo object\r\n * @param authToken - Firebase auth token\r\n */\r\n FirebaseStorageImpl.prototype._makeRequest = function (requestInfo, authToken, appCheckToken) {\r\n var _this = this;\r\n if (!this._deleted) {\r\n var request_1 = makeRequest(requestInfo, this._appId, authToken, appCheckToken, this._pool, this._firebaseVersion);\r\n this._requests.add(request_1);\r\n // Request removes itself from set when complete.\r\n request_1.getPromise().then(function () { return _this._requests.delete(request_1); }, function () { return _this._requests.delete(request_1); });\r\n return request_1;\r\n }\r\n else {\r\n return new FailRequest(appDeleted());\r\n }\r\n };\r\n FirebaseStorageImpl.prototype.makeRequestWithTokens = function (requestInfo) {\r\n return __awaiter(this, void 0, void 0, function () {\r\n var _a, authToken, appCheckToken;\r\n return __generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0: return [4 /*yield*/, Promise.all([\r\n this._getAuthToken(),\r\n this._getAppCheckToken()\r\n ])];\r\n case 1:\r\n _a = _b.sent(), authToken = _a[0], appCheckToken = _a[1];\r\n return [2 /*return*/, this._makeRequest(requestInfo, authToken, appCheckToken)];\r\n }\r\n });\r\n });\r\n };\r\n return FirebaseStorageImpl;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Uploads data to this object's location.\r\n * The upload can be paused and resumed, and exposes progress updates.\r\n * @public\r\n * @param ref - StorageReference where data should be uploaded.\r\n * @param data - The data to upload.\r\n * @param metadata - Metadata for the data to upload.\r\n * @returns An UploadTask\r\n */\r\nfunction uploadBytesResumable(ref, data, metadata) {\r\n ref = getModularInstance(ref);\r\n return uploadBytesResumable$1(ref, data, metadata);\r\n}\r\n/**\r\n * A `Promise` that resolves with the metadata for this object. If this\r\n * object doesn't exist or metadata cannot be retreived, the promise is\r\n * rejected.\r\n * @public\r\n * @param ref - {@link StorageReference} to get metadata from.\r\n */\r\nfunction getMetadata(ref) {\r\n ref = getModularInstance(ref);\r\n return getMetadata$1(ref);\r\n}\r\n/**\r\n * Updates the metadata for this object.\r\n * @public\r\n * @param ref - {@link StorageReference} to update metadata for.\r\n * @param metadata - The new metadata for the object.\r\n * Only values that have been explicitly set will be changed. Explicitly\r\n * setting a value to null will remove the metadata.\r\n * @returns A `Promise` that resolves with the new metadata for this object.\r\n */\r\nfunction updateMetadata(ref, metadata) {\r\n ref = getModularInstance(ref);\r\n return updateMetadata$1(ref, metadata);\r\n}\r\n/**\r\n * List items (files) and prefixes (folders) under this storage reference.\r\n *\r\n * List API is only available for Firebase Rules Version 2.\r\n *\r\n * GCS is a key-blob store. Firebase Storage imposes the semantic of '/'\r\n * delimited folder structure.\r\n * Refer to GCS's List API if you want to learn more.\r\n *\r\n * To adhere to Firebase Rules's Semantics, Firebase Storage does not\r\n * support objects whose paths end with \"/\" or contain two consecutive\r\n * \"/\"s. Firebase Storage List API will filter these unsupported objects.\r\n * list() may fail if there are too many unsupported objects in the bucket.\r\n * @public\r\n *\r\n * @param ref - {@link StorageReference} to get list from.\r\n * @param options - See {@link ListOptions} for details.\r\n * @returns A `Promise` that resolves with the items and prefixes.\r\n * `prefixes` contains references to sub-folders and `items`\r\n * contains references to objects in this folder. `nextPageToken`\r\n * can be used to get the rest of the results.\r\n */\r\nfunction list(ref, options) {\r\n ref = getModularInstance(ref);\r\n return list$1(ref, options);\r\n}\r\n/**\r\n * List all items (files) and prefixes (folders) under this storage reference.\r\n *\r\n * This is a helper method for calling list() repeatedly until there are\r\n * no more results. The default pagination size is 1000.\r\n *\r\n * Note: The results may not be consistent if objects are changed while this\r\n * operation is running.\r\n *\r\n * Warning: `listAll` may potentially consume too many resources if there are\r\n * too many results.\r\n * @public\r\n * @param ref - {@link StorageReference} to get list from.\r\n *\r\n * @returns A `Promise` that resolves with all the items and prefixes under\r\n * the current storage reference. `prefixes` contains references to\r\n * sub-directories and `items` contains references to objects in this\r\n * folder. `nextPageToken` is never returned.\r\n */\r\nfunction listAll(ref) {\r\n ref = getModularInstance(ref);\r\n return listAll$1(ref);\r\n}\r\n/**\r\n * Returns the download URL for the given {@link StorageReference}.\r\n * @public\r\n * @param ref - {@link StorageReference} to get the download URL for.\r\n * @returns A `Promise` that resolves with the download\r\n * URL for this object.\r\n */\r\nfunction getDownloadURL(ref) {\r\n ref = getModularInstance(ref);\r\n return getDownloadURL$1(ref);\r\n}\r\n/**\r\n * Deletes the object at this location.\r\n * @public\r\n * @param ref - {@link StorageReference} for object to delete.\r\n * @returns A `Promise` that resolves if the deletion succeeds.\r\n */\r\nfunction deleteObject(ref) {\r\n ref = getModularInstance(ref);\r\n return deleteObject$1(ref);\r\n}\r\nfunction ref(serviceOrRef, pathOrUrl) {\r\n serviceOrRef = getModularInstance(serviceOrRef);\r\n return ref$1(serviceOrRef, pathOrUrl);\r\n}\r\n/**\r\n * @internal\r\n */\r\nfunction _getChild(ref, childPath) {\r\n return _getChild$1(ref, childPath);\r\n}\r\n/**\r\n * Modify this {@link FirebaseStorage} instance to communicate with the Cloud Storage emulator.\r\n *\r\n * @param storage - The {@link FirebaseStorage} instance\r\n * @param host - The emulator host (ex: localhost)\r\n * @param port - The emulator port (ex: 5001)\r\n * @param options.mockUserToken - the mock auth token to use for unit testing Security Rules.\r\n * @public\r\n */\r\nfunction connectStorageEmulator(storage, host, port, options) {\r\n if (options === void 0) { options = {}; }\r\n connectStorageEmulator$1(storage, host, port, options);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar UploadTaskSnapshotCompat = /** @class */ (function () {\r\n function UploadTaskSnapshotCompat(_delegate, task, ref) {\r\n this._delegate = _delegate;\r\n this.task = task;\r\n this.ref = ref;\r\n }\r\n Object.defineProperty(UploadTaskSnapshotCompat.prototype, \"bytesTransferred\", {\r\n get: function () {\r\n return this._delegate.bytesTransferred;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(UploadTaskSnapshotCompat.prototype, \"metadata\", {\r\n get: function () {\r\n return this._delegate.metadata;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(UploadTaskSnapshotCompat.prototype, \"state\", {\r\n get: function () {\r\n return this._delegate.state;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(UploadTaskSnapshotCompat.prototype, \"totalBytes\", {\r\n get: function () {\r\n return this._delegate.totalBytes;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n return UploadTaskSnapshotCompat;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar UploadTaskCompat = /** @class */ (function () {\r\n function UploadTaskCompat(_delegate, _ref) {\r\n this._delegate = _delegate;\r\n this._ref = _ref;\r\n this.cancel = this._delegate.cancel.bind(this._delegate);\r\n this.catch = this._delegate.catch.bind(this._delegate);\r\n this.pause = this._delegate.pause.bind(this._delegate);\r\n this.resume = this._delegate.resume.bind(this._delegate);\r\n }\r\n Object.defineProperty(UploadTaskCompat.prototype, \"snapshot\", {\r\n get: function () {\r\n return new UploadTaskSnapshotCompat(this._delegate.snapshot, this, this._ref);\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n UploadTaskCompat.prototype.then = function (onFulfilled, onRejected) {\r\n var _this = this;\r\n return this._delegate.then(function (snapshot) {\r\n if (onFulfilled) {\r\n return onFulfilled(new UploadTaskSnapshotCompat(snapshot, _this, _this._ref));\r\n }\r\n }, onRejected);\r\n };\r\n UploadTaskCompat.prototype.on = function (type, nextOrObserver, error, completed) {\r\n var _this = this;\r\n var wrappedNextOrObserver = undefined;\r\n if (!!nextOrObserver) {\r\n if (typeof nextOrObserver === 'function') {\r\n wrappedNextOrObserver = function (taskSnapshot) {\r\n return nextOrObserver(new UploadTaskSnapshotCompat(taskSnapshot, _this, _this._ref));\r\n };\r\n }\r\n else {\r\n wrappedNextOrObserver = {\r\n next: !!nextOrObserver.next\r\n ? function (taskSnapshot) {\r\n return nextOrObserver.next(new UploadTaskSnapshotCompat(taskSnapshot, _this, _this._ref));\r\n }\r\n : undefined,\r\n complete: nextOrObserver.complete || undefined,\r\n error: nextOrObserver.error || undefined\r\n };\r\n }\r\n }\r\n return this._delegate.on(type, wrappedNextOrObserver, error || undefined, completed || undefined);\r\n };\r\n return UploadTaskCompat;\r\n}());\n\nvar ListResultCompat = /** @class */ (function () {\r\n function ListResultCompat(_delegate, _service) {\r\n this._delegate = _delegate;\r\n this._service = _service;\r\n }\r\n Object.defineProperty(ListResultCompat.prototype, \"prefixes\", {\r\n get: function () {\r\n var _this = this;\r\n return this._delegate.prefixes.map(function (ref) { return new ReferenceCompat(ref, _this._service); });\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(ListResultCompat.prototype, \"items\", {\r\n get: function () {\r\n var _this = this;\r\n return this._delegate.items.map(function (ref) { return new ReferenceCompat(ref, _this._service); });\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(ListResultCompat.prototype, \"nextPageToken\", {\r\n get: function () {\r\n return this._delegate.nextPageToken || null;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n return ListResultCompat;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar ReferenceCompat = /** @class */ (function () {\r\n function ReferenceCompat(_delegate, storage) {\r\n this._delegate = _delegate;\r\n this.storage = storage;\r\n }\r\n Object.defineProperty(ReferenceCompat.prototype, \"name\", {\r\n get: function () {\r\n return this._delegate.name;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReferenceCompat.prototype, \"bucket\", {\r\n get: function () {\r\n return this._delegate.bucket;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReferenceCompat.prototype, \"fullPath\", {\r\n get: function () {\r\n return this._delegate.fullPath;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n ReferenceCompat.prototype.toString = function () {\r\n return this._delegate.toString();\r\n };\r\n /**\r\n * @returns A reference to the object obtained by\r\n * appending childPath, removing any duplicate, beginning, or trailing\r\n * slashes.\r\n */\r\n ReferenceCompat.prototype.child = function (childPath) {\r\n var reference = _getChild(this._delegate, childPath);\r\n return new ReferenceCompat(reference, this.storage);\r\n };\r\n Object.defineProperty(ReferenceCompat.prototype, \"root\", {\r\n get: function () {\r\n return new ReferenceCompat(this._delegate.root, this.storage);\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(ReferenceCompat.prototype, \"parent\", {\r\n /**\r\n * @returns A reference to the parent of the\r\n * current object, or null if the current object is the root.\r\n */\r\n get: function () {\r\n var reference = this._delegate.parent;\r\n if (reference == null) {\r\n return null;\r\n }\r\n return new ReferenceCompat(reference, this.storage);\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n /**\r\n * Uploads a blob to this object's location.\r\n * @param data - The blob to upload.\r\n * @returns An UploadTask that lets you control and\r\n * observe the upload.\r\n */\r\n ReferenceCompat.prototype.put = function (data, metadata) {\r\n this._throwIfRoot('put');\r\n return new UploadTaskCompat(uploadBytesResumable(this._delegate, data, metadata), this);\r\n };\r\n /**\r\n * Uploads a string to this object's location.\r\n * @param value - The string to upload.\r\n * @param format - The format of the string to upload.\r\n * @returns An UploadTask that lets you control and\r\n * observe the upload.\r\n */\r\n ReferenceCompat.prototype.putString = function (value, format, metadata) {\r\n if (format === void 0) { format = StringFormat.RAW; }\r\n this._throwIfRoot('putString');\r\n var data = dataFromString(format, value);\r\n var metadataClone = __assign({}, metadata);\r\n if (metadataClone['contentType'] == null && data.contentType != null) {\r\n metadataClone['contentType'] = data.contentType;\r\n }\r\n return new UploadTaskCompat(new UploadTask(this._delegate, new FbsBlob(data.data, true), metadataClone), this);\r\n };\r\n /**\r\n * List all items (files) and prefixes (folders) under this storage reference.\r\n *\r\n * This is a helper method for calling list() repeatedly until there are\r\n * no more results. The default pagination size is 1000.\r\n *\r\n * Note: The results may not be consistent if objects are changed while this\r\n * operation is running.\r\n *\r\n * Warning: listAll may potentially consume too many resources if there are\r\n * too many results.\r\n *\r\n * @returns A Promise that resolves with all the items and prefixes under\r\n * the current storage reference. `prefixes` contains references to\r\n * sub-directories and `items` contains references to objects in this\r\n * folder. `nextPageToken` is never returned.\r\n */\r\n ReferenceCompat.prototype.listAll = function () {\r\n var _this = this;\r\n return listAll(this._delegate).then(function (r) { return new ListResultCompat(r, _this.storage); });\r\n };\r\n /**\r\n * List items (files) and prefixes (folders) under this storage reference.\r\n *\r\n * List API is only available for Firebase Rules Version 2.\r\n *\r\n * GCS is a key-blob store. Firebase Storage imposes the semantic of '/'\r\n * delimited folder structure. Refer to GCS's List API if you want to learn more.\r\n *\r\n * To adhere to Firebase Rules's Semantics, Firebase Storage does not\r\n * support objects whose paths end with \"/\" or contain two consecutive\r\n * \"/\"s. Firebase Storage List API will filter these unsupported objects.\r\n * list() may fail if there are too many unsupported objects in the bucket.\r\n *\r\n * @param options - See ListOptions for details.\r\n * @returns A Promise that resolves with the items and prefixes.\r\n * `prefixes` contains references to sub-folders and `items`\r\n * contains references to objects in this folder. `nextPageToken`\r\n * can be used to get the rest of the results.\r\n */\r\n ReferenceCompat.prototype.list = function (options) {\r\n var _this = this;\r\n return list(this._delegate, options || undefined).then(function (r) { return new ListResultCompat(r, _this.storage); });\r\n };\r\n /**\r\n * A `Promise` that resolves with the metadata for this object. If this\r\n * object doesn't exist or metadata cannot be retreived, the promise is\r\n * rejected.\r\n */\r\n ReferenceCompat.prototype.getMetadata = function () {\r\n return getMetadata(this._delegate);\r\n };\r\n /**\r\n * Updates the metadata for this object.\r\n * @param metadata - The new metadata for the object.\r\n * Only values that have been explicitly set will be changed. Explicitly\r\n * setting a value to null will remove the metadata.\r\n * @returns A `Promise` that resolves\r\n * with the new metadata for this object.\r\n * @see firebaseStorage.Reference.prototype.getMetadata\r\n */\r\n ReferenceCompat.prototype.updateMetadata = function (metadata) {\r\n return updateMetadata(this._delegate, metadata);\r\n };\r\n /**\r\n * @returns A `Promise` that resolves with the download\r\n * URL for this object.\r\n */\r\n ReferenceCompat.prototype.getDownloadURL = function () {\r\n return getDownloadURL(this._delegate);\r\n };\r\n /**\r\n * Deletes the object at this location.\r\n * @returns A `Promise` that resolves if the deletion succeeds.\r\n */\r\n ReferenceCompat.prototype.delete = function () {\r\n this._throwIfRoot('delete');\r\n return deleteObject(this._delegate);\r\n };\r\n ReferenceCompat.prototype._throwIfRoot = function (name) {\r\n if (this._delegate._location.path === '') {\r\n throw invalidRootOperation(name);\r\n }\r\n };\r\n return ReferenceCompat;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A service that provides firebaseStorage.Reference instances.\r\n * @param opt_url gs:// url to a custom Storage Bucket\r\n */\r\nvar StorageServiceCompat = /** @class */ (function () {\r\n function StorageServiceCompat(app, _delegate) {\r\n this.app = app;\r\n this._delegate = _delegate;\r\n }\r\n Object.defineProperty(StorageServiceCompat.prototype, \"maxOperationRetryTime\", {\r\n get: function () {\r\n return this._delegate.maxOperationRetryTime;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n Object.defineProperty(StorageServiceCompat.prototype, \"maxUploadRetryTime\", {\r\n get: function () {\r\n return this._delegate.maxUploadRetryTime;\r\n },\r\n enumerable: false,\r\n configurable: true\r\n });\r\n /**\r\n * Returns a firebaseStorage.Reference for the given path in the default\r\n * bucket.\r\n */\r\n StorageServiceCompat.prototype.ref = function (path) {\r\n if (isUrl(path)) {\r\n throw invalidArgument('ref() expected a child path but got a URL, use refFromURL instead.');\r\n }\r\n return new ReferenceCompat(ref(this._delegate, path), this);\r\n };\r\n /**\r\n * Returns a firebaseStorage.Reference object for the given absolute URL,\r\n * which must be a gs:// or http[s]:// URL.\r\n */\r\n StorageServiceCompat.prototype.refFromURL = function (url) {\r\n if (!isUrl(url)) {\r\n throw invalidArgument('refFromURL() expected a full URL but got a child path, use ref() instead.');\r\n }\r\n try {\r\n Location.makeFromUrl(url, this._delegate.host);\r\n }\r\n catch (e) {\r\n throw invalidArgument('refFromUrl() expected a valid full URL but got an invalid one.');\r\n }\r\n return new ReferenceCompat(ref(this._delegate, url), this);\r\n };\r\n StorageServiceCompat.prototype.setMaxUploadRetryTime = function (time) {\r\n this._delegate.maxUploadRetryTime = time;\r\n };\r\n StorageServiceCompat.prototype.setMaxOperationRetryTime = function (time) {\r\n this._delegate.maxOperationRetryTime = time;\r\n };\r\n StorageServiceCompat.prototype.useEmulator = function (host, port, options) {\r\n if (options === void 0) { options = {}; }\r\n connectStorageEmulator(this._delegate, host, port, options);\r\n };\r\n return StorageServiceCompat;\r\n}());\n\nvar name = \"@firebase/storage\";\nvar version = \"0.7.1\";\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Type constant for Firebase Storage.\r\n */\r\nvar STORAGE_TYPE = 'storage';\r\nfunction factory(container, _a) {\r\n var url = _a.instanceIdentifier;\r\n // Dependencies\r\n // TODO: This should eventually be 'app-compat'\r\n var app = container.getProvider('app').getImmediate();\r\n var authProvider = container.getProvider('auth-internal');\r\n var appCheckProvider = container.getProvider('app-check-internal');\r\n // TODO: get StorageService instance from component framework instead\r\n // of creating a new one.\r\n var storageServiceCompat = new StorageServiceCompat(app, new FirebaseStorageImpl(app, authProvider, appCheckProvider, new ConnectionPool(), url, firebase.SDK_VERSION));\r\n return storageServiceCompat;\r\n}\r\nfunction registerStorage(instance) {\r\n var namespaceExports = {\r\n // no-inline\r\n TaskState: TaskState,\r\n TaskEvent: TaskEvent,\r\n StringFormat: StringFormat,\r\n Storage: FirebaseStorageImpl,\r\n Reference: ReferenceCompat\r\n };\r\n instance.INTERNAL.registerComponent(new Component(STORAGE_TYPE, factory, \"PUBLIC\" /* PUBLIC */)\r\n .setServiceProps(namespaceExports)\r\n .setMultipleInstances(true));\r\n instance.registerVersion(name, version);\r\n}\r\nregisterStorage(firebase);\n\nexport { registerStorage };\n//# sourceMappingURL=index.browser.esm.js.map\n"],"sourceRoot":""}