{"version":3,"sources":["webpack:///./node_modules/@firebase/util/dist/index.cjs.js","webpack:///./node_modules/@firebase/storage/dist/index.esm.js"],"names":["Object","defineProperty","exports","value","tslib","CONSTANTS","NODE_CLIENT","NODE_ADMIN","SDK_VERSION","assert","assertion","message","assertionError","Error","stringToByteArray","str","out","p","i","length","c","charCodeAt","base64","byteToCharMap_","charToByteMap_","byteToCharMapWebSafe_","charToByteMapWebSafe_","ENCODED_VALS_BASE","this","HAS_NATIVE_SUPPORT","atob","encodeByteArray","input","webSafe","Array","isArray","init_","byteToCharMap","output","byte1","haveByte2","byte2","haveByte3","byte3","outByte1","outByte2","outByte3","outByte4","push","join","encodeString","btoa","decodeString","bytes","pos","c1","String","fromCharCode","c2","u","c3","byteArrayToString","decodeStringToByteArray","charToByteMap","charAt","byte4","ENCODED_VALS","ENCODED_VALS_WEBSAFE","base64Decode","e","console","error","deepExtend","target","source","constructor","Date","getTime","undefined","prop","hasOwnProperty","Deferred","_this","reject","resolve","promise","Promise","prototype","wrapCallback","callback","catch","getUA","navigator","ERROR_NAME","FirebaseError","_super","code","call","name","setPrototypeOf","captureStackTrace","ErrorFactory","create","__extends","service","serviceName","errors","data","_i","arguments","customData","fullCode","template","replaceTemplate","fullMessage","_a","_b","keys","key","slice","warn","replace","PATTERN","_","toString","jsonEval","JSON","parse","decode","token","header","claims","signature","parts","split","Sha1","chain_","buf_","W_","pad_","inbuf_","total_","blockSize","reset","compress_","buf","offset","W","t","f","k","a","b","d","update","lengthMinusBlock","n","inbuf","digest","totalBits","j","ObserverProxy","executor","onNoObservers","observers","unsubscribes","observerCount","task","finalized","then","next","forEachObserver","observer","close","complete","subscribe","nextOrObserver","obj","methods","methods_1","method","implementsAnyMethods","noop","unsub","unsubscribeOne","bind","finalError","fn","sendOne","err","errorPrefix","fnName","argumentNumber","optional","argName","async","onError","args","apply","base64Encode","utf8Bytes","contains","createSubscribe","proxy","deepCopy","isAdmin","isBrowser","self","isBrowserExtension","runtime","chrome","browser","id","isElectron","indexOf","isEmpty","isIE","ua","isMobileCordova","window","test","isNode","global","process","isNodeSdk","isReactNative","isUWP","isValidFormat","isValidTimestamp","now","Math","floor","validSince","validUntil","issuedAtTime","map","contextObj","res","querystring","querystringParams","params","_loop_1","forEach","arrayVal","encodeURIComponent","entries","querystringDecode","safeGet","stringLength","high","stringify","validateArgCount","minCount","maxCount","argCount","argError","validateCallback","validateContextObject","context","validateNamespace","namespace","DEFAULT_HOST","CONFIG_STORAGE_BUCKET_KEY","DEFAULT_MAX_OPERATION_RETRY_TIME","DEFAULT_MAX_UPLOAD_RETRY_TIME","MIN_SAFE_INTEGER","FirebaseStorageError","code_","prependCode","message_","serverResponse_","name_","codeProp","codeEquals","serverResponseProp","setServerResponseProp","serverResponse","get","enumerable","configurable","Code","UNKNOWN","OBJECT_NOT_FOUND","BUCKET_NOT_FOUND","PROJECT_NOT_FOUND","QUOTA_EXCEEDED","UNAUTHENTICATED","UNAUTHORIZED","RETRY_LIMIT_EXCEEDED","INVALID_CHECKSUM","CANCELED","INVALID_EVENT_NAME","INVALID_URL","INVALID_DEFAULT_BUCKET","NO_DEFAULT_BUCKET","CANNOT_SLICE_BLOB","SERVER_FILE_WRONG_SIZE","NO_DOWNLOAD_URL","INVALID_ARGUMENT","INVALID_ARGUMENT_COUNT","APP_DELETED","INVALID_ROOT_OPERATION","INVALID_FORMAT","INTERNAL_ERROR","unknown","canceled","cannotSliceBlob","noDownloadURL","invalidArgument","index","appDeleted","invalidFormat","format","internalError","StringFormat","RAW","BASE64","BASE64URL","DATA_URL","formatValidator","stringFormat","StringData","contentType","dataFromString","stringData","utf8Bytes_","base64Bytes_","DataURLParts","rest","decoded","decodeURIComponent","percentEncodedBytes_","dataUrl","dataURLContentType_","Uint8Array","hasMinus","hasUnder","hasPlus","hasSlash","array","dataURL","matches","match","middle","s","end","substring","ErrorCode","TaskEvent","STATE_CHANGED","InternalTaskState","RUNNING","PAUSING","PAUSED","SUCCESS","CANCELING","ERROR","TaskState","taskStateFromInternalTaskState","state","isDef","isJustDef","isFunction","isObject","isNonNullObject","isString","isInteger","isNumber","Number","isNativeBlob","isNativeBlobDefined","Blob","NetworkXhrIo","sent_","xhr_","XMLHttpRequest","errorCode_","NO_ERROR","sendPromise_","addEventListener","ABORT","NETWORK_ERROR","send","url","body","headers","open","setRequestHeader","getErrorCode","getStatus","status","getResponseText","responseText","abort","getResponseHeader","addUploadProgressListener","listener","upload","removeUploadProgressListener","removeEventListener","XhrIoPool","createXhrIo","getBlobBuilder","BlobBuilder","WebKitBlobBuilder","getBlob","bb","append","FbsBlob","elideCopy","size","blobType","data_","type","ArrayBuffer","byteLength","set","size_","type_","startByte","endByte","sliced","blob","start","webkitSlice","mozSlice","sliceBlob","buffer","blobby","val","uint8Arrays","finalLength_1","merged_1","index_1","uploadData","Location","bucket","path","path_","fullServerUrl","encode","bucketOnlyServerUrl","makeFromBucketSpec","bucketString","bucketLocation","makeFromUrl","location","gsRegex","RegExp","hostRegex","groups","regex","indices","postModify","loc","group","captures","exec","bucketValue","pathValue","invalidUrl","jsonObjectOrNull","child","childPath","canonicalChildPath","filter","component","lastComponent","lastIndexOf","makeUrl","urlPart","makeQueryString","queryPart","noXform_","metadata","Mapping","server","local","writable","xform","mappings_","getMappings","mappings","nameMapping","_metadata","fullPath","xformPath","sizeMapping","fromResource","authWrapper","resource","len","mapping","makeStorageReference","addRef","fromResourceString","resourceString","toResourceString","metadataValidator","MAX_RESULTS_KEY","MAX_MAX_RESULTS","PAGE_TOKEN_KEY","PREFIXES_KEY","ITEMS_KEY","fromBackendResponse","listResult","prefixes","items","nextPageToken","pathWithoutTrailingSlash","reference","_c","item","listOptionsValidator","RequestInfo","handler","timeout","urlParams","errorHandler","progressCallback","successCodes","additionalRetryCodes","handlerCheck","cndn","metadataHandler","xhr","text","listHandler","fromResponseString","downloadUrlHandler","tokens","alt","downloadUrlFromResourceString","sharedErrorHandler","newErr","objectErrorHandler","shared","getMetadata","maxOperationRetryTime","requestInfo","list","delimiter","pageToken","maxResults","isRoot","getDownloadUrl","updateMetadata","deleteObject","_xhr","_text","metadataForUpload_","metadataClone","assign","determineContentType_","ResumableUploadStatus","current","total","checkResumeHeader_","allowed","continueResumableUpload","chunkSize","status_","bytesLeft","bytesToUpload","min","maxUploadRetryTime","uploadStatus","newCurrent","Observer","UploadTaskSnapshot","bytesTransferred","totalBytes","ref","validate","specs","passed","minArgs","maxArgs","argMin","argMax","real","countPart","plural","validator","ArgSpec","stringSpec","stringValidator","chainedValidator","v1","v2","uploadDataSpec","metadataSpec","listOptionSpec","nonNegativeNumberSpec","looseObjectSpec","nullFunctionSpec","argsToForward","UploadTask","transferred_","needToFetchStatus_","needToFetchMetadata_","observers_","error_","uploadUrl_","request_","chunkMultiplier_","resolve_","reject_","ref_","authWrapper_","location_","blob_","metadata_","resumable_","shouldDoResumable_","state_","errorHandler_","completeTransitions_","transition_","metadataErrorHandler_","promise_","start_","makeProgressCallback_","sizeBefore","loaded","updateProgress_","createResumable_","fetchStatus_","fetchMetadata_","continueUpload_","oneShotUpload_","resolveToken_","getAuthToken","authToken","metadataForUpload","createResumableUpload","createRequest","makeRequest","getPromise","sizeString","isNaN","getResumableUploadStatus","statusRequest","uploadRequest","newStatus","increaseMultiplier_","metadataRequest","boundary","random","genBoundary","preBlobPart","postBlobPart","multipartUpload","multipartRequest","transferred","old","notifyObservers_","cancel","wasPaused","externalState","on","completed","typeValidator","nextOrObserverMessage","nextValidator","observerValidator","nextOrObserverValidator","makeBinder","addObserver_","removeObserver_","binderNextOrObserverValidator","binderSpecs","typeOnly","onFulfilled","onRejected","notifyObserver_","splice","finishPromise_","triggered","snapshot","resume","valid","pause","Reference","newRef","newPath","parent","put","throwIfRoot_","putString","delete","listAll","accumulator","listAllHelper","opt","nextPage","label","sent","options","op","getDownloadURL","invalidRootOperation","FailRequest","_appDelete","RequestMap","Map","addRequest","request","clear","v","AuthWrapper","app","authProvider","maker","requestMaker","pool","bucket_","deleted_","app_","extractBucket_","authProvider_","storageRefMaker_","requestMaker_","pool_","service_","maxOperationRetryTime_","maxUploadRetryTime_","requestMap_","config","auth","getImmediate","getToken","response","accessToken","deleteApp","setMaxUploadRetryTime","time","setMaxOperationRetryTime","NetworkRequest","errorCallback","pendingXhr_","backoffId_","canceled_","appDelete_","url_","method_","headers_","body_","successCodes_","additionalRetryCodes_","callback_","errorCallback_","progressCallback_","timeout_","backoffDone","requestWentThrough","wasSuccessCode","result","RequestEndStatus","waitSeconds","timeoutId","hitTimeout","cancelState","triggeredCallback","triggerCallback","callWithDelay","millis","setTimeout","success","waitMillis","stopped","stop","wasTimeout","clearTimeout","backoffCallback","progressListener","hitServer","isRetryStatusCode_","successCode","wasCanceled","progressEvent","lengthComputable","appDelete","isFiveHundredCode","isExtraRetryCode","isRequestSpecificRetryCode","addAuthHeader_","version","addVersionHeader_","instance","namespaceExports","Service","authWrapperBucket","internals_","ServiceInternals","refFromURL","STORAGE_TYPE","factory","container","getProvider","Storage","INTERNAL","registerComponent","setServiceProps","setMultipleInstances","registerVersion"],"mappings":"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","file":"vendors~app~e041e925.js","sourcesContent":["'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar tslib = require('tslib');\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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 Firebase constants. Some of these (@defines) can be overridden at compile-time.\r\n */\r\nvar CONSTANTS = {\r\n /**\r\n * @define {boolean} Whether this is the client Node.js SDK.\r\n */\r\n NODE_CLIENT: false,\r\n /**\r\n * @define {boolean} Whether this is the Admin Node.js SDK.\r\n */\r\n NODE_ADMIN: false,\r\n /**\r\n * Firebase SDK Version\r\n */\r\n SDK_VERSION: '${JSCORE_VERSION}'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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 an error if the provided assertion is falsy\r\n */\r\nvar assert = function (assertion, message) {\r\n if (!assertion) {\r\n throw assertionError(message);\r\n }\r\n};\r\n/**\r\n * Returns an Error object suitable for throwing.\r\n */\r\nvar assertionError = function (message) {\r\n return new Error('Firebase Database (' +\r\n CONSTANTS.SDK_VERSION +\r\n ') INTERNAL ASSERT FAILED: ' +\r\n message);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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 stringToByteArray = function (str) {\r\n // TODO(user): Use native implementations if/when available\r\n var out = [];\r\n var p = 0;\r\n for (var i = 0; i < str.length; i++) {\r\n var c = str.charCodeAt(i);\r\n if (c < 128) {\r\n out[p++] = c;\r\n }\r\n else if (c < 2048) {\r\n out[p++] = (c >> 6) | 192;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else if ((c & 0xfc00) === 0xd800 &&\r\n i + 1 < str.length &&\r\n (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\r\n // Surrogate Pair\r\n c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\r\n out[p++] = (c >> 18) | 240;\r\n out[p++] = ((c >> 12) & 63) | 128;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else {\r\n out[p++] = (c >> 12) | 224;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n }\r\n return out;\r\n};\r\n/**\r\n * Turns an array of numbers into the string given by the concatenation of the\r\n * characters to which the numbers correspond.\r\n * @param bytes Array of numbers representing characters.\r\n * @return Stringification of the array.\r\n */\r\nvar byteArrayToString = function (bytes) {\r\n // TODO(user): Use native implementations if/when available\r\n var out = [];\r\n var pos = 0, c = 0;\r\n while (pos < bytes.length) {\r\n var c1 = bytes[pos++];\r\n if (c1 < 128) {\r\n out[c++] = String.fromCharCode(c1);\r\n }\r\n else if (c1 > 191 && c1 < 224) {\r\n var c2 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));\r\n }\r\n else if (c1 > 239 && c1 < 365) {\r\n // Surrogate Pair\r\n var c2 = bytes[pos++];\r\n var c3 = bytes[pos++];\r\n var c4 = bytes[pos++];\r\n var u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -\r\n 0x10000;\r\n out[c++] = String.fromCharCode(0xd800 + (u >> 10));\r\n out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\r\n }\r\n else {\r\n var c2 = bytes[pos++];\r\n var c3 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\r\n }\r\n }\r\n return out.join('');\r\n};\r\n// We define it as an object literal instead of a class because a class compiled down to es5 can't\r\n// be treeshaked. https://github.com/rollup/rollup/issues/1691\r\n// Static lookup maps, lazily populated by init_()\r\nvar base64 = {\r\n /**\r\n * Maps bytes to characters.\r\n */\r\n byteToCharMap_: null,\r\n /**\r\n * Maps characters to bytes.\r\n */\r\n charToByteMap_: null,\r\n /**\r\n * Maps bytes to websafe characters.\r\n * @private\r\n */\r\n byteToCharMapWebSafe_: null,\r\n /**\r\n * Maps websafe characters to bytes.\r\n * @private\r\n */\r\n charToByteMapWebSafe_: null,\r\n /**\r\n * Our default alphabet, shared between\r\n * ENCODED_VALS and ENCODED_VALS_WEBSAFE\r\n */\r\n ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',\r\n /**\r\n * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\r\n */\r\n get ENCODED_VALS() {\r\n return this.ENCODED_VALS_BASE + '+/=';\r\n },\r\n /**\r\n * Our websafe alphabet.\r\n */\r\n get ENCODED_VALS_WEBSAFE() {\r\n return this.ENCODED_VALS_BASE + '-_.';\r\n },\r\n /**\r\n * Whether this browser supports the atob and btoa functions. This extension\r\n * started at Mozilla but is now implemented by many browsers. We use the\r\n * ASSUME_* variables to avoid pulling in the full useragent detection library\r\n * but still allowing the standard per-browser compilations.\r\n *\r\n */\r\n HAS_NATIVE_SUPPORT: typeof atob === 'function',\r\n /**\r\n * Base64-encode an array of bytes.\r\n *\r\n * @param input An array of bytes (numbers with\r\n * value in [0, 255]) to encode.\r\n * @param webSafe Boolean indicating we should use the\r\n * alternative alphabet.\r\n * @return The base64 encoded string.\r\n */\r\n encodeByteArray: function (input, webSafe) {\r\n if (!Array.isArray(input)) {\r\n throw Error('encodeByteArray takes an array as a parameter');\r\n }\r\n this.init_();\r\n var byteToCharMap = webSafe\r\n ? this.byteToCharMapWebSafe_\r\n : this.byteToCharMap_;\r\n var output = [];\r\n for (var i = 0; i < input.length; i += 3) {\r\n var byte1 = input[i];\r\n var haveByte2 = i + 1 < input.length;\r\n var byte2 = haveByte2 ? input[i + 1] : 0;\r\n var haveByte3 = i + 2 < input.length;\r\n var byte3 = haveByte3 ? input[i + 2] : 0;\r\n var outByte1 = byte1 >> 2;\r\n var outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\r\n var outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);\r\n var outByte4 = byte3 & 0x3f;\r\n if (!haveByte3) {\r\n outByte4 = 64;\r\n if (!haveByte2) {\r\n outByte3 = 64;\r\n }\r\n }\r\n output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);\r\n }\r\n return output.join('');\r\n },\r\n /**\r\n * Base64-encode a string.\r\n *\r\n * @param input A string to encode.\r\n * @param webSafe If true, we should use the\r\n * alternative alphabet.\r\n * @return The base64 encoded string.\r\n */\r\n encodeString: function (input, webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n return btoa(input);\r\n }\r\n return this.encodeByteArray(stringToByteArray(input), webSafe);\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * @param input to decode.\r\n * @param webSafe True if we should use the\r\n * alternative alphabet.\r\n * @return string representing the decoded value.\r\n */\r\n decodeString: function (input, webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n return atob(input);\r\n }\r\n return byteArrayToString(this.decodeStringToByteArray(input, webSafe));\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * In base-64 decoding, groups of four characters are converted into three\r\n * bytes. If the encoder did not apply padding, the input length may not\r\n * be a multiple of 4.\r\n *\r\n * In this case, the last group will have fewer than 4 characters, and\r\n * padding will be inferred. If the group has one or two characters, it decodes\r\n * to one byte. If the group has three characters, it decodes to two bytes.\r\n *\r\n * @param input Input to decode.\r\n * @param webSafe True if we should use the web-safe alphabet.\r\n * @return bytes representing the decoded value.\r\n */\r\n decodeStringToByteArray: function (input, webSafe) {\r\n this.init_();\r\n var charToByteMap = webSafe\r\n ? this.charToByteMapWebSafe_\r\n : this.charToByteMap_;\r\n var output = [];\r\n for (var i = 0; i < input.length;) {\r\n var byte1 = charToByteMap[input.charAt(i++)];\r\n var haveByte2 = i < input.length;\r\n var byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\r\n ++i;\r\n var haveByte3 = i < input.length;\r\n var byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n var haveByte4 = i < input.length;\r\n var byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {\r\n throw Error();\r\n }\r\n var outByte1 = (byte1 << 2) | (byte2 >> 4);\r\n output.push(outByte1);\r\n if (byte3 !== 64) {\r\n var outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);\r\n output.push(outByte2);\r\n if (byte4 !== 64) {\r\n var outByte3 = ((byte3 << 6) & 0xc0) | byte4;\r\n output.push(outByte3);\r\n }\r\n }\r\n }\r\n return output;\r\n },\r\n /**\r\n * Lazy static initialization function. Called before\r\n * accessing any of the static map variables.\r\n * @private\r\n */\r\n init_: function () {\r\n if (!this.byteToCharMap_) {\r\n this.byteToCharMap_ = {};\r\n this.charToByteMap_ = {};\r\n this.byteToCharMapWebSafe_ = {};\r\n this.charToByteMapWebSafe_ = {};\r\n // We want quick mappings back and forth, so we precompute two maps.\r\n for (var i = 0; i < this.ENCODED_VALS.length; i++) {\r\n this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);\r\n this.charToByteMap_[this.byteToCharMap_[i]] = i;\r\n this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);\r\n this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;\r\n // Be forgiving when decoding and correctly decode both encodings.\r\n if (i >= this.ENCODED_VALS_BASE.length) {\r\n this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;\r\n this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;\r\n }\r\n }\r\n }\r\n }\r\n};\r\n/**\r\n * URL-safe base64 encoding\r\n */\r\nvar base64Encode = function (str) {\r\n var utf8Bytes = stringToByteArray(str);\r\n return base64.encodeByteArray(utf8Bytes, true);\r\n};\r\n/**\r\n * URL-safe base64 decoding\r\n *\r\n * NOTE: DO NOT use the global atob() function - it does NOT support the\r\n * base64Url variant encoding.\r\n *\r\n * @param str To be decoded\r\n * @return Decoded result, if possible\r\n */\r\nvar base64Decode = function (str) {\r\n try {\r\n return base64.decodeString(str, true);\r\n }\r\n catch (e) {\r\n console.error('base64Decode failed: ', e);\r\n }\r\n return null;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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 * Do a deep-copy of basic JavaScript Objects or Arrays.\r\n */\r\nfunction deepCopy(value) {\r\n return deepExtend(undefined, value);\r\n}\r\n/**\r\n * Copy properties from source to target (recursively allows extension\r\n * of Objects and Arrays). Scalar values in the target are over-written.\r\n * If target is undefined, an object of the appropriate type will be created\r\n * (and returned).\r\n *\r\n * We recursively copy all child properties of plain Objects in the source- so\r\n * that namespace- like dictionaries are merged.\r\n *\r\n * Note that the target can be a function, in which case the properties in\r\n * the source Object are copied onto it as static properties of the Function.\r\n */\r\nfunction deepExtend(target, source) {\r\n if (!(source instanceof Object)) {\r\n return source;\r\n }\r\n switch (source.constructor) {\r\n case Date:\r\n // Treat Dates like scalars; if the target date object had any child\r\n // properties - they will be lost!\r\n var dateValue = source;\r\n return new Date(dateValue.getTime());\r\n case Object:\r\n if (target === undefined) {\r\n target = {};\r\n }\r\n break;\r\n case Array:\r\n // Always copy the array source and overwrite the target.\r\n target = [];\r\n break;\r\n default:\r\n // Not a plain Object - treat it as a scalar.\r\n return source;\r\n }\r\n for (var prop in source) {\r\n if (!source.hasOwnProperty(prop)) {\r\n continue;\r\n }\r\n target[prop] = deepExtend(target[prop], source[prop]);\r\n }\r\n return target;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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 Deferred = /** @class */ (function () {\r\n function Deferred() {\r\n var _this = this;\r\n this.reject = function () { };\r\n this.resolve = function () { };\r\n this.promise = new Promise(function (resolve, reject) {\r\n _this.resolve = resolve;\r\n _this.reject = reject;\r\n });\r\n }\r\n /**\r\n * Our API internals are not promiseified and cannot because our callback APIs have subtle expectations around\r\n * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\r\n * and returns a node-style callback which will resolve or reject the Deferred's promise.\r\n */\r\n Deferred.prototype.wrapCallback = function (callback) {\r\n var _this = this;\r\n return function (error, value) {\r\n if (error) {\r\n _this.reject(error);\r\n }\r\n else {\r\n _this.resolve(value);\r\n }\r\n if (typeof callback === 'function') {\r\n // Attaching noop handler just in case developer wasn't expecting\r\n // promises\r\n _this.promise.catch(function () { });\r\n // Some of our callbacks don't expect a value and our own tests\r\n // assert that the parameter length is 1\r\n if (callback.length === 1) {\r\n callback(error);\r\n }\r\n else {\r\n callback(error, value);\r\n }\r\n }\r\n };\r\n };\r\n return Deferred;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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 navigator.userAgent string or '' if it's not defined.\r\n * @return user agent string\r\n */\r\nfunction getUA() {\r\n if (typeof navigator !== 'undefined' &&\r\n typeof navigator['userAgent'] === 'string') {\r\n return navigator['userAgent'];\r\n }\r\n else {\r\n return '';\r\n }\r\n}\r\n/**\r\n * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\r\n *\r\n * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap\r\n * in the Ripple emulator) nor Cordova `onDeviceReady`, which would normally\r\n * wait for a callback.\r\n */\r\nfunction isMobileCordova() {\r\n return (typeof window !== 'undefined' &&\r\n // @ts-ignore Setting up an broadly applicable index signature for Window\r\n // just to deal with this case would probably be a bad idea.\r\n !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\r\n /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA()));\r\n}\r\n/**\r\n * Detect Node.js.\r\n *\r\n * @return true if Node.js environment is detected.\r\n */\r\n// Node detection logic from: https://github.com/iliakan/detect-node/\r\nfunction isNode() {\r\n try {\r\n return (Object.prototype.toString.call(global.process) === '[object process]');\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Detect Browser Environment\r\n */\r\nfunction isBrowser() {\r\n return typeof self === 'object' && self.self === self;\r\n}\r\nfunction isBrowserExtension() {\r\n var runtime = typeof chrome === 'object'\r\n ? chrome.runtime\r\n : typeof browser === 'object'\r\n ? browser.runtime\r\n : undefined;\r\n return typeof runtime === 'object' && runtime.id !== undefined;\r\n}\r\n/**\r\n * Detect React Native.\r\n *\r\n * @return true if ReactNative environment is detected.\r\n */\r\nfunction isReactNative() {\r\n return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');\r\n}\r\n/** Detects Electron apps. */\r\nfunction isElectron() {\r\n return getUA().indexOf('Electron/') >= 0;\r\n}\r\n/** Detects Internet Explorer. */\r\nfunction isIE() {\r\n var ua = getUA();\r\n return ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\r\n}\r\n/** Detects Universal Windows Platform apps. */\r\nfunction isUWP() {\r\n return getUA().indexOf('MSAppHost/') >= 0;\r\n}\r\n/**\r\n * Detect whether the current SDK build is the Node version.\r\n *\r\n * @return true if it's the Node SDK build.\r\n */\r\nfunction isNodeSdk() {\r\n return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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 ERROR_NAME = 'FirebaseError';\r\n// Based on code from:\r\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types\r\nvar FirebaseError = /** @class */ (function (_super) {\r\n tslib.__extends(FirebaseError, _super);\r\n function FirebaseError(code, message) {\r\n var _this = _super.call(this, message) || this;\r\n _this.code = code;\r\n _this.name = ERROR_NAME;\r\n // Fix For ES5\r\n // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\r\n Object.setPrototypeOf(_this, FirebaseError.prototype);\r\n // Maintains proper stack trace for where our error was thrown.\r\n // Only available on V8.\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(_this, ErrorFactory.prototype.create);\r\n }\r\n return _this;\r\n }\r\n return FirebaseError;\r\n}(Error));\r\nvar ErrorFactory = /** @class */ (function () {\r\n function ErrorFactory(service, serviceName, errors) {\r\n this.service = service;\r\n this.serviceName = serviceName;\r\n this.errors = errors;\r\n }\r\n ErrorFactory.prototype.create = function (code) {\r\n var data = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n data[_i - 1] = arguments[_i];\r\n }\r\n var customData = data[0] || {};\r\n var fullCode = this.service + \"/\" + code;\r\n var template = this.errors[code];\r\n var message = template ? replaceTemplate(template, customData) : 'Error';\r\n // Service Name: Error message (service/code).\r\n var fullMessage = this.serviceName + \": \" + message + \" (\" + fullCode + \").\";\r\n var error = new FirebaseError(fullCode, fullMessage);\r\n // Keys with an underscore at the end of their name are not included in\r\n // error.data for some reason.\r\n // TODO: Replace with Object.entries when lib is updated to es2017.\r\n for (var _a = 0, _b = Object.keys(customData); _a < _b.length; _a++) {\r\n var key = _b[_a];\r\n if (key.slice(-1) !== '_') {\r\n if (key in error) {\r\n console.warn(\"Overwriting FirebaseError base field \\\"\" + key + \"\\\" can cause unexpected behavior.\");\r\n }\r\n error[key] = customData[key];\r\n }\r\n }\r\n return error;\r\n };\r\n return ErrorFactory;\r\n}());\r\nfunction replaceTemplate(template, data) {\r\n return template.replace(PATTERN, function (_, key) {\r\n var value = data[key];\r\n return value != null ? value.toString() : \"<\" + key + \"?>\";\r\n });\r\n}\r\nvar PATTERN = /\\{\\$([^}]+)}/g;\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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 * Evaluates a JSON string into a javascript object.\r\n *\r\n * @param {string} str A string containing JSON.\r\n * @return {*} The javascript object representing the specified JSON.\r\n */\r\nfunction jsonEval(str) {\r\n return JSON.parse(str);\r\n}\r\n/**\r\n * Returns JSON representing a javascript object.\r\n * @param {*} data Javascript object to be stringified.\r\n * @return {string} The JSON contents of the object.\r\n */\r\nfunction stringify(data) {\r\n return JSON.stringify(data);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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 * Decodes a Firebase auth. token into constituent parts.\r\n *\r\n * Notes:\r\n * - May return with invalid / incomplete claims if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nvar decode = function (token) {\r\n var header = {}, claims = {}, data = {}, signature = '';\r\n try {\r\n var parts = token.split('.');\r\n header = jsonEval(base64Decode(parts[0]) || '');\r\n claims = jsonEval(base64Decode(parts[1]) || '');\r\n signature = parts[2];\r\n data = claims['d'] || {};\r\n delete claims['d'];\r\n }\r\n catch (e) { }\r\n return {\r\n header: header,\r\n claims: claims,\r\n data: data,\r\n signature: signature\r\n };\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the\r\n * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nvar isValidTimestamp = function (token) {\r\n var claims = decode(token).claims;\r\n var now = Math.floor(new Date().getTime() / 1000);\r\n var validSince = 0, validUntil = 0;\r\n if (typeof claims === 'object') {\r\n if (claims.hasOwnProperty('nbf')) {\r\n validSince = claims['nbf'];\r\n }\r\n else if (claims.hasOwnProperty('iat')) {\r\n validSince = claims['iat'];\r\n }\r\n if (claims.hasOwnProperty('exp')) {\r\n validUntil = claims['exp'];\r\n }\r\n else {\r\n // token will expire after 24h by default\r\n validUntil = validSince + 86400;\r\n }\r\n }\r\n return (!!now &&\r\n !!validSince &&\r\n !!validUntil &&\r\n now >= validSince &&\r\n now <= validUntil);\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.\r\n *\r\n * Notes:\r\n * - May return null if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nvar issuedAtTime = function (token) {\r\n var claims = decode(token).claims;\r\n if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {\r\n return claims['iat'];\r\n }\r\n return null;\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nvar isValidFormat = function (token) {\r\n var decoded = decode(token), claims = decoded.claims;\r\n return !!claims && typeof claims === 'object' && claims.hasOwnProperty('iat');\r\n};\r\n/**\r\n * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n */\r\nvar isAdmin = function (token) {\r\n var claims = decode(token).claims;\r\n return typeof claims === 'object' && claims['admin'] === true;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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 contains(obj, key) {\r\n return Object.prototype.hasOwnProperty.call(obj, key);\r\n}\r\nfunction safeGet(obj, key) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return obj[key];\r\n }\r\n else {\r\n return undefined;\r\n }\r\n}\r\nfunction isEmpty(obj) {\r\n for (var key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction map(obj, fn, contextObj) {\r\n var res = {};\r\n for (var key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n res[key] = fn.call(contextObj, obj[key], key, obj);\r\n }\r\n }\r\n return res;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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 querystring-formatted string (e.g. &arg=val&arg2=val2) from a\r\n * params object (e.g. {arg: 'val', arg2: 'val2'})\r\n * Note: You must prepend it with ? when adding it to a URL.\r\n */\r\nfunction querystring(querystringParams) {\r\n var params = [];\r\n var _loop_1 = function (key, value) {\r\n if (Array.isArray(value)) {\r\n value.forEach(function (arrayVal) {\r\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));\r\n });\r\n }\r\n else {\r\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\r\n }\r\n };\r\n for (var _i = 0, _a = Object.entries(querystringParams); _i < _a.length; _i++) {\r\n var _b = _a[_i], key = _b[0], value = _b[1];\r\n _loop_1(key, value);\r\n }\r\n return params.length ? '&' + params.join('&') : '';\r\n}\r\n/**\r\n * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object\r\n * (e.g. {arg: 'val', arg2: 'val2'})\r\n */\r\nfunction querystringDecode(querystring) {\r\n var obj = {};\r\n var tokens = querystring.replace(/^\\?/, '').split('&');\r\n tokens.forEach(function (token) {\r\n if (token) {\r\n var key = token.split('=');\r\n obj[key[0]] = key[1];\r\n }\r\n });\r\n return obj;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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 SHA-1 cryptographic hash.\r\n * Variable names follow the notation in FIPS PUB 180-3:\r\n * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.\r\n *\r\n * Usage:\r\n * var sha1 = new sha1();\r\n * sha1.update(bytes);\r\n * var hash = sha1.digest();\r\n *\r\n * Performance:\r\n * Chrome 23: ~400 Mbit/s\r\n * Firefox 16: ~250 Mbit/s\r\n *\r\n */\r\n/**\r\n * SHA-1 cryptographic hash constructor.\r\n *\r\n * The properties declared here are discussed in the above algorithm document.\r\n * @constructor\r\n * @final\r\n * @struct\r\n */\r\nvar Sha1 = /** @class */ (function () {\r\n function Sha1() {\r\n /**\r\n * Holds the previous values of accumulated variables a-e in the compress_\r\n * function.\r\n * @private\r\n */\r\n this.chain_ = [];\r\n /**\r\n * A buffer holding the partially computed hash result.\r\n * @private\r\n */\r\n this.buf_ = [];\r\n /**\r\n * An array of 80 bytes, each a part of the message to be hashed. Referred to\r\n * as the message schedule in the docs.\r\n * @private\r\n */\r\n this.W_ = [];\r\n /**\r\n * Contains data needed to pad messages less than 64 bytes.\r\n * @private\r\n */\r\n this.pad_ = [];\r\n /**\r\n * @private {number}\r\n */\r\n this.inbuf_ = 0;\r\n /**\r\n * @private {number}\r\n */\r\n this.total_ = 0;\r\n this.blockSize = 512 / 8;\r\n this.pad_[0] = 128;\r\n for (var i = 1; i < this.blockSize; ++i) {\r\n this.pad_[i] = 0;\r\n }\r\n this.reset();\r\n }\r\n Sha1.prototype.reset = function () {\r\n this.chain_[0] = 0x67452301;\r\n this.chain_[1] = 0xefcdab89;\r\n this.chain_[2] = 0x98badcfe;\r\n this.chain_[3] = 0x10325476;\r\n this.chain_[4] = 0xc3d2e1f0;\r\n this.inbuf_ = 0;\r\n this.total_ = 0;\r\n };\r\n /**\r\n * Internal compress helper function.\r\n * @param buf Block to compress.\r\n * @param offset Offset of the block in the buffer.\r\n * @private\r\n */\r\n Sha1.prototype.compress_ = function (buf, offset) {\r\n if (!offset) {\r\n offset = 0;\r\n }\r\n var W = this.W_;\r\n // get 16 big endian words\r\n if (typeof buf === 'string') {\r\n for (var i = 0; i < 16; i++) {\r\n // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS\r\n // have a bug that turns the post-increment ++ operator into pre-increment\r\n // during JIT compilation. We have code that depends heavily on SHA-1 for\r\n // correctness and which is affected by this bug, so I've removed all uses\r\n // of post-increment ++ in which the result value is used. We can revert\r\n // this change once the Safari bug\r\n // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and\r\n // most clients have been updated.\r\n W[i] =\r\n (buf.charCodeAt(offset) << 24) |\r\n (buf.charCodeAt(offset + 1) << 16) |\r\n (buf.charCodeAt(offset + 2) << 8) |\r\n buf.charCodeAt(offset + 3);\r\n offset += 4;\r\n }\r\n }\r\n else {\r\n for (var i = 0; i < 16; i++) {\r\n W[i] =\r\n (buf[offset] << 24) |\r\n (buf[offset + 1] << 16) |\r\n (buf[offset + 2] << 8) |\r\n buf[offset + 3];\r\n offset += 4;\r\n }\r\n }\r\n // expand to 80 words\r\n for (var i = 16; i < 80; i++) {\r\n var t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\r\n W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;\r\n }\r\n var a = this.chain_[0];\r\n var b = this.chain_[1];\r\n var c = this.chain_[2];\r\n var d = this.chain_[3];\r\n var e = this.chain_[4];\r\n var f, k;\r\n // TODO(user): Try to unroll this loop to speed up the computation.\r\n for (var i = 0; i < 80; i++) {\r\n if (i < 40) {\r\n if (i < 20) {\r\n f = d ^ (b & (c ^ d));\r\n k = 0x5a827999;\r\n }\r\n else {\r\n f = b ^ c ^ d;\r\n k = 0x6ed9eba1;\r\n }\r\n }\r\n else {\r\n if (i < 60) {\r\n f = (b & c) | (d & (b | c));\r\n k = 0x8f1bbcdc;\r\n }\r\n else {\r\n f = b ^ c ^ d;\r\n k = 0xca62c1d6;\r\n }\r\n }\r\n var t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;\r\n e = d;\r\n d = c;\r\n c = ((b << 30) | (b >>> 2)) & 0xffffffff;\r\n b = a;\r\n a = t;\r\n }\r\n this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;\r\n this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;\r\n this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;\r\n this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;\r\n this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;\r\n };\r\n Sha1.prototype.update = function (bytes, length) {\r\n // TODO(johnlenz): tighten the function signature and remove this check\r\n if (bytes == null) {\r\n return;\r\n }\r\n if (length === undefined) {\r\n length = bytes.length;\r\n }\r\n var lengthMinusBlock = length - this.blockSize;\r\n var n = 0;\r\n // Using local instead of member variables gives ~5% speedup on Firefox 16.\r\n var buf = this.buf_;\r\n var inbuf = this.inbuf_;\r\n // The outer while loop should execute at most twice.\r\n while (n < length) {\r\n // When we have no data in the block to top up, we can directly process the\r\n // input buffer (assuming it contains sufficient data). This gives ~25%\r\n // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that\r\n // the data is provided in large chunks (or in multiples of 64 bytes).\r\n if (inbuf === 0) {\r\n while (n <= lengthMinusBlock) {\r\n this.compress_(bytes, n);\r\n n += this.blockSize;\r\n }\r\n }\r\n if (typeof bytes === 'string') {\r\n while (n < length) {\r\n buf[inbuf] = bytes.charCodeAt(n);\r\n ++inbuf;\r\n ++n;\r\n if (inbuf === this.blockSize) {\r\n this.compress_(buf);\r\n inbuf = 0;\r\n // Jump to the outer loop so we use the full-block optimization.\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n while (n < length) {\r\n buf[inbuf] = bytes[n];\r\n ++inbuf;\r\n ++n;\r\n if (inbuf === this.blockSize) {\r\n this.compress_(buf);\r\n inbuf = 0;\r\n // Jump to the outer loop so we use the full-block optimization.\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n this.inbuf_ = inbuf;\r\n this.total_ += length;\r\n };\r\n /** @override */\r\n Sha1.prototype.digest = function () {\r\n var digest = [];\r\n var totalBits = this.total_ * 8;\r\n // Add pad 0x80 0x00*.\r\n if (this.inbuf_ < 56) {\r\n this.update(this.pad_, 56 - this.inbuf_);\r\n }\r\n else {\r\n this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));\r\n }\r\n // Add # bits.\r\n for (var i = this.blockSize - 1; i >= 56; i--) {\r\n this.buf_[i] = totalBits & 255;\r\n totalBits /= 256; // Don't use bit-shifting here!\r\n }\r\n this.compress_(this.buf_);\r\n var n = 0;\r\n for (var i = 0; i < 5; i++) {\r\n for (var j = 24; j >= 0; j -= 8) {\r\n digest[n] = (this.chain_[i] >> j) & 255;\r\n ++n;\r\n }\r\n }\r\n return digest;\r\n };\r\n return Sha1;\r\n}());\n\n/**\r\n * Helper to make a Subscribe function (just like Promise helps make a\r\n * Thenable).\r\n *\r\n * @param executor Function which can make calls to a single Observer\r\n * as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\nfunction createSubscribe(executor, onNoObservers) {\r\n var proxy = new ObserverProxy(executor, onNoObservers);\r\n return proxy.subscribe.bind(proxy);\r\n}\r\n/**\r\n * Implement fan-out for any number of Observers attached via a subscribe\r\n * function.\r\n */\r\nvar ObserverProxy = /** @class */ (function () {\r\n /**\r\n * @param executor Function which can make calls to a single Observer\r\n * as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\n function ObserverProxy(executor, onNoObservers) {\r\n var _this = this;\r\n this.observers = [];\r\n this.unsubscribes = [];\r\n this.observerCount = 0;\r\n // Micro-task scheduling by calling task.then().\r\n this.task = Promise.resolve();\r\n this.finalized = false;\r\n this.onNoObservers = onNoObservers;\r\n // Call the executor asynchronously so subscribers that are called\r\n // synchronously after the creation of the subscribe function\r\n // can still receive the very first value generated in the executor.\r\n this.task\r\n .then(function () {\r\n executor(_this);\r\n })\r\n .catch(function (e) {\r\n _this.error(e);\r\n });\r\n }\r\n ObserverProxy.prototype.next = function (value) {\r\n this.forEachObserver(function (observer) {\r\n observer.next(value);\r\n });\r\n };\r\n ObserverProxy.prototype.error = function (error) {\r\n this.forEachObserver(function (observer) {\r\n observer.error(error);\r\n });\r\n this.close(error);\r\n };\r\n ObserverProxy.prototype.complete = function () {\r\n this.forEachObserver(function (observer) {\r\n observer.complete();\r\n });\r\n this.close();\r\n };\r\n /**\r\n * Subscribe function that can be used to add an Observer to the fan-out list.\r\n *\r\n * - We require that no event is sent to a subscriber sychronously to their\r\n * call to subscribe().\r\n */\r\n ObserverProxy.prototype.subscribe = function (nextOrObserver, error, complete) {\r\n var _this = this;\r\n var observer;\r\n if (nextOrObserver === undefined &&\r\n error === undefined &&\r\n complete === undefined) {\r\n throw new Error('Missing Observer.');\r\n }\r\n // Assemble an Observer object when passed as callback functions.\r\n if (implementsAnyMethods(nextOrObserver, [\r\n 'next',\r\n 'error',\r\n 'complete'\r\n ])) {\r\n observer = nextOrObserver;\r\n }\r\n else {\r\n observer = {\r\n next: nextOrObserver,\r\n error: error,\r\n complete: complete\r\n };\r\n }\r\n if (observer.next === undefined) {\r\n observer.next = noop;\r\n }\r\n if (observer.error === undefined) {\r\n observer.error = noop;\r\n }\r\n if (observer.complete === undefined) {\r\n observer.complete = noop;\r\n }\r\n var unsub = this.unsubscribeOne.bind(this, this.observers.length);\r\n // Attempt to subscribe to a terminated Observable - we\r\n // just respond to the Observer with the final error or complete\r\n // event.\r\n if (this.finalized) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(function () {\r\n try {\r\n if (_this.finalError) {\r\n observer.error(_this.finalError);\r\n }\r\n else {\r\n observer.complete();\r\n }\r\n }\r\n catch (e) {\r\n // nothing\r\n }\r\n return;\r\n });\r\n }\r\n this.observers.push(observer);\r\n return unsub;\r\n };\r\n // Unsubscribe is synchronous - we guarantee that no events are sent to\r\n // any unsubscribed Observer.\r\n ObserverProxy.prototype.unsubscribeOne = function (i) {\r\n if (this.observers === undefined || this.observers[i] === undefined) {\r\n return;\r\n }\r\n delete this.observers[i];\r\n this.observerCount -= 1;\r\n if (this.observerCount === 0 && this.onNoObservers !== undefined) {\r\n this.onNoObservers(this);\r\n }\r\n };\r\n ObserverProxy.prototype.forEachObserver = function (fn) {\r\n if (this.finalized) {\r\n // Already closed by previous event....just eat the additional values.\r\n return;\r\n }\r\n // Since sendOne calls asynchronously - there is no chance that\r\n // this.observers will become undefined.\r\n for (var i = 0; i < this.observers.length; i++) {\r\n this.sendOne(i, fn);\r\n }\r\n };\r\n // Call the Observer via one of it's callback function. We are careful to\r\n // confirm that the observe has not been unsubscribed since this asynchronous\r\n // function had been queued.\r\n ObserverProxy.prototype.sendOne = function (i, fn) {\r\n var _this = this;\r\n // Execute the callback asynchronously\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(function () {\r\n if (_this.observers !== undefined && _this.observers[i] !== undefined) {\r\n try {\r\n fn(_this.observers[i]);\r\n }\r\n catch (e) {\r\n // Ignore exceptions raised in Observers or missing methods of an\r\n // Observer.\r\n // Log error to console. b/31404806\r\n if (typeof console !== 'undefined' && console.error) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n });\r\n };\r\n ObserverProxy.prototype.close = function (err) {\r\n var _this = this;\r\n if (this.finalized) {\r\n return;\r\n }\r\n this.finalized = true;\r\n if (err !== undefined) {\r\n this.finalError = err;\r\n }\r\n // Proxy is no longer needed - garbage collect references\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this.task.then(function () {\r\n _this.observers = undefined;\r\n _this.onNoObservers = undefined;\r\n });\r\n };\r\n return ObserverProxy;\r\n}());\r\n/** Turn synchronous function into one called asynchronously. */\r\nfunction async(fn, onError) {\r\n return function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n Promise.resolve(true)\r\n .then(function () {\r\n fn.apply(void 0, args);\r\n })\r\n .catch(function (error) {\r\n if (onError) {\r\n onError(error);\r\n }\r\n });\r\n };\r\n}\r\n/**\r\n * Return true if the object passed in implements any of the named methods.\r\n */\r\nfunction implementsAnyMethods(obj, methods) {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return false;\r\n }\r\n for (var _i = 0, methods_1 = methods; _i < methods_1.length; _i++) {\r\n var method = methods_1[_i];\r\n if (method in obj && typeof obj[method] === 'function') {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nfunction noop() {\r\n // do nothing\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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 * Check to make sure the appropriate number of arguments are provided for a public function.\r\n * Throws an error if it fails.\r\n *\r\n * @param fnName The function name\r\n * @param minCount The minimum number of arguments to allow for the function call\r\n * @param maxCount The maximum number of argument to allow for the function call\r\n * @param argCount The actual number of arguments provided.\r\n */\r\nvar validateArgCount = function (fnName, minCount, maxCount, argCount) {\r\n var argError;\r\n if (argCount < minCount) {\r\n argError = 'at least ' + minCount;\r\n }\r\n else if (argCount > maxCount) {\r\n argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;\r\n }\r\n if (argError) {\r\n var error = fnName +\r\n ' failed: Was called with ' +\r\n argCount +\r\n (argCount === 1 ? ' argument.' : ' arguments.') +\r\n ' Expects ' +\r\n argError +\r\n '.';\r\n throw new Error(error);\r\n }\r\n};\r\n/**\r\n * Generates a string to prefix an error message about failed argument validation\r\n *\r\n * @param fnName The function name\r\n * @param argumentNumber The index of the argument\r\n * @param optional Whether or not the argument is optional\r\n * @return The prefix to add to the error thrown for validation.\r\n */\r\nfunction errorPrefix(fnName, argumentNumber, optional) {\r\n var argName = '';\r\n switch (argumentNumber) {\r\n case 1:\r\n argName = optional ? 'first' : 'First';\r\n break;\r\n case 2:\r\n argName = optional ? 'second' : 'Second';\r\n break;\r\n case 3:\r\n argName = optional ? 'third' : 'Third';\r\n break;\r\n case 4:\r\n argName = optional ? 'fourth' : 'Fourth';\r\n break;\r\n default:\r\n throw new Error('errorPrefix called with argumentNumber > 4. Need to update it?');\r\n }\r\n var error = fnName + ' failed: ';\r\n error += argName + ' argument ';\r\n return error;\r\n}\r\n/**\r\n * @param fnName\r\n * @param argumentNumber\r\n * @param namespace\r\n * @param optional\r\n */\r\nfunction validateNamespace(fnName, argumentNumber, namespace, optional) {\r\n if (optional && !namespace) {\r\n return;\r\n }\r\n if (typeof namespace !== 'string') {\r\n //TODO: I should do more validation here. We only allow certain chars in namespaces.\r\n throw new Error(errorPrefix(fnName, argumentNumber, optional) +\r\n 'must be a valid firebase namespace.');\r\n }\r\n}\r\nfunction validateCallback(fnName, argumentNumber, callback, optional) {\r\n if (optional && !callback) {\r\n return;\r\n }\r\n if (typeof callback !== 'function') {\r\n throw new Error(errorPrefix(fnName, argumentNumber, optional) +\r\n 'must be a valid function.');\r\n }\r\n}\r\nfunction validateContextObject(fnName, argumentNumber, context, optional) {\r\n if (optional && !context) {\r\n return;\r\n }\r\n if (typeof context !== 'object' || context === null) {\r\n throw new Error(errorPrefix(fnName, argumentNumber, optional) +\r\n 'must be a valid context object.');\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they\r\n// automatically replaced '\\r\\n' with '\\n', and they didn't handle surrogate pairs,\r\n// so it's been modified.\r\n// Note that not all Unicode characters appear as single characters in JavaScript strings.\r\n// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters\r\n// use 2 characters in Javascript. All 4-byte UTF-8 characters begin with a first\r\n// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate\r\n// pair).\r\n// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3\r\n/**\r\n * @param {string} str\r\n * @return {Array}\r\n */\r\nvar stringToByteArray$1 = function (str) {\r\n var out = [];\r\n var p = 0;\r\n for (var i = 0; i < str.length; i++) {\r\n var c = str.charCodeAt(i);\r\n // Is this the lead surrogate in a surrogate pair?\r\n if (c >= 0xd800 && c <= 0xdbff) {\r\n var high = c - 0xd800; // the high 10 bits.\r\n i++;\r\n assert(i < str.length, 'Surrogate pair missing trail surrogate.');\r\n var low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.\r\n c = 0x10000 + (high << 10) + low;\r\n }\r\n if (c < 128) {\r\n out[p++] = c;\r\n }\r\n else if (c < 2048) {\r\n out[p++] = (c >> 6) | 192;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else if (c < 65536) {\r\n out[p++] = (c >> 12) | 224;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else {\r\n out[p++] = (c >> 18) | 240;\r\n out[p++] = ((c >> 12) & 63) | 128;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n }\r\n return out;\r\n};\r\n/**\r\n * Calculate length without actually converting; useful for doing cheaper validation.\r\n * @param {string} str\r\n * @return {number}\r\n */\r\nvar stringLength = function (str) {\r\n var p = 0;\r\n for (var i = 0; i < str.length; i++) {\r\n var c = str.charCodeAt(i);\r\n if (c < 128) {\r\n p++;\r\n }\r\n else if (c < 2048) {\r\n p += 2;\r\n }\r\n else if (c >= 0xd800 && c <= 0xdbff) {\r\n // Lead surrogate of a surrogate pair. The pair together will take 4 bytes to represent.\r\n p += 4;\r\n i++; // skip trail surrogate.\r\n }\r\n else {\r\n p += 3;\r\n }\r\n }\r\n return p;\r\n};\n\nexports.CONSTANTS = CONSTANTS;\nexports.Deferred = Deferred;\nexports.ErrorFactory = ErrorFactory;\nexports.FirebaseError = FirebaseError;\nexports.Sha1 = Sha1;\nexports.assert = assert;\nexports.assertionError = assertionError;\nexports.async = async;\nexports.base64 = base64;\nexports.base64Decode = base64Decode;\nexports.base64Encode = base64Encode;\nexports.contains = contains;\nexports.createSubscribe = createSubscribe;\nexports.decode = decode;\nexports.deepCopy = deepCopy;\nexports.deepExtend = deepExtend;\nexports.errorPrefix = errorPrefix;\nexports.getUA = getUA;\nexports.isAdmin = isAdmin;\nexports.isBrowser = isBrowser;\nexports.isBrowserExtension = isBrowserExtension;\nexports.isElectron = isElectron;\nexports.isEmpty = isEmpty;\nexports.isIE = isIE;\nexports.isMobileCordova = isMobileCordova;\nexports.isNode = isNode;\nexports.isNodeSdk = isNodeSdk;\nexports.isReactNative = isReactNative;\nexports.isUWP = isUWP;\nexports.isValidFormat = isValidFormat;\nexports.isValidTimestamp = isValidTimestamp;\nexports.issuedAtTime = issuedAtTime;\nexports.jsonEval = jsonEval;\nexports.map = map;\nexports.querystring = querystring;\nexports.querystringDecode = querystringDecode;\nexports.safeGet = safeGet;\nexports.stringLength = stringLength;\nexports.stringToByteArray = stringToByteArray$1;\nexports.stringify = stringify;\nexports.validateArgCount = validateArgCount;\nexports.validateCallback = validateCallback;\nexports.validateContextObject = validateContextObject;\nexports.validateNamespace = validateNamespace;\n//# sourceMappingURL=index.cjs.js.map\n","import firebase from '@firebase/app';\nimport { __awaiter, __generator, __spreadArrays } from 'tslib';\nimport { Component } from '@firebase/component';\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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;\r\n/**\r\n * This is the value of Number.MIN_SAFE_INTEGER, which is not well supported\r\n * enough for us to use it directly.\r\n */\r\nvar MIN_SAFE_INTEGER = -9007199254740991;\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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 FirebaseStorageError = /** @class */ (function () {\r\n function FirebaseStorageError(code, message) {\r\n this.code_ = prependCode(code);\r\n this.message_ = 'Firebase Storage: ' + message;\r\n this.serverResponse_ = null;\r\n this.name_ = 'FirebaseError';\r\n }\r\n FirebaseStorageError.prototype.codeProp = function () {\r\n return this.code;\r\n };\r\n FirebaseStorageError.prototype.codeEquals = function (code) {\r\n return prependCode(code) === this.codeProp();\r\n };\r\n FirebaseStorageError.prototype.serverResponseProp = function () {\r\n return this.serverResponse_;\r\n };\r\n FirebaseStorageError.prototype.setServerResponseProp = function (serverResponse) {\r\n this.serverResponse_ = serverResponse;\r\n };\r\n Object.defineProperty(FirebaseStorageError.prototype, \"name\", {\r\n get: function () {\r\n return this.name_;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FirebaseStorageError.prototype, \"code\", {\r\n get: function () {\r\n return this.code_;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FirebaseStorageError.prototype, \"message\", {\r\n get: function () {\r\n return this.message_;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FirebaseStorageError.prototype, \"serverResponse\", {\r\n get: function () {\r\n return this.serverResponse_;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return FirebaseStorageError;\r\n}());\r\nvar Code = {\r\n // Shared between all platforms\r\n UNKNOWN: 'unknown',\r\n OBJECT_NOT_FOUND: 'object-not-found',\r\n BUCKET_NOT_FOUND: 'bucket-not-found',\r\n PROJECT_NOT_FOUND: 'project-not-found',\r\n QUOTA_EXCEEDED: 'quota-exceeded',\r\n UNAUTHENTICATED: 'unauthenticated',\r\n UNAUTHORIZED: 'unauthorized',\r\n RETRY_LIMIT_EXCEEDED: 'retry-limit-exceeded',\r\n INVALID_CHECKSUM: 'invalid-checksum',\r\n CANCELED: 'canceled',\r\n // JS specific\r\n INVALID_EVENT_NAME: 'invalid-event-name',\r\n INVALID_URL: 'invalid-url',\r\n INVALID_DEFAULT_BUCKET: 'invalid-default-bucket',\r\n NO_DEFAULT_BUCKET: 'no-default-bucket',\r\n CANNOT_SLICE_BLOB: 'cannot-slice-blob',\r\n SERVER_FILE_WRONG_SIZE: 'server-file-wrong-size',\r\n NO_DOWNLOAD_URL: 'no-download-url',\r\n INVALID_ARGUMENT: 'invalid-argument',\r\n INVALID_ARGUMENT_COUNT: 'invalid-argument-count',\r\n APP_DELETED: 'app-deleted',\r\n INVALID_ROOT_OPERATION: 'invalid-root-operation',\r\n INVALID_FORMAT: 'invalid-format',\r\n INTERNAL_ERROR: 'internal-error'\r\n};\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(Code.UNKNOWN, message);\r\n}\r\nfunction objectNotFound(path) {\r\n return new FirebaseStorageError(Code.OBJECT_NOT_FOUND, \"Object '\" + path + \"' does not exist.\");\r\n}\r\nfunction quotaExceeded(bucket) {\r\n return new FirebaseStorageError(Code.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(Code.UNAUTHENTICATED, message);\r\n}\r\nfunction unauthorized(path) {\r\n return new FirebaseStorageError(Code.UNAUTHORIZED, \"User does not have permission to access '\" + path + \"'.\");\r\n}\r\nfunction retryLimitExceeded() {\r\n return new FirebaseStorageError(Code.RETRY_LIMIT_EXCEEDED, 'Max retry time for operation exceeded, please try again.');\r\n}\r\nfunction canceled() {\r\n return new FirebaseStorageError(Code.CANCELED, 'User canceled the upload/download.');\r\n}\r\nfunction invalidUrl(url) {\r\n return new FirebaseStorageError(Code.INVALID_URL, \"Invalid URL '\" + url + \"'.\");\r\n}\r\nfunction invalidDefaultBucket(bucket) {\r\n return new FirebaseStorageError(Code.INVALID_DEFAULT_BUCKET, \"Invalid default bucket '\" + bucket + \"'.\");\r\n}\r\nfunction noDefaultBucket() {\r\n return new FirebaseStorageError(Code.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(Code.CANNOT_SLICE_BLOB, 'Cannot slice blob for upload. Please retry the upload.');\r\n}\r\nfunction serverFileWrongSize() {\r\n return new FirebaseStorageError(Code.SERVER_FILE_WRONG_SIZE, 'Server recorded incorrect upload file size, please retry the upload.');\r\n}\r\nfunction noDownloadURL() {\r\n return new FirebaseStorageError(Code.NO_DOWNLOAD_URL, 'The given file does not have any download URLs.');\r\n}\r\nfunction invalidArgument(index, fnName, message) {\r\n return new FirebaseStorageError(Code.INVALID_ARGUMENT, 'Invalid argument in `' + fnName + '` at index ' + index + ': ' + message);\r\n}\r\nfunction invalidArgumentCount(argMin, argMax, fnName, real) {\r\n var countPart;\r\n var plural;\r\n if (argMin === argMax) {\r\n countPart = argMin;\r\n plural = argMin === 1 ? 'argument' : 'arguments';\r\n }\r\n else {\r\n countPart = 'between ' + argMin + ' and ' + argMax;\r\n plural = 'arguments';\r\n }\r\n return new FirebaseStorageError(Code.INVALID_ARGUMENT_COUNT, 'Invalid argument count in `' +\r\n fnName +\r\n '`: Expected ' +\r\n countPart +\r\n ' ' +\r\n plural +\r\n ', received ' +\r\n real +\r\n '.');\r\n}\r\nfunction appDeleted() {\r\n return new FirebaseStorageError(Code.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(Code.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(Code.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(Code.INTERNAL_ERROR, 'Internal error: ' + message);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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 StringFormat = {\r\n RAW: 'raw',\r\n BASE64: 'base64',\r\n BASE64URL: 'base64url',\r\n DATA_URL: 'data_url'\r\n};\r\nfunction formatValidator(stringFormat) {\r\n switch (stringFormat) {\r\n case StringFormat.RAW:\r\n case StringFormat.BASE64:\r\n case StringFormat.BASE64URL:\r\n case StringFormat.DATA_URL:\r\n return;\r\n default:\r\n throw 'Expected one of the event types: [' +\r\n StringFormat.RAW +\r\n ', ' +\r\n StringFormat.BASE64 +\r\n ', ' +\r\n StringFormat.BASE64URL +\r\n ', ' +\r\n StringFormat.DATA_URL +\r\n '].';\r\n }\r\n}\r\n/**\r\n * @struct\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 = atob(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\n/**\r\n * @struct\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 Inc.\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 TaskEvent = {\r\n /** Triggered whenever the task changes or progress is updated. */\r\n STATE_CHANGED: 'state_changed'\r\n};\r\nvar InternalTaskState = {\r\n RUNNING: 'running',\r\n PAUSING: 'pausing',\r\n PAUSED: 'paused',\r\n SUCCESS: 'success',\r\n CANCELING: 'canceling',\r\n CANCELED: 'canceled',\r\n ERROR: 'error'\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 InternalTaskState.RUNNING:\r\n case InternalTaskState.PAUSING:\r\n case InternalTaskState.CANCELING:\r\n return TaskState.RUNNING;\r\n case InternalTaskState.PAUSED:\r\n return TaskState.PAUSED;\r\n case InternalTaskState.SUCCESS:\r\n return TaskState.SUCCESS;\r\n case InternalTaskState.CANCELED:\r\n return TaskState.CANCELED;\r\n case InternalTaskState.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 Inc.\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 * @return False if the object is undefined or null, true otherwise.\r\n */\r\nfunction isDef(p) {\r\n return p != null;\r\n}\r\nfunction isJustDef(p) {\r\n return p !== void 0;\r\n}\r\nfunction isFunction(p) {\r\n return typeof p === 'function';\r\n}\r\nfunction isObject(p) {\r\n return typeof p === 'object';\r\n}\r\nfunction isNonNullObject(p) {\r\n return isObject(p) && p !== null;\r\n}\r\nfunction isNonArrayObject(p) {\r\n return isObject(p) && !Array.isArray(p);\r\n}\r\nfunction isString(p) {\r\n return typeof p === 'string' || p instanceof String;\r\n}\r\nfunction isInteger(p) {\r\n return isNumber(p) && Number.isInteger(p);\r\n}\r\nfunction isNumber(p) {\r\n return typeof p === 'number' || p instanceof Number;\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}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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 * @enum{number}\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 Inc.\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 * We use this instead of goog.net.XhrIo because goog.net.XhrIo is hyuuuuge and\r\n * doesn't work in React Native on Android.\r\n */\r\nvar NetworkXhrIo = /** @class */ (function () {\r\n function NetworkXhrIo() {\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(_this);\r\n });\r\n _this.xhr_.addEventListener('error', function () {\r\n _this.errorCode_ = ErrorCode.NETWORK_ERROR;\r\n resolve(_this);\r\n });\r\n _this.xhr_.addEventListener('load', function () {\r\n resolve(_this);\r\n });\r\n });\r\n }\r\n /**\r\n * @override\r\n */\r\n NetworkXhrIo.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 (isDef(headers)) {\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 (isDef(body)) {\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 NetworkXhrIo.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 NetworkXhrIo.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 NetworkXhrIo.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 NetworkXhrIo.prototype.abort = function () {\r\n this.xhr_.abort();\r\n };\r\n /**\r\n * @override\r\n */\r\n NetworkXhrIo.prototype.getResponseHeader = function (header) {\r\n return this.xhr_.getResponseHeader(header);\r\n };\r\n /**\r\n * @override\r\n */\r\n NetworkXhrIo.prototype.addUploadProgressListener = function (listener) {\r\n if (isDef(this.xhr_.upload)) {\r\n this.xhr_.upload.addEventListener('progress', listener);\r\n }\r\n };\r\n /**\r\n * @override\r\n */\r\n NetworkXhrIo.prototype.removeUploadProgressListener = function (listener) {\r\n if (isDef(this.xhr_.upload)) {\r\n this.xhr_.upload.removeEventListener('progress', listener);\r\n }\r\n };\r\n return NetworkXhrIo;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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 XhrIoPool = /** @class */ (function () {\r\n function XhrIoPool() {\r\n }\r\n XhrIoPool.prototype.createXhrIo = function () {\r\n return new NetworkXhrIo();\r\n };\r\n return XhrIoPool;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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 Error(\"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 Inc.\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\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 Inc.\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 * @struct\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: true,\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: true,\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) {\r\n var bucketLocation;\r\n try {\r\n bucketLocation = Location.makeFromUrl(bucketString);\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) {\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 path = '(/([^?#]*).*)?$';\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 hostRegex = DEFAULT_HOST.replace(/[.]/g, '\\\\.');\r\n var httpRegex = new RegExp(\"^https?://\" + hostRegex + \"/\" + version + \"/b/\" + bucketDomain + \"/o\" + path, 'i');\r\n var httpIndices = { bucket: 1, path: 3 };\r\n var groups = [\r\n { regex: gsRegex, indices: gsIndices, postModify: gsModify },\r\n { regex: httpRegex, indices: httpIndices, postModify: httpModify }\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 * @license\r\n * Copyright 2017 Google Inc.\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 Inc.\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 Inc.\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) {\r\n return \"https://\" + DEFAULT_HOST + \"/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 // @ts-ignore TODO: remove once typescript is upgraded to 3.5.x\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 Inc.\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\n/**\r\n * @struct\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 (isDef(size)) {\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, authWrapper) {\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 authWrapper.makeStorageReference(loc);\r\n }\r\n Object.defineProperty(metadata, 'ref', { get: generateRef });\r\n}\r\nfunction fromResource(authWrapper, 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, authWrapper);\r\n return metadata;\r\n}\r\nfunction fromResourceString(authWrapper, 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(authWrapper, resource, mappings);\r\n}\r\nfunction downloadUrlFromResourceString(metadata, resourceString) {\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);\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}\r\nfunction metadataValidator(p) {\r\n if (!isObject(p) || !p) {\r\n throw 'Expected Metadata object.';\r\n }\r\n for (var key in p) {\r\n if (p.hasOwnProperty(key)) {\r\n var val = p[key];\r\n if (key === 'customMetadata') {\r\n if (!isObject(val)) {\r\n throw 'Expected object for \\'customMetadata\\' mapping.';\r\n }\r\n }\r\n else {\r\n if (isNonNullObject(val)) {\r\n throw \"Mapping for '\" + key + \"' cannot be an object.\";\r\n }\r\n }\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar MAX_RESULTS_KEY = 'maxResults';\r\nvar MAX_MAX_RESULTS = 1000;\r\nvar PAGE_TOKEN_KEY = 'pageToken';\r\nvar PREFIXES_KEY = 'prefixes';\r\nvar ITEMS_KEY = 'items';\r\nfunction fromBackendResponse(authWrapper, resource) {\r\n var listResult = {\r\n prefixes: [],\r\n items: [],\r\n nextPageToken: resource['nextPageToken']\r\n };\r\n var bucket = authWrapper.bucket();\r\n if (bucket === null) {\r\n throw noDefaultBucket();\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 = authWrapper.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 = authWrapper.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(authWrapper, 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(authWrapper, resource);\r\n}\r\nfunction listOptionsValidator(p) {\r\n if (!isObject(p) || !p) {\r\n throw 'Expected ListOptions object.';\r\n }\r\n for (var key in p) {\r\n if (key === MAX_RESULTS_KEY) {\r\n if (!isInteger(p[MAX_RESULTS_KEY]) ||\r\n p[MAX_RESULTS_KEY] <= 0) {\r\n throw 'Expected maxResults to be a positive number.';\r\n }\r\n if (p[MAX_RESULTS_KEY] > 1000) {\r\n throw \"Expected maxResults to be less than or equal to \" + MAX_MAX_RESULTS + \".\";\r\n }\r\n }\r\n else if (key === PAGE_TOKEN_KEY) {\r\n if (p[PAGE_TOKEN_KEY] && !isString(p[PAGE_TOKEN_KEY])) {\r\n throw 'Expected pageToken to be string.';\r\n }\r\n }\r\n else {\r\n throw 'Unknown option: ' + key;\r\n }\r\n }\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 Inc.\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(authWrapper, mappings) {\r\n function handler(xhr, text) {\r\n var metadata = fromResourceString(authWrapper, text, mappings);\r\n handlerCheck(metadata !== null);\r\n return metadata;\r\n }\r\n return handler;\r\n}\r\nfunction listHandler(authWrapper) {\r\n function handler(xhr, text) {\r\n var listResult = fromResponseString(authWrapper, text);\r\n handlerCheck(listResult !== null);\r\n return listResult;\r\n }\r\n return handler;\r\n}\r\nfunction downloadUrlHandler(authWrapper, mappings) {\r\n function handler(xhr, text) {\r\n var metadata = fromResourceString(authWrapper, text, mappings);\r\n handlerCheck(metadata !== null);\r\n return downloadUrlFromResourceString(metadata, text);\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 newErr = unauthenticated();\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.setServerResponseProp(err.serverResponseProp());\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.setServerResponseProp(err.serverResponseProp());\r\n return newErr;\r\n }\r\n return errorHandler;\r\n}\r\nfunction getMetadata(authWrapper, location, mappings) {\r\n var urlPart = location.fullServerUrl();\r\n var url = makeUrl(urlPart);\r\n var method = 'GET';\r\n var timeout = authWrapper.maxOperationRetryTime();\r\n var requestInfo = new RequestInfo(url, method, metadataHandler(authWrapper, mappings), timeout);\r\n requestInfo.errorHandler = objectErrorHandler(location);\r\n return requestInfo;\r\n}\r\nfunction list(authWrapper, 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);\r\n var method = 'GET';\r\n var timeout = authWrapper.maxOperationRetryTime();\r\n var requestInfo = new RequestInfo(url, method, listHandler(authWrapper), timeout);\r\n requestInfo.urlParams = urlParams;\r\n requestInfo.errorHandler = sharedErrorHandler(location);\r\n return requestInfo;\r\n}\r\nfunction getDownloadUrl(authWrapper, location, mappings) {\r\n var urlPart = location.fullServerUrl();\r\n var url = makeUrl(urlPart);\r\n var method = 'GET';\r\n var timeout = authWrapper.maxOperationRetryTime();\r\n var requestInfo = new RequestInfo(url, method, downloadUrlHandler(authWrapper, mappings), timeout);\r\n requestInfo.errorHandler = objectErrorHandler(location);\r\n return requestInfo;\r\n}\r\nfunction updateMetadata(authWrapper, location, metadata, mappings) {\r\n var urlPart = location.fullServerUrl();\r\n var url = makeUrl(urlPart);\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 = authWrapper.maxOperationRetryTime();\r\n var requestInfo = new RequestInfo(url, method, metadataHandler(authWrapper, 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(authWrapper, location) {\r\n var urlPart = location.fullServerUrl();\r\n var url = makeUrl(urlPart);\r\n var method = 'DELETE';\r\n var timeout = authWrapper.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\nfunction multipartUpload(authWrapper, 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 =\r\n str +\r\n Math.random()\r\n .toString()\r\n .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);\r\n var method = 'POST';\r\n var timeout = authWrapper.maxUploadRetryTime();\r\n var requestInfo = new RequestInfo(url, method, metadataHandler(authWrapper, 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 * @struct\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(authWrapper, 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);\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 = authWrapper.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(authWrapper, 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 = authWrapper.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 resumableUploadChunkSize = 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, authWrapper, 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(authWrapper, 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 = authWrapper.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 Inc.\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 * @struct\r\n */\r\nvar Observer = /** @class */ (function () {\r\n function Observer(nextOrObserver, error, complete) {\r\n var asFunctions = isFunction(nextOrObserver) ||\r\n isDef(error) ||\r\n isDef(complete);\r\n if (asFunctions) {\r\n this.next = nextOrObserver;\r\n this.error = error || null;\r\n this.complete = complete || null;\r\n }\r\n else {\r\n var observer = nextOrObserver;\r\n this.next = observer.next || null;\r\n this.error = observer.error || null;\r\n this.complete = observer.complete || null;\r\n }\r\n }\r\n return Observer;\r\n}());\n\nvar UploadTaskSnapshot = /** @class */ (function () {\r\n function UploadTaskSnapshot(bytesTransferred, totalBytes, state, metadata, task, ref) {\r\n this.bytesTransferred = bytesTransferred;\r\n this.totalBytes = totalBytes;\r\n this.state = state;\r\n this.metadata = metadata;\r\n this.task = task;\r\n this.ref = ref;\r\n }\r\n return UploadTaskSnapshot;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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 name Name of the function.\r\n * @param specs Argument specs.\r\n * @param passed The actual arguments passed to the function.\r\n * @throws {fbs.Error} If the arguments are invalid.\r\n */\r\nfunction validate(name, specs, passed) {\r\n var minArgs = specs.length;\r\n var maxArgs = specs.length;\r\n for (var i = 0; i < specs.length; i++) {\r\n if (specs[i].optional) {\r\n minArgs = i;\r\n break;\r\n }\r\n }\r\n var validLength = minArgs <= passed.length && passed.length <= maxArgs;\r\n if (!validLength) {\r\n throw invalidArgumentCount(minArgs, maxArgs, name, passed.length);\r\n }\r\n for (var i = 0; i < passed.length; i++) {\r\n try {\r\n specs[i].validator(passed[i]);\r\n }\r\n catch (e) {\r\n if (e instanceof Error) {\r\n throw invalidArgument(i, name, e.message);\r\n }\r\n else {\r\n throw invalidArgument(i, name, e);\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * @struct\r\n */\r\nvar ArgSpec = /** @class */ (function () {\r\n function ArgSpec(validator, optional) {\r\n var self = this;\r\n this.validator = function (p) {\r\n if (self.optional && !isJustDef(p)) {\r\n return;\r\n }\r\n validator(p);\r\n };\r\n this.optional = !!optional;\r\n }\r\n return ArgSpec;\r\n}());\r\nfunction and_(v1, v2) {\r\n return function (p) {\r\n v1(p);\r\n v2(p);\r\n };\r\n}\r\nfunction stringSpec(validator, optional) {\r\n function stringValidator(p) {\r\n if (!isString(p)) {\r\n throw 'Expected string.';\r\n }\r\n }\r\n var chainedValidator;\r\n if (validator) {\r\n chainedValidator = and_(stringValidator, validator);\r\n }\r\n else {\r\n chainedValidator = stringValidator;\r\n }\r\n return new ArgSpec(chainedValidator, optional);\r\n}\r\nfunction uploadDataSpec() {\r\n function validator(p) {\r\n var valid = p instanceof Uint8Array ||\r\n p instanceof ArrayBuffer ||\r\n (isNativeBlobDefined() && p instanceof Blob);\r\n if (!valid) {\r\n throw 'Expected Blob or File.';\r\n }\r\n }\r\n return new ArgSpec(validator);\r\n}\r\nfunction metadataSpec(optional) {\r\n return new ArgSpec(metadataValidator, optional);\r\n}\r\nfunction listOptionSpec(optional) {\r\n return new ArgSpec(listOptionsValidator, optional);\r\n}\r\nfunction nonNegativeNumberSpec() {\r\n function validator(p) {\r\n var valid = isNumber(p) && p >= 0;\r\n if (!valid) {\r\n throw 'Expected a number 0 or greater.';\r\n }\r\n }\r\n return new ArgSpec(validator);\r\n}\r\nfunction looseObjectSpec(validator, optional) {\r\n function isLooseObjectValidator(p) {\r\n var isLooseObject = p === null || (isDef(p) && p instanceof Object);\r\n if (!isLooseObject) {\r\n throw 'Expected an Object.';\r\n }\r\n if (validator !== undefined && validator !== null) {\r\n validator(p);\r\n }\r\n }\r\n return new ArgSpec(isLooseObjectValidator, optional);\r\n}\r\nfunction nullFunctionSpec(optional) {\r\n function validator(p) {\r\n var valid = p === null || isFunction(p);\r\n if (!valid) {\r\n throw 'Expected a Function.';\r\n }\r\n }\r\n return new ArgSpec(validator, optional);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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\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 Inc.\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 */\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, authWrapper, location, mappings, blob, metadata) {\r\n var _this = this;\r\n if (metadata === void 0) { metadata = null; }\r\n this.transferred_ = 0;\r\n this.needToFetchStatus_ = false;\r\n this.needToFetchMetadata_ = false;\r\n this.observers_ = [];\r\n this.error_ = null;\r\n this.uploadUrl_ = null;\r\n this.request_ = null;\r\n this.chunkMultiplier_ = 1;\r\n this.resolve_ = null;\r\n this.reject_ = null;\r\n this.ref_ = ref;\r\n this.authWrapper_ = authWrapper;\r\n this.location_ = location;\r\n this.blob_ = blob;\r\n this.metadata_ = metadata;\r\n this.mappings_ = mappings;\r\n this.resumable_ = this.shouldDoResumable_(this.blob_);\r\n this.state_ = InternalTaskState.RUNNING;\r\n this.errorHandler_ = function (error) {\r\n _this.request_ = null;\r\n _this.chunkMultiplier_ = 1;\r\n if (error.codeEquals(Code.CANCELED)) {\r\n _this.needToFetchStatus_ = true;\r\n _this.completeTransitions_();\r\n }\r\n else {\r\n _this.error_ = error;\r\n _this.transition_(InternalTaskState.ERROR);\r\n }\r\n };\r\n this.metadataErrorHandler_ = function (error) {\r\n _this.request_ = null;\r\n if (error.codeEquals(Code.CANCELED)) {\r\n _this.completeTransitions_();\r\n }\r\n else {\r\n _this.error_ = error;\r\n _this.transition_(InternalTaskState.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_ !== InternalTaskState.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_ !== null) {\r\n return;\r\n }\r\n if (this.resumable_) {\r\n if (this.uploadUrl_ === null) {\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 this.authWrapper_.getAuthToken().then(function (authToken) {\r\n switch (_this.state_) {\r\n case InternalTaskState.RUNNING:\r\n callback(authToken);\r\n break;\r\n case InternalTaskState.CANCELING:\r\n _this.transition_(InternalTaskState.CANCELED);\r\n break;\r\n case InternalTaskState.PAUSING:\r\n _this.transition_(InternalTaskState.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) {\r\n var requestInfo = createResumableUpload(_this.authWrapper_, _this.location_, _this.mappings_, _this.blob_, _this.metadata_);\r\n var createRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n _this.request_ = createRequest;\r\n createRequest.getPromise().then(function (url) {\r\n _this.request_ = null;\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) {\r\n var requestInfo = getResumableUploadStatus(_this.authWrapper_, _this.location_, url, _this.blob_);\r\n var statusRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n _this.request_ = statusRequest;\r\n statusRequest.getPromise().then(function (status) {\r\n status = status;\r\n _this.request_ = null;\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 = resumableUploadChunkSize * 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) {\r\n var requestInfo;\r\n try {\r\n requestInfo = continueResumableUpload(_this.location_, _this.authWrapper_, url, _this.blob_, chunkSize, _this.mappings_, status, _this.makeProgressCallback_());\r\n }\r\n catch (e) {\r\n _this.error_ = e;\r\n _this.transition_(InternalTaskState.ERROR);\r\n return;\r\n }\r\n var uploadRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n _this.request_ = uploadRequest;\r\n uploadRequest\r\n .getPromise()\r\n .then(function (newStatus) {\r\n _this.increaseMultiplier_();\r\n _this.request_ = null;\r\n _this.updateProgress_(newStatus.current);\r\n if (newStatus.finalized) {\r\n _this.metadata_ = newStatus.metadata;\r\n _this.transition_(InternalTaskState.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 = resumableUploadChunkSize * 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) {\r\n var requestInfo = getMetadata(_this.authWrapper_, _this.location_, _this.mappings_);\r\n var metadataRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n _this.request_ = metadataRequest;\r\n metadataRequest.getPromise().then(function (metadata) {\r\n _this.request_ = null;\r\n _this.metadata_ = metadata;\r\n _this.transition_(InternalTaskState.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) {\r\n var requestInfo = multipartUpload(_this.authWrapper_, _this.location_, _this.mappings_, _this.blob_, _this.metadata_);\r\n var multipartRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n _this.request_ = multipartRequest;\r\n multipartRequest.getPromise().then(function (metadata) {\r\n _this.request_ = null;\r\n _this.metadata_ = metadata;\r\n _this.updateProgress_(_this.blob_.size());\r\n _this.transition_(InternalTaskState.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 InternalTaskState.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_ !== null) {\r\n this.request_.cancel();\r\n }\r\n break;\r\n case InternalTaskState.PAUSING:\r\n // TODO(andysoto):\r\n // assert(this.state_ === InternalTaskState.RUNNING);\r\n this.state_ = state;\r\n if (this.request_ !== null) {\r\n this.request_.cancel();\r\n }\r\n break;\r\n case InternalTaskState.RUNNING:\r\n // TODO(andysoto):\r\n // assert(this.state_ === InternalTaskState.PAUSED ||\r\n // this.state_ === InternalTaskState.PAUSING);\r\n var wasPaused = this.state_ === InternalTaskState.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 InternalTaskState.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 InternalTaskState.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 InternalTaskState.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 InternalTaskState.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 InternalTaskState.PAUSING:\r\n this.transition_(InternalTaskState.PAUSED);\r\n break;\r\n case InternalTaskState.CANCELING:\r\n this.transition_(InternalTaskState.CANCELED);\r\n break;\r\n case InternalTaskState.RUNNING:\r\n this.start_();\r\n break;\r\n }\r\n };\r\n Object.defineProperty(UploadTask.prototype, \"snapshot\", {\r\n get: function () {\r\n var externalState = taskStateFromInternalTaskState(this.state_);\r\n return new UploadTaskSnapshot(this.transferred_, this.blob_.size(), externalState, this.metadata_, this, this.ref_);\r\n },\r\n enumerable: true,\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 */\r\n UploadTask.prototype.on = function (type, nextOrObserver, error, completed) {\r\n function typeValidator() {\r\n if (type !== TaskEvent.STATE_CHANGED) {\r\n throw \"Expected one of the event types: [\" + TaskEvent.STATE_CHANGED + \"].\";\r\n }\r\n }\r\n var nextOrObserverMessage = 'Expected a function or an Object with one of ' +\r\n '`next`, `error`, `complete` properties.';\r\n var nextValidator = nullFunctionSpec(true).validator;\r\n var observerValidator = looseObjectSpec(null, true).validator;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n function nextOrObserverValidator(p) {\r\n try {\r\n nextValidator(p);\r\n return;\r\n }\r\n catch (e) { }\r\n try {\r\n observerValidator(p);\r\n var anyDefined = isJustDef(p['next']) ||\r\n isJustDef(p['error']) ||\r\n isJustDef(p['complete']);\r\n if (!anyDefined) {\r\n throw '';\r\n }\r\n return;\r\n }\r\n catch (e) {\r\n throw nextOrObserverMessage;\r\n }\r\n }\r\n var specs = [\r\n stringSpec(typeValidator),\r\n looseObjectSpec(nextOrObserverValidator, true),\r\n nullFunctionSpec(true),\r\n nullFunctionSpec(true)\r\n ];\r\n validate('on', specs, arguments);\r\n var self = this;\r\n function makeBinder(specs) {\r\n function binder(nextOrObserver, error, complete) {\r\n if (specs !== null) {\r\n validate('on', specs, arguments);\r\n }\r\n var observer = new Observer(nextOrObserver, error, completed);\r\n self.addObserver_(observer);\r\n return function () {\r\n self.removeObserver_(observer);\r\n };\r\n }\r\n return binder;\r\n }\r\n function binderNextOrObserverValidator(p) {\r\n if (p === null) {\r\n throw nextOrObserverMessage;\r\n }\r\n nextOrObserverValidator(p);\r\n }\r\n var binderSpecs = [\r\n looseObjectSpec(binderNextOrObserverValidator),\r\n nullFunctionSpec(true),\r\n nullFunctionSpec(true)\r\n ];\r\n var typeOnly = !(isJustDef(nextOrObserver) ||\r\n isJustDef(error) ||\r\n isJustDef(completed));\r\n if (typeOnly) {\r\n return makeBinder(binderSpecs);\r\n }\r\n else {\r\n return makeBinder(null)(nextOrObserver, error, completed);\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_ !== null) {\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_ = null;\r\n this.reject_ = null;\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 * @return True if the operation took effect, false if ignored.\r\n */\r\n UploadTask.prototype.resume = function () {\r\n validate('resume', [], arguments);\r\n var valid = this.state_ === InternalTaskState.PAUSED ||\r\n this.state_ === InternalTaskState.PAUSING;\r\n if (valid) {\r\n this.transition_(InternalTaskState.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 * @return True if the operation took effect, false if ignored.\r\n */\r\n UploadTask.prototype.pause = function () {\r\n validate('pause', [], arguments);\r\n var valid = this.state_ === InternalTaskState.RUNNING;\r\n if (valid) {\r\n this.transition_(InternalTaskState.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 * @return True if the operation took effect, false if ignored.\r\n */\r\n UploadTask.prototype.cancel = function () {\r\n validate('cancel', [], arguments);\r\n var valid = this.state_ === InternalTaskState.RUNNING ||\r\n this.state_ === InternalTaskState.PAUSING;\r\n if (valid) {\r\n this.transition_(InternalTaskState.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 Inc.\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 * @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(authWrapper, location) {\r\n this.authWrapper = authWrapper;\r\n if (location instanceof Location) {\r\n this.location = location;\r\n }\r\n else {\r\n this.location = Location.makeFromUrl(location);\r\n }\r\n }\r\n /**\r\n * @return 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 validate('toString', [], arguments);\r\n return 'gs://' + this.location.bucket + '/' + this.location.path;\r\n };\r\n Reference.prototype.newRef = function (authWrapper, location) {\r\n return new Reference(authWrapper, location);\r\n };\r\n Reference.prototype.mappings = function () {\r\n return getMappings();\r\n };\r\n /**\r\n * @return A reference to the object obtained by\r\n * appending childPath, removing any duplicate, beginning, or trailing\r\n * slashes.\r\n */\r\n Reference.prototype.child = function (childPath) {\r\n validate('child', [stringSpec()], arguments);\r\n var newPath = child(this.location.path, childPath);\r\n var location = new Location(this.location.bucket, newPath);\r\n return this.newRef(this.authWrapper, location);\r\n };\r\n Object.defineProperty(Reference.prototype, \"parent\", {\r\n /**\r\n * @return 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 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 this.newRef(this.authWrapper, location);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Reference.prototype, \"root\", {\r\n /**\r\n * @return An reference to the root of this\r\n * object's bucket.\r\n */\r\n get: function () {\r\n var location = new Location(this.location.bucket, '');\r\n return this.newRef(this.authWrapper, location);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Reference.prototype, \"bucket\", {\r\n get: function () {\r\n return this.location.bucket;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Reference.prototype, \"fullPath\", {\r\n get: function () {\r\n return this.location.path;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Reference.prototype, \"name\", {\r\n get: function () {\r\n return lastComponent(this.location.path);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Reference.prototype, \"storage\", {\r\n get: function () {\r\n return this.authWrapper.service();\r\n },\r\n enumerable: true,\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 * @return An UploadTask that lets you control and\r\n * observe the upload.\r\n */\r\n Reference.prototype.put = function (data, metadata) {\r\n if (metadata === void 0) { metadata = null; }\r\n validate('put', [uploadDataSpec(), metadataSpec(true)], arguments);\r\n this.throwIfRoot_('put');\r\n return new UploadTask(this, this.authWrapper, this.location, this.mappings(), new FbsBlob(data), metadata);\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 * @return An UploadTask that lets you control and\r\n * observe the upload.\r\n */\r\n Reference.prototype.putString = function (value, format, metadata) {\r\n if (format === void 0) { format = StringFormat.RAW; }\r\n validate('putString', [stringSpec(), stringSpec(formatValidator, true), metadataSpec(true)], arguments);\r\n this.throwIfRoot_('putString');\r\n var data = dataFromString(format, value);\r\n var metadataClone = Object.assign({}, metadata);\r\n if (!isDef(metadataClone['contentType']) &&\r\n isDef(data.contentType)) {\r\n metadataClone['contentType'] = data.contentType;\r\n }\r\n return new UploadTask(this, this.authWrapper, this.location, this.mappings(), new FbsBlob(data.data, true), metadataClone);\r\n };\r\n /**\r\n * Deletes the object at this location.\r\n * @return A promise that resolves if the deletion succeeds.\r\n */\r\n Reference.prototype.delete = function () {\r\n var _this = this;\r\n validate('delete', [], arguments);\r\n this.throwIfRoot_('delete');\r\n return this.authWrapper.getAuthToken().then(function (authToken) {\r\n var requestInfo = deleteObject(_this.authWrapper, _this.location);\r\n return _this.authWrapper.makeRequest(requestInfo, authToken).getPromise();\r\n });\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 * @return 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 Reference.prototype.listAll = function () {\r\n validate('listAll', [], arguments);\r\n var accumulator = {\r\n prefixes: [],\r\n items: []\r\n };\r\n return this.listAllHelper(accumulator).then(function () { return accumulator; });\r\n };\r\n Reference.prototype.listAllHelper = function (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*/, this.list(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*/, this.listAllHelper(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 *\r\n * @param options See ListOptions for details.\r\n * @return 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 Reference.prototype.list = function (options) {\r\n validate('list', [listOptionSpec(true)], arguments);\r\n var self = this;\r\n return this.authWrapper.getAuthToken().then(function (authToken) {\r\n var op = options || {};\r\n var requestInfo = list(self.authWrapper, self.location, \r\n /*delimiter= */ '/', op.pageToken, op.maxResults);\r\n return self.authWrapper.makeRequest(requestInfo, authToken).getPromise();\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 */\r\n Reference.prototype.getMetadata = function () {\r\n var _this = this;\r\n validate('getMetadata', [], arguments);\r\n this.throwIfRoot_('getMetadata');\r\n return this.authWrapper.getAuthToken().then(function (authToken) {\r\n var requestInfo = getMetadata(_this.authWrapper, _this.location, _this.mappings());\r\n return _this.authWrapper.makeRequest(requestInfo, authToken).getPromise();\r\n });\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 * @return A promise that resolves\r\n * with the new metadata for this object.\r\n * @see firebaseStorage.Reference.prototype.getMetadata\r\n */\r\n Reference.prototype.updateMetadata = function (metadata) {\r\n var _this = this;\r\n validate('updateMetadata', [metadataSpec()], arguments);\r\n this.throwIfRoot_('updateMetadata');\r\n return this.authWrapper.getAuthToken().then(function (authToken) {\r\n var requestInfo = updateMetadata(_this.authWrapper, _this.location, metadata, _this.mappings());\r\n return _this.authWrapper.makeRequest(requestInfo, authToken).getPromise();\r\n });\r\n };\r\n /**\r\n * @return A promise that resolves with the download\r\n * URL for this object.\r\n */\r\n Reference.prototype.getDownloadURL = function () {\r\n var _this = this;\r\n validate('getDownloadURL', [], arguments);\r\n this.throwIfRoot_('getDownloadURL');\r\n return this.authWrapper.getAuthToken().then(function (authToken) {\r\n var requestInfo = getDownloadUrl(_this.authWrapper, _this.location, _this.mappings());\r\n return _this.authWrapper\r\n .makeRequest(requestInfo, authToken)\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 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}());\n\n/**\r\n * A request whose promise always fails.\r\n * @struct\r\n * @template T\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\nvar RequestMap = /** @class */ (function () {\r\n function RequestMap() {\r\n this.map = new Map();\r\n this.id = MIN_SAFE_INTEGER;\r\n }\r\n /**\r\n * Registers the given request with this map.\r\n * The request is unregistered when it completes.\r\n *\r\n * @param request The request to register.\r\n */\r\n RequestMap.prototype.addRequest = function (request) {\r\n var _this = this;\r\n var id = this.id;\r\n this.id++;\r\n this.map.set(id, request);\r\n request.getPromise().then(function () { return _this.map.delete(id); }, function () { return _this.map.delete(id); });\r\n };\r\n /**\r\n * Cancels all registered requests.\r\n */\r\n RequestMap.prototype.clear = function () {\r\n this.map.forEach(function (v) {\r\n v && v.cancel(true);\r\n });\r\n this.map.clear();\r\n };\r\n return RequestMap;\r\n}());\n\n/**\r\n * @param app If null, getAuthToken always resolves with null.\r\n * @param service The storage service associated with this auth wrapper.\r\n * Untyped to avoid circular type dependencies.\r\n * @struct\r\n */\r\nvar AuthWrapper = /** @class */ (function () {\r\n function AuthWrapper(app, authProvider, maker, requestMaker, service, pool) {\r\n this.bucket_ = null;\r\n this.deleted_ = false;\r\n this.app_ = app;\r\n if (this.app_ !== null) {\r\n var options = this.app_.options;\r\n if (isDef(options)) {\r\n this.bucket_ = AuthWrapper.extractBucket_(options);\r\n }\r\n }\r\n this.authProvider_ = authProvider;\r\n this.storageRefMaker_ = maker;\r\n this.requestMaker_ = requestMaker;\r\n this.pool_ = pool;\r\n this.service_ = service;\r\n this.maxOperationRetryTime_ = DEFAULT_MAX_OPERATION_RETRY_TIME;\r\n this.maxUploadRetryTime_ = DEFAULT_MAX_UPLOAD_RETRY_TIME;\r\n this.requestMap_ = new RequestMap();\r\n }\r\n AuthWrapper.extractBucket_ = function (config) {\r\n var bucketString = config[CONFIG_STORAGE_BUCKET_KEY] || null;\r\n if (bucketString == null) {\r\n return null;\r\n }\r\n var loc = Location.makeFromBucketSpec(bucketString);\r\n return loc.bucket;\r\n };\r\n AuthWrapper.prototype.getAuthToken = function () {\r\n var auth = this.authProvider_.getImmediate({ optional: true });\r\n if (auth) {\r\n return auth.getToken().then(function (response) {\r\n if (response !== null) {\r\n return response.accessToken;\r\n }\r\n else {\r\n return null;\r\n }\r\n }, function () { return null; });\r\n }\r\n else {\r\n return Promise.resolve(null);\r\n }\r\n };\r\n AuthWrapper.prototype.bucket = function () {\r\n if (this.deleted_) {\r\n throw appDeleted();\r\n }\r\n else {\r\n return this.bucket_;\r\n }\r\n };\r\n /**\r\n * The service associated with this auth wrapper. Untyped to avoid circular\r\n * type dependencies.\r\n */\r\n AuthWrapper.prototype.service = function () {\r\n return this.service_;\r\n };\r\n /**\r\n * Returns a new firebaseStorage.Reference object referencing this AuthWrapper\r\n * at the given Location.\r\n * @param loc The Location.\r\n * @return Actually a firebaseStorage.Reference, typing not allowed\r\n * because of circular dependency problems.\r\n */\r\n AuthWrapper.prototype.makeStorageReference = function (loc) {\r\n return this.storageRefMaker_(this, loc);\r\n };\r\n AuthWrapper.prototype.makeRequest = function (requestInfo, authToken) {\r\n if (!this.deleted_) {\r\n var request = this.requestMaker_(requestInfo, authToken, this.pool_);\r\n this.requestMap_.addRequest(request);\r\n return request;\r\n }\r\n else {\r\n return new FailRequest(appDeleted());\r\n }\r\n };\r\n /**\r\n * Stop running requests and prevent more from being created.\r\n */\r\n AuthWrapper.prototype.deleteApp = function () {\r\n this.deleted_ = true;\r\n this.app_ = null;\r\n this.requestMap_.clear();\r\n };\r\n AuthWrapper.prototype.maxUploadRetryTime = function () {\r\n return this.maxUploadRetryTime_;\r\n };\r\n AuthWrapper.prototype.setMaxUploadRetryTime = function (time) {\r\n this.maxUploadRetryTime_ = time;\r\n };\r\n AuthWrapper.prototype.maxOperationRetryTime = function () {\r\n return this.maxOperationRetryTime_;\r\n };\r\n AuthWrapper.prototype.setMaxOperationRetryTime = function (time) {\r\n this.maxOperationRetryTime_ = time;\r\n };\r\n return AuthWrapper;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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, callback, 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 // TODO: This disable can be removed and the 'ignoreRestArgs' option added to\r\n // the no-explicit-any rule when ESlint releases it.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\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 // TODO: This disable can be removed and the 'ignoreRestArgs' option added to\r\n // the no-explicit-any rule when ESlint releases it.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\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, __spreadArrays([null, success], args));\r\n return;\r\n }\r\n var mustStop = canceled() || hitTimeout;\r\n if (mustStop) {\r\n triggerCallback.call.apply(triggerCallback, __spreadArrays([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 Inc.\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 * @struct\r\n * @template T\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.pendingXhr_ = null;\r\n this.backoffId_ = null;\r\n this.resolve_ = null;\r\n this.reject_ = 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 xhr = self.pool_.createXhrIo();\r\n self.pendingXhr_ = xhr;\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 xhr.addUploadProgressListener(progressListener);\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n xhr\r\n .send(self.url_, self.method_, self.body_, self.headers_)\r\n .then(function (xhr) {\r\n if (self.progressCallback_ !== null) {\r\n xhr.removeUploadProgressListener(progressListener);\r\n }\r\n self.pendingXhr_ = null;\r\n xhr = xhr;\r\n var hitServer = xhr.getErrorCode() === ErrorCode.NO_ERROR;\r\n var status = xhr.getStatus();\r\n if (!hitServer || self.isRetryStatusCode_(status)) {\r\n var wasCanceled = xhr.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, xhr));\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 xhr = status.xhr;\r\n if (status.wasSuccessCode) {\r\n try {\r\n var result = self.callback_(xhr, xhr.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 (xhr !== null) {\r\n var err = unknown();\r\n err.setServerResponseProp(xhr.getResponseText());\r\n if (self.errorCallback_) {\r\n reject(self.errorCallback_(xhr, 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.pendingXhr_ !== null) {\r\n this.pendingXhr_.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 * @struct\r\n */\r\nvar RequestEndStatus = /** @class */ (function () {\r\n function RequestEndStatus(wasSuccessCode, xhr, canceled) {\r\n this.wasSuccessCode = wasSuccessCode;\r\n this.xhr = xhr;\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) {\r\n var version = typeof firebase !== 'undefined' ? firebase.SDK_VERSION : 'AppManager';\r\n headers['X-Firebase-Storage-Version'] = 'webjs/' + version;\r\n}\r\n/**\r\n * @template T\r\n */\r\nfunction makeRequest(requestInfo, authToken, pool) {\r\n var queryPart = makeQueryString(requestInfo.urlParams);\r\n var url = requestInfo.url + queryPart;\r\n var headers = Object.assign({}, requestInfo.headers);\r\n addAuthHeader_(headers, authToken);\r\n addVersionHeader_(headers);\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 Inc.\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\n * @struct\r\n */\r\nvar Service = /** @class */ (function () {\r\n function Service(app, authProvider, pool, url) {\r\n this.bucket_ = null;\r\n function maker(authWrapper, loc) {\r\n return new Reference(authWrapper, loc);\r\n }\r\n this.authWrapper_ = new AuthWrapper(app, authProvider, maker, makeRequest, this, pool);\r\n this.app_ = app;\r\n if (url != null) {\r\n this.bucket_ = Location.makeFromBucketSpec(url);\r\n }\r\n else {\r\n var authWrapperBucket = this.authWrapper_.bucket();\r\n if (authWrapperBucket != null) {\r\n this.bucket_ = new Location(authWrapperBucket, '');\r\n }\r\n }\r\n this.internals_ = new ServiceInternals(this);\r\n }\r\n /**\r\n * Returns a firebaseStorage.Reference for the given path in the default\r\n * bucket.\r\n */\r\n Service.prototype.ref = function (path) {\r\n function validator(path) {\r\n if (typeof path !== 'string') {\r\n throw 'Path is not a string.';\r\n }\r\n if (/^[A-Za-z]+:\\/\\//.test(path)) {\r\n throw 'Expected child path but got a URL, use refFromURL instead.';\r\n }\r\n }\r\n validate('ref', [stringSpec(validator, true)], arguments);\r\n if (this.bucket_ == null) {\r\n throw new Error('No Storage Bucket defined in Firebase Options.');\r\n }\r\n var ref = new Reference(this.authWrapper_, this.bucket_);\r\n if (path != null) {\r\n return ref.child(path);\r\n }\r\n else {\r\n return ref;\r\n }\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 Service.prototype.refFromURL = function (url) {\r\n function validator(p) {\r\n if (typeof p !== 'string') {\r\n throw 'Path is not a string.';\r\n }\r\n if (!/^[A-Za-z]+:\\/\\//.test(p)) {\r\n throw 'Expected full URL but got a child path, use ref instead.';\r\n }\r\n try {\r\n Location.makeFromUrl(p);\r\n }\r\n catch (e) {\r\n throw 'Expected valid full URL but got an invalid one.';\r\n }\r\n }\r\n validate('refFromURL', [stringSpec(validator, false)], arguments);\r\n return new Reference(this.authWrapper_, url);\r\n };\r\n Object.defineProperty(Service.prototype, \"maxUploadRetryTime\", {\r\n get: function () {\r\n return this.authWrapper_.maxUploadRetryTime();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Service.prototype.setMaxUploadRetryTime = function (time) {\r\n validate('setMaxUploadRetryTime', [nonNegativeNumberSpec()], arguments);\r\n this.authWrapper_.setMaxUploadRetryTime(time);\r\n };\r\n Service.prototype.setMaxOperationRetryTime = function (time) {\r\n validate('setMaxOperationRetryTime', [nonNegativeNumberSpec()], arguments);\r\n this.authWrapper_.setMaxOperationRetryTime(time);\r\n };\r\n Object.defineProperty(Service.prototype, \"app\", {\r\n get: function () {\r\n return this.app_;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Service.prototype, \"INTERNAL\", {\r\n get: function () {\r\n return this.internals_;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Service;\r\n}());\r\n/**\r\n * @struct\r\n */\r\nvar ServiceInternals = /** @class */ (function () {\r\n function ServiceInternals(service) {\r\n this.service_ = service;\r\n }\r\n /**\r\n * Called when the associated app is deleted.\r\n * @see {!fbs.AuthWrapper.prototype.deleteApp}\r\n */\r\n ServiceInternals.prototype.delete = function () {\r\n this.service_.authWrapper_.deleteApp();\r\n return Promise.resolve();\r\n };\r\n return ServiceInternals;\r\n}());\n\nvar name = \"@firebase/storage\";\nvar version = \"0.3.26\";\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\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, url) {\r\n // Dependencies\r\n var app = container.getProvider('app').getImmediate();\r\n var authProvider = container.getProvider('auth-internal');\r\n return new Service(app, authProvider, new XhrIoPool(), url);\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: Service,\r\n Reference: Reference\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.esm.js.map\n"],"sourceRoot":""}