{"version":3,"file":"index.esm2017.js","sources":["../src/implementation/constants.ts","../src/implementation/error.ts","../src/implementation/string.ts","../src/implementation/taskenums.ts","../src/implementation/type.ts","../src/implementation/xhrio.ts","../src/implementation/xhrio_network.ts","../src/implementation/xhriopool.ts","../src/implementation/fs.ts","../src/implementation/blob.ts","../src/implementation/location.ts","../src/implementation/json.ts","../src/implementation/path.ts","../src/implementation/url.ts","../src/implementation/metadata.ts","../src/implementation/list.ts","../src/implementation/requestinfo.ts","../src/implementation/requests.ts","../src/implementation/observer.ts","../src/tasksnapshot.ts","../src/implementation/args.ts","../src/implementation/async.ts","../src/task.ts","../src/reference.ts","../src/implementation/failrequest.ts","../src/implementation/requestmap.ts","../src/implementation/authwrapper.ts","../src/implementation/backoff.ts","../src/implementation/request.ts","../src/service.ts","../index.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Constants used in the Firebase Storage library.\n */\n\n/**\n * Domain name for firebase storage.\n */\nexport const DEFAULT_HOST = 'firebasestorage.googleapis.com';\n\n/**\n * The key in Firebase config json for the storage bucket.\n */\nexport const CONFIG_STORAGE_BUCKET_KEY = 'storageBucket';\n\n/**\n * 2 minutes\n *\n * The timeout for all operations except upload.\n */\nexport const DEFAULT_MAX_OPERATION_RETRY_TIME = 2 * 60 * 1000;\n\n/**\n * 10 minutes\n *\n * The timeout for upload.\n */\nexport const DEFAULT_MAX_UPLOAD_RETRY_TIME = 10 * 60 * 1000;\n\n/**\n * This is the value of Number.MIN_SAFE_INTEGER, which is not well supported\n * enough for us to use it directly.\n */\nexport const MIN_SAFE_INTEGER = -9007199254740991;\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { CONFIG_STORAGE_BUCKET_KEY } from './constants';\n\nexport class FirebaseStorageError implements Error {\n private code_: string;\n private message_: string;\n private serverResponse_: string | null;\n private name_: string;\n\n constructor(code: Code, message: string) {\n this.code_ = prependCode(code);\n this.message_ = 'Firebase Storage: ' + message;\n this.serverResponse_ = null;\n this.name_ = 'FirebaseError';\n }\n\n codeProp(): string {\n return this.code;\n }\n\n codeEquals(code: Code): boolean {\n return prependCode(code) === this.codeProp();\n }\n\n serverResponseProp(): string | null {\n return this.serverResponse_;\n }\n\n setServerResponseProp(serverResponse: string | null): void {\n this.serverResponse_ = serverResponse;\n }\n\n get name(): string {\n return this.name_;\n }\n\n get code(): string {\n return this.code_;\n }\n\n get message(): string {\n return this.message_;\n }\n\n get serverResponse(): null | string {\n return this.serverResponse_;\n }\n}\n\nexport const errors = {};\n\n/**\n * @enum {string}\n */\nexport type Code = string;\nexport const Code = {\n // Shared between all platforms\n UNKNOWN: 'unknown',\n OBJECT_NOT_FOUND: 'object-not-found',\n BUCKET_NOT_FOUND: 'bucket-not-found',\n PROJECT_NOT_FOUND: 'project-not-found',\n QUOTA_EXCEEDED: 'quota-exceeded',\n UNAUTHENTICATED: 'unauthenticated',\n UNAUTHORIZED: 'unauthorized',\n RETRY_LIMIT_EXCEEDED: 'retry-limit-exceeded',\n INVALID_CHECKSUM: 'invalid-checksum',\n CANCELED: 'canceled',\n // JS specific\n INVALID_EVENT_NAME: 'invalid-event-name',\n INVALID_URL: 'invalid-url',\n INVALID_DEFAULT_BUCKET: 'invalid-default-bucket',\n NO_DEFAULT_BUCKET: 'no-default-bucket',\n CANNOT_SLICE_BLOB: 'cannot-slice-blob',\n SERVER_FILE_WRONG_SIZE: 'server-file-wrong-size',\n NO_DOWNLOAD_URL: 'no-download-url',\n INVALID_ARGUMENT: 'invalid-argument',\n INVALID_ARGUMENT_COUNT: 'invalid-argument-count',\n APP_DELETED: 'app-deleted',\n INVALID_ROOT_OPERATION: 'invalid-root-operation',\n INVALID_FORMAT: 'invalid-format',\n INTERNAL_ERROR: 'internal-error'\n};\n\nexport function prependCode(code: Code): string {\n return 'storage/' + code;\n}\n\nexport function unknown(): FirebaseStorageError {\n const message =\n 'An unknown error occurred, please check the error payload for ' +\n 'server response.';\n return new FirebaseStorageError(Code.UNKNOWN, message);\n}\n\nexport function objectNotFound(path: string): FirebaseStorageError {\n return new FirebaseStorageError(\n Code.OBJECT_NOT_FOUND,\n \"Object '\" + path + \"' does not exist.\"\n );\n}\n\nexport function bucketNotFound(bucket: string): FirebaseStorageError {\n return new FirebaseStorageError(\n Code.BUCKET_NOT_FOUND,\n \"Bucket '\" + bucket + \"' does not exist.\"\n );\n}\n\nexport function projectNotFound(project: string): FirebaseStorageError {\n return new FirebaseStorageError(\n Code.PROJECT_NOT_FOUND,\n \"Project '\" + project + \"' does not exist.\"\n );\n}\n\nexport function quotaExceeded(bucket: string): FirebaseStorageError {\n return new FirebaseStorageError(\n Code.QUOTA_EXCEEDED,\n \"Quota for bucket '\" +\n bucket +\n \"' exceeded, please view quota on \" +\n 'https://firebase.google.com/pricing/.'\n );\n}\n\nexport function unauthenticated(): FirebaseStorageError {\n const message =\n 'User is not authenticated, please authenticate using Firebase ' +\n 'Authentication and try again.';\n return new FirebaseStorageError(Code.UNAUTHENTICATED, message);\n}\n\nexport function unauthorized(path: string): FirebaseStorageError {\n return new FirebaseStorageError(\n Code.UNAUTHORIZED,\n \"User does not have permission to access '\" + path + \"'.\"\n );\n}\n\nexport function retryLimitExceeded(): FirebaseStorageError {\n return new FirebaseStorageError(\n Code.RETRY_LIMIT_EXCEEDED,\n 'Max retry time for operation exceeded, please try again.'\n );\n}\n\nexport function invalidChecksum(\n path: string,\n checksum: string,\n calculated: string\n): FirebaseStorageError {\n return new FirebaseStorageError(\n Code.INVALID_CHECKSUM,\n \"Uploaded/downloaded object '\" +\n path +\n \"' has checksum '\" +\n checksum +\n \"' which does not match '\" +\n calculated +\n \"'. Please retry the upload/download.\"\n );\n}\n\nexport function canceled(): FirebaseStorageError {\n return new FirebaseStorageError(\n Code.CANCELED,\n 'User canceled the upload/download.'\n );\n}\n\nexport function invalidEventName(name: string): FirebaseStorageError {\n return new FirebaseStorageError(\n Code.INVALID_EVENT_NAME,\n \"Invalid event name '\" + name + \"'.\"\n );\n}\n\nexport function invalidUrl(url: string): FirebaseStorageError {\n return new FirebaseStorageError(\n Code.INVALID_URL,\n \"Invalid URL '\" + url + \"'.\"\n );\n}\n\nexport function invalidDefaultBucket(bucket: string): FirebaseStorageError {\n return new FirebaseStorageError(\n Code.INVALID_DEFAULT_BUCKET,\n \"Invalid default bucket '\" + bucket + \"'.\"\n );\n}\n\nexport function noDefaultBucket(): FirebaseStorageError {\n return new FirebaseStorageError(\n Code.NO_DEFAULT_BUCKET,\n 'No default bucket ' +\n \"found. Did you set the '\" +\n CONFIG_STORAGE_BUCKET_KEY +\n \"' property when initializing the app?\"\n );\n}\n\nexport function cannotSliceBlob(): FirebaseStorageError {\n return new FirebaseStorageError(\n Code.CANNOT_SLICE_BLOB,\n 'Cannot slice blob for upload. Please retry the upload.'\n );\n}\n\nexport function serverFileWrongSize(): FirebaseStorageError {\n return new FirebaseStorageError(\n Code.SERVER_FILE_WRONG_SIZE,\n 'Server recorded incorrect upload file size, please retry the upload.'\n );\n}\n\nexport function noDownloadURL(): FirebaseStorageError {\n return new FirebaseStorageError(\n Code.NO_DOWNLOAD_URL,\n 'The given file does not have any download URLs.'\n );\n}\n\nexport function invalidArgument(\n index: number,\n fnName: string,\n message: string\n): FirebaseStorageError {\n return new FirebaseStorageError(\n Code.INVALID_ARGUMENT,\n 'Invalid argument in `' + fnName + '` at index ' + index + ': ' + message\n );\n}\n\nexport function invalidArgumentCount(\n argMin: number,\n argMax: number,\n fnName: string,\n real: number\n): FirebaseStorageError {\n let countPart;\n let plural;\n if (argMin === argMax) {\n countPart = argMin;\n plural = argMin === 1 ? 'argument' : 'arguments';\n } else {\n countPart = 'between ' + argMin + ' and ' + argMax;\n plural = 'arguments';\n }\n return new FirebaseStorageError(\n Code.INVALID_ARGUMENT_COUNT,\n 'Invalid argument count in `' +\n fnName +\n '`: Expected ' +\n countPart +\n ' ' +\n plural +\n ', received ' +\n real +\n '.'\n );\n}\n\nexport function appDeleted(): FirebaseStorageError {\n return new FirebaseStorageError(\n Code.APP_DELETED,\n 'The Firebase app was deleted.'\n );\n}\n\n/**\n * @param name The name of the operation that was invalid.\n */\nexport function invalidRootOperation(name: string): FirebaseStorageError {\n return new FirebaseStorageError(\n Code.INVALID_ROOT_OPERATION,\n \"The operation '\" +\n name +\n \"' cannot be performed on a root reference, create a non-root \" +\n \"reference using child, such as .child('file.png').\"\n );\n}\n\n/**\n * @param format The format that was not valid.\n * @param message A message describing the format violation.\n */\nexport function invalidFormat(\n format: string,\n message: string\n): FirebaseStorageError {\n return new FirebaseStorageError(\n Code.INVALID_FORMAT,\n \"String does not match format '\" + format + \"': \" + message\n );\n}\n\n/**\n * @param message A message describing the internal error.\n */\nexport function internalError(message: string): FirebaseStorageError {\n throw new FirebaseStorageError(\n Code.INTERNAL_ERROR,\n 'Internal error: ' + message\n );\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as errorsExports from './error';\n\n/**\n * @enum {string}\n */\nexport type StringFormat = string;\nexport const StringFormat = {\n RAW: 'raw',\n BASE64: 'base64',\n BASE64URL: 'base64url',\n DATA_URL: 'data_url'\n};\n\nexport function formatValidator(stringFormat: unknown): void {\n switch (stringFormat) {\n case StringFormat.RAW:\n case StringFormat.BASE64:\n case StringFormat.BASE64URL:\n case StringFormat.DATA_URL:\n return;\n default:\n throw (\n 'Expected one of the event types: [' +\n StringFormat.RAW +\n ', ' +\n StringFormat.BASE64 +\n ', ' +\n StringFormat.BASE64URL +\n ', ' +\n StringFormat.DATA_URL +\n '].'\n );\n }\n}\n\n/**\n * @struct\n */\nexport class StringData {\n contentType: string | null;\n\n constructor(public data: Uint8Array, contentType?: string | null) {\n this.contentType = contentType || null;\n }\n}\n\nexport function dataFromString(\n format: StringFormat,\n stringData: string\n): StringData {\n switch (format) {\n case StringFormat.RAW:\n return new StringData(utf8Bytes_(stringData));\n case StringFormat.BASE64:\n case StringFormat.BASE64URL:\n return new StringData(base64Bytes_(format, stringData));\n case StringFormat.DATA_URL:\n return new StringData(\n dataURLBytes_(stringData),\n dataURLContentType_(stringData)\n );\n default:\n // do nothing\n }\n\n // assert(false);\n throw errorsExports.unknown();\n}\n\nexport function utf8Bytes_(value: string): Uint8Array {\n const b: number[] = [];\n for (let i = 0; i < value.length; i++) {\n let c = value.charCodeAt(i);\n if (c <= 127) {\n b.push(c);\n } else {\n if (c <= 2047) {\n b.push(192 | (c >> 6), 128 | (c & 63));\n } else {\n if ((c & 64512) === 55296) {\n // The start of a surrogate pair.\n const valid =\n i < value.length - 1 && (value.charCodeAt(i + 1) & 64512) === 56320;\n if (!valid) {\n // The second surrogate wasn't there.\n b.push(239, 191, 189);\n } else {\n const hi = c;\n const lo = value.charCodeAt(++i);\n c = 65536 | ((hi & 1023) << 10) | (lo & 1023);\n b.push(\n 240 | (c >> 18),\n 128 | ((c >> 12) & 63),\n 128 | ((c >> 6) & 63),\n 128 | (c & 63)\n );\n }\n } else {\n if ((c & 64512) === 56320) {\n // Invalid low surrogate.\n b.push(239, 191, 189);\n } else {\n b.push(224 | (c >> 12), 128 | ((c >> 6) & 63), 128 | (c & 63));\n }\n }\n }\n }\n }\n return new Uint8Array(b);\n}\n\nexport function percentEncodedBytes_(value: string): Uint8Array {\n let decoded;\n try {\n decoded = decodeURIComponent(value);\n } catch (e) {\n throw errorsExports.invalidFormat(\n StringFormat.DATA_URL,\n 'Malformed data URL.'\n );\n }\n return utf8Bytes_(decoded);\n}\n\nexport function base64Bytes_(format: StringFormat, value: string): Uint8Array {\n switch (format) {\n case StringFormat.BASE64: {\n const hasMinus = value.indexOf('-') !== -1;\n const hasUnder = value.indexOf('_') !== -1;\n if (hasMinus || hasUnder) {\n const invalidChar = hasMinus ? '-' : '_';\n throw errorsExports.invalidFormat(\n format,\n \"Invalid character '\" +\n invalidChar +\n \"' found: is it base64url encoded?\"\n );\n }\n break;\n }\n case StringFormat.BASE64URL: {\n const hasPlus = value.indexOf('+') !== -1;\n const hasSlash = value.indexOf('/') !== -1;\n if (hasPlus || hasSlash) {\n const invalidChar = hasPlus ? '+' : '/';\n throw errorsExports.invalidFormat(\n format,\n \"Invalid character '\" + invalidChar + \"' found: is it base64 encoded?\"\n );\n }\n value = value.replace(/-/g, '+').replace(/_/g, '/');\n break;\n }\n default:\n // do nothing\n }\n let bytes;\n try {\n bytes = atob(value);\n } catch (e) {\n throw errorsExports.invalidFormat(format, 'Invalid character found');\n }\n const array = new Uint8Array(bytes.length);\n for (let i = 0; i < bytes.length; i++) {\n array[i] = bytes.charCodeAt(i);\n }\n return array;\n}\n\n/**\n * @struct\n */\nclass DataURLParts {\n base64: boolean = false;\n contentType: string | null = null;\n rest: string;\n\n constructor(dataURL: string) {\n const matches = dataURL.match(/^data:([^,]+)?,/);\n if (matches === null) {\n throw errorsExports.invalidFormat(\n StringFormat.DATA_URL,\n \"Must be formatted 'data:[][;base64],\"\n );\n }\n const middle = matches[1] || null;\n if (middle != null) {\n this.base64 = endsWith(middle, ';base64');\n this.contentType = this.base64\n ? middle.substring(0, middle.length - ';base64'.length)\n : middle;\n }\n this.rest = dataURL.substring(dataURL.indexOf(',') + 1);\n }\n}\n\nexport function dataURLBytes_(dataUrl: string): Uint8Array {\n const parts = new DataURLParts(dataUrl);\n if (parts.base64) {\n return base64Bytes_(StringFormat.BASE64, parts.rest);\n } else {\n return percentEncodedBytes_(parts.rest);\n }\n}\n\nexport function dataURLContentType_(dataUrl: string): string | null {\n const parts = new DataURLParts(dataUrl);\n return parts.contentType;\n}\n\nfunction endsWith(s: string, end: string): boolean {\n const longEnough = s.length >= end.length;\n if (!longEnough) {\n return false;\n }\n\n return s.substring(s.length - end.length) === end;\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Enumerations used for upload tasks.\n */\n\n/**\n * Enum for task events.\n * @enum {string}\n */\nexport type TaskEvent = string;\nexport const TaskEvent = {\n /** Triggered whenever the task changes or progress is updated. */\n STATE_CHANGED: 'state_changed'\n};\n\n/**\n * Internal enum for task state.\n * @enum {string}\n */\nexport type InternalTaskState = string;\nexport const InternalTaskState = {\n RUNNING: 'running',\n PAUSING: 'pausing',\n PAUSED: 'paused',\n SUCCESS: 'success',\n CANCELING: 'canceling',\n CANCELED: 'canceled',\n ERROR: 'error'\n};\n\n/**\n * External (API-surfaced) enum for task state.\n * @enum {string}\n */\nexport type TaskState = string;\nexport const TaskState = {\n /** The task is currently transferring data. */\n RUNNING: 'running',\n /** The task was paused by the user. */\n PAUSED: 'paused',\n /** The task completed successfully. */\n SUCCESS: 'success',\n /** The task was canceled. */\n CANCELED: 'canceled',\n /** The task failed with an error. */\n ERROR: 'error'\n};\n\nexport function taskStateFromInternalTaskState(\n state: InternalTaskState\n): TaskState {\n switch (state) {\n case InternalTaskState.RUNNING:\n case InternalTaskState.PAUSING:\n case InternalTaskState.CANCELING:\n return TaskState.RUNNING;\n case InternalTaskState.PAUSED:\n return TaskState.PAUSED;\n case InternalTaskState.SUCCESS:\n return TaskState.SUCCESS;\n case InternalTaskState.CANCELED:\n return TaskState.CANCELED;\n case InternalTaskState.ERROR:\n return TaskState.ERROR;\n default:\n // TODO(andysoto): assert(false);\n return TaskState.ERROR;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @return False if the object is undefined or null, true otherwise.\n */\nexport function isDef(p: T | null | undefined): p is T {\n return p != null;\n}\n\nexport function isJustDef(p: T | null | undefined): p is T | null {\n return p !== void 0;\n}\n\nexport function isFunction(p: unknown): p is Function {\n return typeof p === 'function';\n}\n\nexport function isObject(p: unknown): p is { [key: string]: unknown } | null {\n return typeof p === 'object';\n}\n\nexport function isNonNullObject(p: unknown): p is object {\n return isObject(p) && p !== null;\n}\n\nexport function isNonArrayObject(p: unknown): boolean {\n return isObject(p) && !Array.isArray(p);\n}\n\nexport function isString(p: unknown): p is string {\n return typeof p === 'string' || p instanceof String;\n}\n\nexport function isInteger(p: unknown): p is number {\n return isNumber(p) && Number.isInteger(p);\n}\n\nexport function isNumber(p: unknown): p is number {\n return typeof p === 'number' || p instanceof Number;\n}\n\nexport function isNativeBlob(p: unknown): p is Blob {\n return isNativeBlobDefined() && p instanceof Blob;\n}\n\nexport function isNativeBlobDefined(): boolean {\n return typeof Blob !== 'undefined';\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview A lightweight wrapper around XMLHttpRequest with a\n * goog.net.XhrIo-like interface.\n */\n\nexport interface Headers {\n [name: string]: string | number;\n}\n\nexport interface XhrIo {\n send(\n url: string,\n method: string,\n body?: ArrayBufferView | Blob | string | null,\n headers?: Headers\n ): Promise;\n\n getErrorCode(): ErrorCode;\n\n getStatus(): number;\n\n getResponseText(): string;\n\n /**\n * Abort the request.\n */\n abort(): void;\n\n getResponseHeader(header: string): string | null;\n\n addUploadProgressListener(listener: (p1: ProgressEvent) => void): void;\n\n removeUploadProgressListener(listener: (p1: ProgressEvent) => void): void;\n}\n\n/**\n * @enum{number}\n */\nexport enum ErrorCode {\n NO_ERROR = 0,\n NETWORK_ERROR = 1,\n ABORT = 2\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as errorsExports from './error';\nimport * as type from './type';\nimport { Headers, XhrIo, ErrorCode } from './xhrio';\n\n/**\n * We use this instead of goog.net.XhrIo because goog.net.XhrIo is hyuuuuge and\n * doesn't work in React Native on Android.\n */\nexport class NetworkXhrIo implements XhrIo {\n private xhr_: XMLHttpRequest;\n private errorCode_: ErrorCode;\n private sendPromise_: Promise;\n private sent_: boolean = false;\n\n constructor() {\n this.xhr_ = new XMLHttpRequest();\n this.errorCode_ = ErrorCode.NO_ERROR;\n this.sendPromise_ = new Promise(resolve => {\n this.xhr_.addEventListener('abort', () => {\n this.errorCode_ = ErrorCode.ABORT;\n resolve(this);\n });\n this.xhr_.addEventListener('error', () => {\n this.errorCode_ = ErrorCode.NETWORK_ERROR;\n resolve(this);\n });\n this.xhr_.addEventListener('load', () => {\n resolve(this);\n });\n });\n }\n\n /**\n * @override\n */\n send(\n url: string,\n method: string,\n body?: ArrayBufferView | Blob | string | null,\n headers?: Headers\n ): Promise {\n if (this.sent_) {\n throw errorsExports.internalError('cannot .send() more than once');\n }\n this.sent_ = true;\n this.xhr_.open(method, url, true);\n if (type.isDef(headers)) {\n for (const key in headers) {\n if (headers.hasOwnProperty(key)) {\n this.xhr_.setRequestHeader(key, headers[key].toString());\n }\n }\n }\n if (type.isDef(body)) {\n this.xhr_.send(body);\n } else {\n this.xhr_.send();\n }\n return this.sendPromise_;\n }\n\n /**\n * @override\n */\n getErrorCode(): ErrorCode {\n if (!this.sent_) {\n throw errorsExports.internalError(\n 'cannot .getErrorCode() before sending'\n );\n }\n return this.errorCode_;\n }\n\n /**\n * @override\n */\n getStatus(): number {\n if (!this.sent_) {\n throw errorsExports.internalError('cannot .getStatus() before sending');\n }\n try {\n return this.xhr_.status;\n } catch (e) {\n return -1;\n }\n }\n\n /**\n * @override\n */\n getResponseText(): string {\n if (!this.sent_) {\n throw errorsExports.internalError(\n 'cannot .getResponseText() before sending'\n );\n }\n return this.xhr_.responseText;\n }\n\n /**\n * Aborts the request.\n * @override\n */\n abort(): void {\n this.xhr_.abort();\n }\n\n /**\n * @override\n */\n getResponseHeader(header: string): string | null {\n return this.xhr_.getResponseHeader(header);\n }\n\n /**\n * @override\n */\n addUploadProgressListener(listener: (p1: ProgressEvent) => void): void {\n if (type.isDef(this.xhr_.upload)) {\n this.xhr_.upload.addEventListener('progress', listener);\n }\n }\n\n /**\n * @override\n */\n removeUploadProgressListener(listener: (p1: ProgressEvent) => void): void {\n if (type.isDef(this.xhr_.upload)) {\n this.xhr_.upload.removeEventListener('progress', listener);\n }\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Replacement for goog.net.XhrIoPool that works with fbs.XhrIo.\n */\nimport { XhrIo } from './xhrio';\nimport { NetworkXhrIo } from './xhrio_network';\n\n/**\n * Factory-like class for creating XhrIo instances.\n */\nexport class XhrIoPool {\n createXhrIo(): XhrIo {\n return new NetworkXhrIo();\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Some methods copied from goog.fs.\n * We don't include goog.fs because it pulls in a bunch of Deferred code that\n * bloats the size of the released binary.\n */\nimport * as type from './type';\n\nfunction getBlobBuilder(): typeof IBlobBuilder | undefined {\n if (typeof BlobBuilder !== 'undefined') {\n return BlobBuilder;\n } else if (typeof WebKitBlobBuilder !== 'undefined') {\n return WebKitBlobBuilder;\n } else {\n return undefined;\n }\n}\n\n/**\n * Concatenates one or more values together and converts them to a Blob.\n *\n * @param args The values that will make up the resulting blob.\n * @return The blob.\n */\nexport function getBlob(...args: Array): Blob {\n const BlobBuilder = getBlobBuilder();\n if (BlobBuilder !== undefined) {\n const bb = new BlobBuilder();\n for (let i = 0; i < args.length; i++) {\n bb.append(args[i]);\n }\n return bb.getBlob();\n } else {\n if (type.isNativeBlobDefined()) {\n return new Blob(args);\n } else {\n throw Error(\"This browser doesn't seem to support creating Blobs\");\n }\n }\n}\n\n/**\n * Slices the blob. The returned blob contains data from the start byte\n * (inclusive) till the end byte (exclusive). Negative indices cannot be used.\n *\n * @param blob The blob to be sliced.\n * @param start Index of the starting byte.\n * @param end Index of the ending byte.\n * @return The blob slice or null if not supported.\n */\nexport function sliceBlob(blob: Blob, start: number, end: number): Blob | null {\n if (blob.webkitSlice) {\n return blob.webkitSlice(start, end);\n } else if (blob.mozSlice) {\n return blob.mozSlice(start, end);\n } else if (blob.slice) {\n return blob.slice(start, end);\n }\n return null;\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @file Provides a Blob-like wrapper for various binary types (including the\n * native Blob type). This makes it possible to upload types like ArrayBuffers,\n * making uploads possible in environments without the native Blob type.\n */\nimport * as fs from './fs';\nimport { StringFormat, dataFromString } from './string';\nimport * as type from './type';\n\n/**\n * @param opt_elideCopy If true, doesn't copy mutable input data\n * (e.g. Uint8Arrays). Pass true only if you know the objects will not be\n * modified after this blob's construction.\n */\nexport class FbsBlob {\n private data_!: Blob | Uint8Array;\n private size_: number;\n private type_: string;\n\n constructor(data: Blob | Uint8Array | ArrayBuffer, elideCopy?: boolean) {\n let size: number = 0;\n let blobType: string = '';\n if (type.isNativeBlob(data)) {\n this.data_ = data as Blob;\n size = (data as Blob).size;\n blobType = (data as Blob).type;\n } else if (data instanceof ArrayBuffer) {\n if (elideCopy) {\n this.data_ = new Uint8Array(data);\n } else {\n this.data_ = new Uint8Array(data.byteLength);\n this.data_.set(new Uint8Array(data));\n }\n size = this.data_.length;\n } else if (data instanceof Uint8Array) {\n if (elideCopy) {\n this.data_ = data as Uint8Array;\n } else {\n this.data_ = new Uint8Array(data.length);\n this.data_.set(data as Uint8Array);\n }\n size = data.length;\n }\n this.size_ = size;\n this.type_ = blobType;\n }\n\n size(): number {\n return this.size_;\n }\n\n type(): string {\n return this.type_;\n }\n\n slice(startByte: number, endByte: number): FbsBlob | null {\n if (type.isNativeBlob(this.data_)) {\n const realBlob = this.data_ as Blob;\n const sliced = fs.sliceBlob(realBlob, startByte, endByte);\n if (sliced === null) {\n return null;\n }\n return new FbsBlob(sliced);\n } else {\n const slice = new Uint8Array(\n (this.data_ as Uint8Array).buffer,\n startByte,\n endByte - startByte\n );\n return new FbsBlob(slice, true);\n }\n }\n\n static getBlob(...args: Array): FbsBlob | null {\n if (type.isNativeBlobDefined()) {\n const blobby: Array = args.map(\n (val: string | FbsBlob): Blob | Uint8Array | string => {\n if (val instanceof FbsBlob) {\n return val.data_;\n } else {\n return val;\n }\n }\n );\n return new FbsBlob(fs.getBlob.apply(null, blobby));\n } else {\n const uint8Arrays: Uint8Array[] = args.map(\n (val: string | FbsBlob): Uint8Array => {\n if (type.isString(val)) {\n return dataFromString(StringFormat.RAW, val as string).data;\n } else {\n // Blobs don't exist, so this has to be a Uint8Array.\n return (val as FbsBlob).data_ as Uint8Array;\n }\n }\n );\n let finalLength = 0;\n uint8Arrays.forEach((array: Uint8Array): void => {\n finalLength += array.byteLength;\n });\n const merged = new Uint8Array(finalLength);\n let index = 0;\n uint8Arrays.forEach((array: Uint8Array) => {\n for (let i = 0; i < array.length; i++) {\n merged[index++] = array[i];\n }\n });\n return new FbsBlob(merged, true);\n }\n }\n\n uploadData(): Blob | Uint8Array {\n return this.data_;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Functionality related to the parsing/composition of bucket/\n * object location.\n */\nimport * as errorsExports from './error';\nimport { DEFAULT_HOST } from './constants';\n\n/**\n * @struct\n */\nexport class Location {\n private path_: string;\n\n constructor(public readonly bucket: string, path: string) {\n this.path_ = path;\n }\n\n get path(): string {\n return this.path_;\n }\n\n get isRoot(): boolean {\n return this.path.length === 0;\n }\n\n fullServerUrl(): string {\n const encode = encodeURIComponent;\n return '/b/' + encode(this.bucket) + '/o/' + encode(this.path);\n }\n\n bucketOnlyServerUrl(): string {\n const encode = encodeURIComponent;\n return '/b/' + encode(this.bucket) + '/o';\n }\n\n static makeFromBucketSpec(bucketString: string): Location {\n let bucketLocation;\n try {\n bucketLocation = Location.makeFromUrl(bucketString);\n } catch (e) {\n // Not valid URL, use as-is. This lets you put bare bucket names in\n // config.\n return new Location(bucketString, '');\n }\n if (bucketLocation.path === '') {\n return bucketLocation;\n } else {\n throw errorsExports.invalidDefaultBucket(bucketString);\n }\n }\n\n static makeFromUrl(url: string): Location {\n let location: Location | null = null;\n const bucketDomain = '([A-Za-z0-9.\\\\-_]+)';\n\n function gsModify(loc: Location): void {\n if (loc.path.charAt(loc.path.length - 1) === '/') {\n loc.path_ = loc.path_.slice(0, -1);\n }\n }\n const gsPath = '(/(.*))?$';\n const gsRegex = new RegExp('^gs://' + bucketDomain + gsPath, 'i');\n const gsIndices = { bucket: 1, path: 3 };\n\n function httpModify(loc: Location): void {\n loc.path_ = decodeURIComponent(loc.path);\n }\n const version = 'v[A-Za-z0-9_]+';\n const firebaseStorageHost = DEFAULT_HOST.replace(/[.]/g, '\\\\.');\n const firebaseStoragePath = '(/([^?#]*).*)?$';\n const firebaseStorageRegExp = new RegExp(\n `^https?://${firebaseStorageHost}/${version}/b/${bucketDomain}/o${firebaseStoragePath}`,\n 'i'\n );\n const firebaseStorageIndices = { bucket: 1, path: 3 };\n\n const cloudStorageHost =\n '(?:storage.googleapis.com|storage.cloud.google.com)';\n const cloudStoragePath = '([^?#]*)';\n const cloudStorageRegExp = new RegExp(\n `^https?://${cloudStorageHost}/${bucketDomain}/${cloudStoragePath}`,\n 'i'\n );\n const cloudStorageIndices = { bucket: 1, path: 2 };\n\n const groups = [\n { regex: gsRegex, indices: gsIndices, postModify: gsModify },\n {\n regex: firebaseStorageRegExp,\n indices: firebaseStorageIndices,\n postModify: httpModify\n },\n {\n regex: cloudStorageRegExp,\n indices: cloudStorageIndices,\n postModify: httpModify\n }\n ];\n for (let i = 0; i < groups.length; i++) {\n const group = groups[i];\n const captures = group.regex.exec(url);\n if (captures) {\n const bucketValue = captures[group.indices.bucket];\n let pathValue = captures[group.indices.path];\n if (!pathValue) {\n pathValue = '';\n }\n location = new Location(bucketValue, pathValue);\n group.postModify(location);\n break;\n }\n }\n if (location == null) {\n throw errorsExports.invalidUrl(url);\n }\n return location;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as type from './type';\n\n/**\n * Returns the Object resulting from parsing the given JSON, or null if the\n * given string does not represent a JSON object.\n */\nexport function jsonObjectOrNull(\n s: string\n): { [name: string]: unknown } | null {\n let obj;\n try {\n obj = JSON.parse(s);\n } catch (e) {\n return null;\n }\n if (type.isNonArrayObject(obj)) {\n return obj;\n } else {\n return null;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Contains helper methods for manipulating paths.\n */\n\n/**\n * @return Null if the path is already at the root.\n */\nexport function parent(path: string): string | null {\n if (path.length === 0) {\n return null;\n }\n const index = path.lastIndexOf('/');\n if (index === -1) {\n return '';\n }\n const newPath = path.slice(0, index);\n return newPath;\n}\n\nexport function child(path: string, childPath: string): string {\n const canonicalChildPath = childPath\n .split('/')\n .filter(component => component.length > 0)\n .join('/');\n if (path.length === 0) {\n return canonicalChildPath;\n } else {\n return path + '/' + canonicalChildPath;\n }\n}\n\n/**\n * Returns the last component of a path.\n * '/foo/bar' -> 'bar'\n * '/foo/bar/baz/' -> 'baz/'\n * '/a' -> 'a'\n */\nexport function lastComponent(path: string): string {\n const index = path.lastIndexOf('/', path.length - 2);\n if (index === -1) {\n return path;\n } else {\n return path.slice(index + 1);\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Functions to create and manipulate URLs for the server API.\n */\nimport { DEFAULT_HOST } from './constants';\nimport { UrlParams } from './requestinfo';\n\nexport function makeUrl(urlPart: string): string {\n return `https://${DEFAULT_HOST}/v0${urlPart}`;\n}\n\nexport function makeQueryString(params: UrlParams): string {\n const encode = encodeURIComponent;\n let queryPart = '?';\n for (const key in params) {\n if (params.hasOwnProperty(key)) {\n // @ts-ignore TODO: remove once typescript is upgraded to 3.5.x\n const nextPart = encode(key) + '=' + encode(params[key]);\n queryPart = queryPart + nextPart + '&';\n }\n }\n\n // Chop off the extra '&' or '?' on the end\n queryPart = queryPart.slice(0, -1);\n return queryPart;\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Documentation for the metadata format\n */\nimport { Metadata } from '../metadata';\n\nimport { AuthWrapper } from './authwrapper';\nimport * as json from './json';\nimport { Location } from './location';\nimport * as path from './path';\nimport * as type from './type';\nimport * as UrlUtils from './url';\nimport { Reference } from '../reference';\n\nexport function noXform_(metadata: Metadata, value: T): T {\n return value;\n}\n\n/**\n * @struct\n */\nclass Mapping {\n local: string;\n writable: boolean;\n xform: (p1: Metadata, p2?: T) => T | undefined;\n\n constructor(\n public server: string,\n local?: string | null,\n writable?: boolean,\n xform?: ((p1: Metadata, p2?: T) => T | undefined) | null\n ) {\n this.local = local || server;\n this.writable = !!writable;\n this.xform = xform || noXform_;\n }\n}\ntype Mappings = Array | Mapping>;\n\nexport { Mappings };\n\nlet mappings_: Mappings | null = null;\n\nexport function xformPath(fullPath: string | undefined): string | undefined {\n if (!type.isString(fullPath) || fullPath.length < 2) {\n return fullPath;\n } else {\n return path.lastComponent(fullPath);\n }\n}\n\nexport function getMappings(): Mappings {\n if (mappings_) {\n return mappings_;\n }\n const mappings: Mappings = [];\n mappings.push(new Mapping('bucket'));\n mappings.push(new Mapping('generation'));\n mappings.push(new Mapping('metageneration'));\n mappings.push(new Mapping('name', 'fullPath', true));\n\n function mappingsXformPath(\n _metadata: Metadata,\n fullPath: string | undefined\n ): string | undefined {\n return xformPath(fullPath);\n }\n const nameMapping = new Mapping('name');\n nameMapping.xform = mappingsXformPath;\n mappings.push(nameMapping);\n\n /**\n * Coerces the second param to a number, if it is defined.\n */\n function xformSize(\n _metadata: Metadata,\n size: number | string | undefined\n ): number | undefined {\n if (type.isDef(size)) {\n return Number(size);\n } else {\n return size;\n }\n }\n const sizeMapping = new Mapping('size');\n sizeMapping.xform = xformSize;\n mappings.push(sizeMapping);\n mappings.push(new Mapping('timeCreated'));\n mappings.push(new Mapping('updated'));\n mappings.push(new Mapping('md5Hash', null, true));\n mappings.push(new Mapping('cacheControl', null, true));\n mappings.push(new Mapping('contentDisposition', null, true));\n mappings.push(new Mapping('contentEncoding', null, true));\n mappings.push(new Mapping('contentLanguage', null, true));\n mappings.push(new Mapping('contentType', null, true));\n mappings.push(new Mapping('metadata', 'customMetadata', true));\n mappings_ = mappings;\n return mappings_;\n}\n\nexport function addRef(metadata: Metadata, authWrapper: AuthWrapper): void {\n function generateRef(): Reference {\n const bucket: string = metadata['bucket'] as string;\n const path: string = metadata['fullPath'] as string;\n const loc = new Location(bucket, path);\n return authWrapper.makeStorageReference(loc);\n }\n Object.defineProperty(metadata, 'ref', { get: generateRef });\n}\n\nexport function fromResource(\n authWrapper: AuthWrapper,\n resource: { [name: string]: unknown },\n mappings: Mappings\n): Metadata {\n const metadata: Metadata = {} as Metadata;\n metadata['type'] = 'file';\n const len = mappings.length;\n for (let i = 0; i < len; i++) {\n const mapping = mappings[i];\n metadata[mapping.local] = (mapping as Mapping).xform(\n metadata,\n resource[mapping.server]\n );\n }\n addRef(metadata, authWrapper);\n return metadata;\n}\n\nexport function fromResourceString(\n authWrapper: AuthWrapper,\n resourceString: string,\n mappings: Mappings\n): Metadata | null {\n const obj = json.jsonObjectOrNull(resourceString);\n if (obj === null) {\n return null;\n }\n const resource = obj as Metadata;\n return fromResource(authWrapper, resource, mappings);\n}\n\nexport function downloadUrlFromResourceString(\n metadata: Metadata,\n resourceString: string\n): string | null {\n const obj = json.jsonObjectOrNull(resourceString);\n if (obj === null) {\n return null;\n }\n if (!type.isString(obj['downloadTokens'])) {\n // This can happen if objects are uploaded through GCS and retrieved\n // through list, so we don't want to throw an Error.\n return null;\n }\n const tokens: string = obj['downloadTokens'] as string;\n if (tokens.length === 0) {\n return null;\n }\n const encode = encodeURIComponent;\n const tokensList = tokens.split(',');\n const urls = tokensList.map((token: string): string => {\n const bucket: string = metadata['bucket'] as string;\n const path: string = metadata['fullPath'] as string;\n const urlPart = '/b/' + encode(bucket) + '/o/' + encode(path);\n const base = UrlUtils.makeUrl(urlPart);\n const queryString = UrlUtils.makeQueryString({\n alt: 'media',\n token\n });\n return base + queryString;\n });\n return urls[0];\n}\n\nexport function toResourceString(\n metadata: Metadata,\n mappings: Mappings\n): string {\n const resource: {\n [prop: string]: unknown;\n } = {};\n const len = mappings.length;\n for (let i = 0; i < len; i++) {\n const mapping = mappings[i];\n if (mapping.writable) {\n resource[mapping.server] = metadata[mapping.local];\n }\n }\n return JSON.stringify(resource);\n}\n\nexport function metadataValidator(p: unknown): void {\n if (!type.isObject(p) || !p) {\n throw 'Expected Metadata object.';\n }\n for (const key in p) {\n if (p.hasOwnProperty(key)) {\n const val = p[key];\n if (key === 'customMetadata') {\n if (!type.isObject(val)) {\n throw 'Expected object for \\'customMetadata\\' mapping.';\n }\n } else {\n if (type.isNonNullObject(val)) {\n throw \"Mapping for '\" + key + \"' cannot be an object.\";\n }\n }\n }\n }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Documentation for the listOptions and listResult format\n */\nimport { AuthWrapper } from './authwrapper';\nimport { Location } from './location';\nimport * as json from './json';\nimport * as type from './type';\nimport { ListResult } from '../list';\n\n/**\n * Represents the simplified object metadata returned by List API.\n * Other fields are filtered because list in Firebase Rules does not grant\n * the permission to read the metadata.\n */\ninterface ListMetadataResponse {\n name: string;\n bucket: string;\n}\n\n/**\n * Represents the JSON response of List API.\n */\ninterface ListResultResponse {\n prefixes: string[];\n items: ListMetadataResponse[];\n nextPageToken?: string;\n}\n\nconst MAX_RESULTS_KEY = 'maxResults';\nconst MAX_MAX_RESULTS = 1000;\nconst PAGE_TOKEN_KEY = 'pageToken';\nconst PREFIXES_KEY = 'prefixes';\nconst ITEMS_KEY = 'items';\n\nfunction fromBackendResponse(\n authWrapper: AuthWrapper,\n bucket: string,\n resource: ListResultResponse\n): ListResult {\n const listResult: ListResult = {\n prefixes: [],\n items: [],\n nextPageToken: resource['nextPageToken']\n };\n if (resource[PREFIXES_KEY]) {\n for (const path of resource[PREFIXES_KEY]) {\n const pathWithoutTrailingSlash = path.replace(/\\/$/, '');\n const reference = authWrapper.makeStorageReference(\n new Location(bucket, pathWithoutTrailingSlash)\n );\n listResult.prefixes.push(reference);\n }\n }\n\n if (resource[ITEMS_KEY]) {\n for (const item of resource[ITEMS_KEY]) {\n const reference = authWrapper.makeStorageReference(\n new Location(bucket, item['name'])\n );\n listResult.items.push(reference);\n }\n }\n return listResult;\n}\n\nexport function fromResponseString(\n authWrapper: AuthWrapper,\n bucket: string,\n resourceString: string\n): ListResult | null {\n const obj = json.jsonObjectOrNull(resourceString);\n if (obj === null) {\n return null;\n }\n const resource = (obj as unknown) as ListResultResponse;\n return fromBackendResponse(authWrapper, bucket, resource);\n}\n\nexport function listOptionsValidator(p: unknown): void {\n if (!type.isObject(p) || !p) {\n throw 'Expected ListOptions object.';\n }\n for (const key in p) {\n if (key === MAX_RESULTS_KEY) {\n if (\n !type.isInteger(p[MAX_RESULTS_KEY]) ||\n (p[MAX_RESULTS_KEY] as number) <= 0\n ) {\n throw 'Expected maxResults to be a positive number.';\n }\n if ((p[MAX_RESULTS_KEY] as number) > 1000) {\n throw `Expected maxResults to be less than or equal to ${MAX_MAX_RESULTS}.`;\n }\n } else if (key === PAGE_TOKEN_KEY) {\n if (p[PAGE_TOKEN_KEY] && !type.isString(p[PAGE_TOKEN_KEY])) {\n throw 'Expected pageToken to be string.';\n }\n } else {\n throw 'Unknown option: ' + key;\n }\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { FirebaseStorageError } from './error';\nimport { Headers, XhrIo } from './xhrio';\n\nexport interface UrlParams {\n [name: string]: string | number;\n}\n\nexport class RequestInfo {\n urlParams: UrlParams = {};\n headers: Headers = {};\n body: Blob | string | Uint8Array | null = null;\n\n errorHandler:\n | ((p1: XhrIo, p2: FirebaseStorageError) => FirebaseStorageError)\n | null = null;\n\n /**\n * Called with the current number of bytes uploaded and total size (-1 if not\n * computable) of the request body (i.e. used to report upload progress).\n */\n progressCallback: ((p1: number, p2: number) => void) | null = null;\n successCodes: number[] = [200];\n additionalRetryCodes: number[] = [];\n\n constructor(\n public url: string,\n public method: string,\n /**\n * Returns the value with which to resolve the request's promise. Only called\n * if the request is successful. Throw from this function to reject the\n * returned Request's promise with the thrown error.\n * Note: The XhrIo passed to this function may be reused after this callback\n * returns. Do not keep a reference to it in any way.\n */\n public handler: (p1: XhrIo, p2: string) => T,\n public timeout: number\n ) {}\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Defines methods for interacting with the network.\n */\n\nimport { Metadata } from '../metadata';\nimport { ListResult } from '../list';\nimport { AuthWrapper } from './authwrapper';\nimport { FbsBlob } from './blob';\nimport {\n FirebaseStorageError,\n cannotSliceBlob,\n unauthenticated,\n quotaExceeded,\n unauthorized,\n objectNotFound,\n serverFileWrongSize,\n unknown\n} from './error';\nimport { Location } from './location';\nimport * as MetadataUtils from './metadata';\nimport * as ListResultUtils from './list';\nimport { RequestInfo, UrlParams } from './requestinfo';\nimport * as type from './type';\nimport * as UrlUtils from './url';\nimport { XhrIo } from './xhrio';\n\n/**\n * Throws the UNKNOWN FirebaseStorageError if cndn is false.\n */\nexport function handlerCheck(cndn: boolean): void {\n if (!cndn) {\n throw unknown();\n }\n}\n\nexport function metadataHandler(\n authWrapper: AuthWrapper,\n mappings: MetadataUtils.Mappings\n): (p1: XhrIo, p2: string) => Metadata {\n function handler(xhr: XhrIo, text: string): Metadata {\n const metadata = MetadataUtils.fromResourceString(\n authWrapper,\n text,\n mappings\n );\n handlerCheck(metadata !== null);\n return metadata as Metadata;\n }\n return handler;\n}\n\nexport function listHandler(\n authWrapper: AuthWrapper,\n bucket: string\n): (p1: XhrIo, p2: string) => ListResult {\n function handler(xhr: XhrIo, text: string): ListResult {\n const listResult = ListResultUtils.fromResponseString(\n authWrapper,\n bucket,\n text\n );\n handlerCheck(listResult !== null);\n return listResult as ListResult;\n }\n return handler;\n}\n\nexport function downloadUrlHandler(\n authWrapper: AuthWrapper,\n mappings: MetadataUtils.Mappings\n): (p1: XhrIo, p2: string) => string | null {\n function handler(xhr: XhrIo, text: string): string | null {\n const metadata = MetadataUtils.fromResourceString(\n authWrapper,\n text,\n mappings\n );\n handlerCheck(metadata !== null);\n return MetadataUtils.downloadUrlFromResourceString(\n metadata as Metadata,\n text\n );\n }\n return handler;\n}\n\nexport function sharedErrorHandler(\n location: Location\n): (p1: XhrIo, p2: FirebaseStorageError) => FirebaseStorageError {\n function errorHandler(\n xhr: XhrIo,\n err: FirebaseStorageError\n ): FirebaseStorageError {\n let newErr;\n if (xhr.getStatus() === 401) {\n newErr = unauthenticated();\n } else {\n if (xhr.getStatus() === 402) {\n newErr = quotaExceeded(location.bucket);\n } else {\n if (xhr.getStatus() === 403) {\n newErr = unauthorized(location.path);\n } else {\n newErr = err;\n }\n }\n }\n newErr.setServerResponseProp(err.serverResponseProp());\n return newErr;\n }\n return errorHandler;\n}\n\nexport function objectErrorHandler(\n location: Location\n): (p1: XhrIo, p2: FirebaseStorageError) => FirebaseStorageError {\n const shared = sharedErrorHandler(location);\n\n function errorHandler(\n xhr: XhrIo,\n err: FirebaseStorageError\n ): FirebaseStorageError {\n let newErr = shared(xhr, err);\n if (xhr.getStatus() === 404) {\n newErr = objectNotFound(location.path);\n }\n newErr.setServerResponseProp(err.serverResponseProp());\n return newErr;\n }\n return errorHandler;\n}\n\nexport function getMetadata(\n authWrapper: AuthWrapper,\n location: Location,\n mappings: MetadataUtils.Mappings\n): RequestInfo {\n const urlPart = location.fullServerUrl();\n const url = UrlUtils.makeUrl(urlPart);\n const method = 'GET';\n const timeout = authWrapper.maxOperationRetryTime();\n const requestInfo = new RequestInfo(\n url,\n method,\n metadataHandler(authWrapper, mappings),\n timeout\n );\n requestInfo.errorHandler = objectErrorHandler(location);\n return requestInfo;\n}\n\nexport function list(\n authWrapper: AuthWrapper,\n location: Location,\n delimiter?: string,\n pageToken?: string | null,\n maxResults?: number | null\n): RequestInfo {\n const urlParams: UrlParams = {};\n if (location.isRoot) {\n urlParams['prefix'] = '';\n } else {\n urlParams['prefix'] = location.path + '/';\n }\n if (delimiter && delimiter.length > 0) {\n urlParams['delimiter'] = delimiter;\n }\n if (pageToken) {\n urlParams['pageToken'] = pageToken;\n }\n if (maxResults) {\n urlParams['maxResults'] = maxResults;\n }\n const urlPart = location.bucketOnlyServerUrl();\n const url = UrlUtils.makeUrl(urlPart);\n const method = 'GET';\n const timeout = authWrapper.maxOperationRetryTime();\n const requestInfo = new RequestInfo(\n url,\n method,\n listHandler(authWrapper, location.bucket),\n timeout\n );\n requestInfo.urlParams = urlParams;\n requestInfo.errorHandler = sharedErrorHandler(location);\n return requestInfo;\n}\n\nexport function getDownloadUrl(\n authWrapper: AuthWrapper,\n location: Location,\n mappings: MetadataUtils.Mappings\n): RequestInfo {\n const urlPart = location.fullServerUrl();\n const url = UrlUtils.makeUrl(urlPart);\n const method = 'GET';\n const timeout = authWrapper.maxOperationRetryTime();\n const requestInfo = new RequestInfo(\n url,\n method,\n downloadUrlHandler(authWrapper, mappings),\n timeout\n );\n requestInfo.errorHandler = objectErrorHandler(location);\n return requestInfo;\n}\n\nexport function updateMetadata(\n authWrapper: AuthWrapper,\n location: Location,\n metadata: Metadata,\n mappings: MetadataUtils.Mappings\n): RequestInfo {\n const urlPart = location.fullServerUrl();\n const url = UrlUtils.makeUrl(urlPart);\n const method = 'PATCH';\n const body = MetadataUtils.toResourceString(metadata, mappings);\n const headers = { 'Content-Type': 'application/json; charset=utf-8' };\n const timeout = authWrapper.maxOperationRetryTime();\n const requestInfo = new RequestInfo(\n url,\n method,\n metadataHandler(authWrapper, mappings),\n timeout\n );\n requestInfo.headers = headers;\n requestInfo.body = body;\n requestInfo.errorHandler = objectErrorHandler(location);\n return requestInfo;\n}\n\nexport function deleteObject(\n authWrapper: AuthWrapper,\n location: Location\n): RequestInfo {\n const urlPart = location.fullServerUrl();\n const url = UrlUtils.makeUrl(urlPart);\n const method = 'DELETE';\n const timeout = authWrapper.maxOperationRetryTime();\n\n function handler(_xhr: XhrIo, _text: string): void {}\n const requestInfo = new RequestInfo(url, method, handler, timeout);\n requestInfo.successCodes = [200, 204];\n requestInfo.errorHandler = objectErrorHandler(location);\n return requestInfo;\n}\n\nexport function determineContentType_(\n metadata: Metadata | null,\n blob: FbsBlob | null\n): string {\n return (\n (metadata && metadata['contentType']) ||\n (blob && blob.type()) ||\n 'application/octet-stream'\n );\n}\n\nexport function metadataForUpload_(\n location: Location,\n blob: FbsBlob,\n metadata?: Metadata | null\n): Metadata {\n const metadataClone = Object.assign({}, metadata);\n metadataClone['fullPath'] = location.path;\n metadataClone['size'] = blob.size();\n if (!metadataClone['contentType']) {\n metadataClone['contentType'] = determineContentType_(null, blob);\n }\n return metadataClone;\n}\n\nexport function multipartUpload(\n authWrapper: AuthWrapper,\n location: Location,\n mappings: MetadataUtils.Mappings,\n blob: FbsBlob,\n metadata?: Metadata | null\n): RequestInfo {\n const urlPart = location.bucketOnlyServerUrl();\n const headers: { [prop: string]: string } = {\n 'X-Goog-Upload-Protocol': 'multipart'\n };\n\n function genBoundary(): string {\n let str = '';\n for (let i = 0; i < 2; i++) {\n str = str + Math.random().toString().slice(2);\n }\n return str;\n }\n const boundary = genBoundary();\n headers['Content-Type'] = 'multipart/related; boundary=' + boundary;\n const metadata_ = metadataForUpload_(location, blob, metadata);\n const metadataString = MetadataUtils.toResourceString(metadata_, mappings);\n const preBlobPart =\n '--' +\n boundary +\n '\\r\\n' +\n 'Content-Type: application/json; charset=utf-8\\r\\n\\r\\n' +\n metadataString +\n '\\r\\n--' +\n boundary +\n '\\r\\n' +\n 'Content-Type: ' +\n metadata_['contentType'] +\n '\\r\\n\\r\\n';\n const postBlobPart = '\\r\\n--' + boundary + '--';\n const body = FbsBlob.getBlob(preBlobPart, blob, postBlobPart);\n if (body === null) {\n throw cannotSliceBlob();\n }\n const urlParams: UrlParams = { name: metadata_['fullPath']! };\n const url = UrlUtils.makeUrl(urlPart);\n const method = 'POST';\n const timeout = authWrapper.maxUploadRetryTime();\n const requestInfo = new RequestInfo(\n url,\n method,\n metadataHandler(authWrapper, mappings),\n timeout\n );\n requestInfo.urlParams = urlParams;\n requestInfo.headers = headers;\n requestInfo.body = body.uploadData();\n requestInfo.errorHandler = sharedErrorHandler(location);\n return requestInfo;\n}\n\n/**\n * @param current The number of bytes that have been uploaded so far.\n * @param total The total number of bytes in the upload.\n * @param opt_finalized True if the server has finished the upload.\n * @param opt_metadata The upload metadata, should\n * only be passed if opt_finalized is true.\n * @struct\n */\nexport class ResumableUploadStatus {\n finalized: boolean;\n metadata: Metadata | null;\n\n constructor(\n public current: number,\n public total: number,\n finalized?: boolean,\n metadata?: Metadata | null\n ) {\n this.finalized = !!finalized;\n this.metadata = metadata || null;\n }\n}\n\nexport function checkResumeHeader_(xhr: XhrIo, allowed?: string[]): string {\n let status: string | null = null;\n try {\n status = xhr.getResponseHeader('X-Goog-Upload-Status');\n } catch (e) {\n handlerCheck(false);\n }\n const allowedStatus = allowed || ['active'];\n handlerCheck(!!status && allowedStatus.indexOf(status) !== -1);\n return status as string;\n}\n\nexport function createResumableUpload(\n authWrapper: AuthWrapper,\n location: Location,\n mappings: MetadataUtils.Mappings,\n blob: FbsBlob,\n metadata?: Metadata | null\n): RequestInfo {\n const urlPart = location.bucketOnlyServerUrl();\n const metadataForUpload = metadataForUpload_(location, blob, metadata);\n const urlParams: UrlParams = { name: metadataForUpload['fullPath']! };\n const url = UrlUtils.makeUrl(urlPart);\n const method = 'POST';\n const headers = {\n 'X-Goog-Upload-Protocol': 'resumable',\n 'X-Goog-Upload-Command': 'start',\n 'X-Goog-Upload-Header-Content-Length': blob.size(),\n 'X-Goog-Upload-Header-Content-Type': metadataForUpload['contentType']!,\n 'Content-Type': 'application/json; charset=utf-8'\n };\n const body = MetadataUtils.toResourceString(metadataForUpload, mappings);\n const timeout = authWrapper.maxUploadRetryTime();\n\n function handler(xhr: XhrIo): string {\n checkResumeHeader_(xhr);\n let url;\n try {\n url = xhr.getResponseHeader('X-Goog-Upload-URL');\n } catch (e) {\n handlerCheck(false);\n }\n handlerCheck(type.isString(url));\n return url as string;\n }\n const requestInfo = new RequestInfo(url, method, handler, timeout);\n requestInfo.urlParams = urlParams;\n requestInfo.headers = headers;\n requestInfo.body = body;\n requestInfo.errorHandler = sharedErrorHandler(location);\n return requestInfo;\n}\n\n/**\n * @param url From a call to fbs.requests.createResumableUpload.\n */\nexport function getResumableUploadStatus(\n authWrapper: AuthWrapper,\n location: Location,\n url: string,\n blob: FbsBlob\n): RequestInfo {\n const headers = { 'X-Goog-Upload-Command': 'query' };\n\n function handler(xhr: XhrIo): ResumableUploadStatus {\n const status = checkResumeHeader_(xhr, ['active', 'final']);\n let sizeString: string | null = null;\n try {\n sizeString = xhr.getResponseHeader('X-Goog-Upload-Size-Received');\n } catch (e) {\n handlerCheck(false);\n }\n\n if (!sizeString) {\n // null or empty string\n handlerCheck(false);\n }\n\n const size = Number(sizeString);\n handlerCheck(!isNaN(size));\n return new ResumableUploadStatus(size, blob.size(), status === 'final');\n }\n const method = 'POST';\n const timeout = authWrapper.maxUploadRetryTime();\n const requestInfo = new RequestInfo(url, method, handler, timeout);\n requestInfo.headers = headers;\n requestInfo.errorHandler = sharedErrorHandler(location);\n return requestInfo;\n}\n\n/**\n * Any uploads via the resumable upload API must transfer a number of bytes\n * that is a multiple of this number.\n */\nexport const resumableUploadChunkSize: number = 256 * 1024;\n\n/**\n * @param url From a call to fbs.requests.createResumableUpload.\n * @param chunkSize Number of bytes to upload.\n * @param status The previous status.\n * If not passed or null, we start from the beginning.\n * @throws fbs.Error If the upload is already complete, the passed in status\n * has a final size inconsistent with the blob, or the blob cannot be sliced\n * for upload.\n */\nexport function continueResumableUpload(\n location: Location,\n authWrapper: AuthWrapper,\n url: string,\n blob: FbsBlob,\n chunkSize: number,\n mappings: MetadataUtils.Mappings,\n status?: ResumableUploadStatus | null,\n progressCallback?: ((p1: number, p2: number) => void) | null\n): RequestInfo {\n // TODO(andysoto): standardize on internal asserts\n // assert(!(opt_status && opt_status.finalized));\n const status_ = new ResumableUploadStatus(0, 0);\n if (status) {\n status_.current = status.current;\n status_.total = status.total;\n } else {\n status_.current = 0;\n status_.total = blob.size();\n }\n if (blob.size() !== status_.total) {\n throw serverFileWrongSize();\n }\n const bytesLeft = status_.total - status_.current;\n let bytesToUpload = bytesLeft;\n if (chunkSize > 0) {\n bytesToUpload = Math.min(bytesToUpload, chunkSize);\n }\n const startByte = status_.current;\n const endByte = startByte + bytesToUpload;\n const uploadCommand =\n bytesToUpload === bytesLeft ? 'upload, finalize' : 'upload';\n const headers = {\n 'X-Goog-Upload-Command': uploadCommand,\n 'X-Goog-Upload-Offset': status_.current\n };\n const body = blob.slice(startByte, endByte);\n if (body === null) {\n throw cannotSliceBlob();\n }\n\n function handler(xhr: XhrIo, text: string): ResumableUploadStatus {\n // TODO(andysoto): Verify the MD5 of each uploaded range:\n // the 'x-range-md5' header comes back with status code 308 responses.\n // We'll only be able to bail out though, because you can't re-upload a\n // range that you previously uploaded.\n const uploadStatus = checkResumeHeader_(xhr, ['active', 'final']);\n const newCurrent = status_.current + bytesToUpload;\n const size = blob.size();\n let metadata;\n if (uploadStatus === 'final') {\n metadata = metadataHandler(authWrapper, mappings)(xhr, text);\n } else {\n metadata = null;\n }\n return new ResumableUploadStatus(\n newCurrent,\n size,\n uploadStatus === 'final',\n metadata\n );\n }\n const method = 'POST';\n const timeout = authWrapper.maxUploadRetryTime();\n const requestInfo = new RequestInfo(url, method, handler, timeout);\n requestInfo.headers = headers;\n requestInfo.body = body.uploadData();\n requestInfo.progressCallback = progressCallback || null;\n requestInfo.errorHandler = sharedErrorHandler(location);\n return requestInfo;\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as type from './type';\nimport { FirebaseStorageError } from './error';\n\nexport type NextFn = (value: T) => void;\nexport type ErrorFn = (error: Error | FirebaseStorageError) => void;\nexport type CompleteFn = () => void;\nexport type Unsubscribe = () => void;\n\nexport interface StorageObserver {\n next?: NextFn | null;\n error?: ErrorFn | null;\n complete?: CompleteFn | null;\n}\n\nexport type Subscribe = (\n next?: NextFn | StorageObserver | null,\n error?: ErrorFn | null,\n complete?: CompleteFn | null\n) => Unsubscribe;\n\n/**\n * @struct\n */\nexport class Observer implements StorageObserver {\n next?: NextFn | null;\n error?: ErrorFn | null;\n complete?: CompleteFn | null;\n\n constructor(\n nextOrObserver?: NextFn | StorageObserver | null,\n error?: ErrorFn | null,\n complete?: CompleteFn | null\n ) {\n const asFunctions =\n type.isFunction(nextOrObserver) ||\n type.isDef(error) ||\n type.isDef(complete);\n if (asFunctions) {\n this.next = nextOrObserver as NextFn | null;\n this.error = error || null;\n this.complete = complete || null;\n } else {\n const observer = nextOrObserver as {\n next?: NextFn | null;\n error?: ErrorFn | null;\n complete?: CompleteFn | null;\n };\n this.next = observer.next || null;\n this.error = observer.error || null;\n this.complete = observer.complete || null;\n }\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { TaskState } from './implementation/taskenums';\nimport { Metadata } from './metadata';\nimport { Reference } from './reference';\nimport { UploadTask } from './task';\n\nexport class UploadTaskSnapshot {\n constructor(\n readonly bytesTransferred: number,\n readonly totalBytes: number,\n readonly state: TaskState,\n readonly metadata: Metadata | null,\n readonly task: UploadTask,\n readonly ref: Reference\n ) {}\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as errorsExports from './error';\nimport * as MetadataUtils from './metadata';\nimport * as ListOptionsUtils from './list';\nimport * as type from './type';\n\n/**\n * @param name Name of the function.\n * @param specs Argument specs.\n * @param passed The actual arguments passed to the function.\n * @throws {fbs.Error} If the arguments are invalid.\n */\nexport function validate(\n name: string,\n specs: ArgSpec[],\n passed: IArguments\n): void {\n let minArgs = specs.length;\n const maxArgs = specs.length;\n for (let i = 0; i < specs.length; i++) {\n if (specs[i].optional) {\n minArgs = i;\n break;\n }\n }\n const validLength = minArgs <= passed.length && passed.length <= maxArgs;\n if (!validLength) {\n throw errorsExports.invalidArgumentCount(\n minArgs,\n maxArgs,\n name,\n passed.length\n );\n }\n for (let i = 0; i < passed.length; i++) {\n try {\n specs[i].validator(passed[i]);\n } catch (e) {\n if (e instanceof Error) {\n throw errorsExports.invalidArgument(i, name, e.message);\n } else {\n throw errorsExports.invalidArgument(i, name, e);\n }\n }\n }\n}\n\n/**\n * @struct\n */\nexport class ArgSpec {\n validator: (p1: unknown) => void;\n optional: boolean;\n\n constructor(validator: (p1: unknown) => void, optional?: boolean) {\n const self = this;\n this.validator = function (p: unknown) {\n if (self.optional && !type.isJustDef(p)) {\n return;\n }\n validator(p);\n };\n this.optional = !!optional;\n }\n}\n\nexport function and_(\n v1: (p1: unknown) => void,\n v2: (p1: unknown) => void\n): (p1: unknown) => void {\n return function (p) {\n v1(p);\n v2(p);\n };\n}\n\nexport function stringSpec(\n validator?: (p1: unknown) => void | null,\n optional?: boolean\n): ArgSpec {\n function stringValidator(p: unknown): void {\n if (!type.isString(p)) {\n throw 'Expected string.';\n }\n }\n let chainedValidator;\n if (validator) {\n chainedValidator = and_(stringValidator, validator);\n } else {\n chainedValidator = stringValidator;\n }\n return new ArgSpec(chainedValidator, optional);\n}\n\nexport function uploadDataSpec(): ArgSpec {\n function validator(p: unknown): void {\n const valid =\n p instanceof Uint8Array ||\n p instanceof ArrayBuffer ||\n (type.isNativeBlobDefined() && p instanceof Blob);\n if (!valid) {\n throw 'Expected Blob or File.';\n }\n }\n return new ArgSpec(validator);\n}\n\nexport function metadataSpec(optional?: boolean): ArgSpec {\n return new ArgSpec(MetadataUtils.metadataValidator, optional);\n}\n\nexport function listOptionSpec(optional?: boolean): ArgSpec {\n return new ArgSpec(ListOptionsUtils.listOptionsValidator, optional);\n}\n\nexport function nonNegativeNumberSpec(): ArgSpec {\n function validator(p: unknown): void {\n const valid = type.isNumber(p) && p >= 0;\n if (!valid) {\n throw 'Expected a number 0 or greater.';\n }\n }\n return new ArgSpec(validator);\n}\n\nexport function looseObjectSpec(\n validator?: ((p1: unknown) => void) | null,\n optional?: boolean\n): ArgSpec {\n function isLooseObjectValidator(p: unknown): void {\n const isLooseObject = p === null || (type.isDef(p) && p instanceof Object);\n if (!isLooseObject) {\n throw 'Expected an Object.';\n }\n if (validator !== undefined && validator !== null) {\n validator(p);\n }\n }\n return new ArgSpec(isLooseObjectValidator, optional);\n}\n\nexport function nullFunctionSpec(optional?: boolean): ArgSpec {\n function validator(p: unknown): void {\n const valid = p === null || type.isFunction(p);\n if (!valid) {\n throw 'Expected a Function.';\n }\n }\n return new ArgSpec(validator, optional);\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Returns a function that invokes f with its arguments asynchronously as a\n * microtask, i.e. as soon as possible after the current script returns back\n * into browser code.\n */\nexport function async(f: Function): Function {\n return (...argsToForward: unknown[]) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n Promise.resolve().then(() => f(...argsToForward));\n };\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @fileoverview Defines types for interacting with blob transfer tasks.\n */\n\nimport { AuthWrapper } from './implementation/authwrapper';\nimport { FbsBlob } from './implementation/blob';\nimport { FirebaseStorageError, Code, canceled } from './implementation/error';\nimport {\n InternalTaskState,\n TaskEvent,\n TaskState,\n taskStateFromInternalTaskState\n} from './implementation/taskenums';\nimport { Metadata } from './metadata';\nimport {\n CompleteFn,\n ErrorFn,\n NextFn,\n Observer,\n StorageObserver,\n Subscribe,\n Unsubscribe\n} from './implementation/observer';\nimport { Request } from './implementation/request';\nimport { UploadTaskSnapshot } from './tasksnapshot';\nimport {\n ArgSpec,\n nullFunctionSpec,\n looseObjectSpec,\n stringSpec,\n validate\n} from './implementation/args';\nimport { async as fbsAsync } from './implementation/async';\nimport { Location } from './implementation/location';\nimport * as fbsMetadata from './implementation/metadata';\nimport * as fbsRequests from './implementation/requests';\nimport * as typeUtils from './implementation/type';\nimport { Reference } from './reference';\n\n/**\n * Represents a blob being uploaded. Can be used to pause/resume/cancel the\n * upload and manage callbacks for various events.\n */\nexport class UploadTask {\n private ref_: Reference;\n private authWrapper_: AuthWrapper;\n private location_: Location;\n private blob_: FbsBlob;\n private metadata_: Metadata | null;\n private mappings_: fbsMetadata.Mappings;\n private transferred_: number = 0;\n private needToFetchStatus_: boolean = false;\n private needToFetchMetadata_: boolean = false;\n private observers_: Array> = [];\n private resumable_: boolean;\n private state_: InternalTaskState;\n private error_: Error | null = null;\n private uploadUrl_: string | null = null;\n private request_: Request | null = null;\n private chunkMultiplier_: number = 1;\n private errorHandler_: (p1: FirebaseStorageError) => void;\n private metadataErrorHandler_: (p1: FirebaseStorageError) => void;\n private resolve_: ((p1: UploadTaskSnapshot) => void) | null = null;\n private reject_: ((p1: Error) => void) | null = null;\n private promise_: Promise;\n\n /**\n * @param ref The firebaseStorage.Reference object this task came\n * from, untyped to avoid cyclic dependencies.\n * @param blob The blob to upload.\n */\n constructor(\n ref: Reference,\n authWrapper: AuthWrapper,\n location: Location,\n mappings: fbsMetadata.Mappings,\n blob: FbsBlob,\n metadata: Metadata | null = null\n ) {\n this.ref_ = ref;\n this.authWrapper_ = authWrapper;\n this.location_ = location;\n this.blob_ = blob;\n this.metadata_ = metadata;\n this.mappings_ = mappings;\n this.resumable_ = this.shouldDoResumable_(this.blob_);\n this.state_ = InternalTaskState.RUNNING;\n this.errorHandler_ = error => {\n this.request_ = null;\n this.chunkMultiplier_ = 1;\n if (error.codeEquals(Code.CANCELED)) {\n this.needToFetchStatus_ = true;\n this.completeTransitions_();\n } else {\n this.error_ = error;\n this.transition_(InternalTaskState.ERROR);\n }\n };\n this.metadataErrorHandler_ = error => {\n this.request_ = null;\n if (error.codeEquals(Code.CANCELED)) {\n this.completeTransitions_();\n } else {\n this.error_ = error;\n this.transition_(InternalTaskState.ERROR);\n }\n };\n this.promise_ = new Promise((resolve, reject) => {\n this.resolve_ = resolve;\n this.reject_ = reject;\n this.start_();\n });\n\n // Prevent uncaught rejections on the internal promise from bubbling out\n // to the top level with a dummy handler.\n this.promise_.then(null, () => {});\n }\n\n private makeProgressCallback_(): (p1: number, p2: number) => void {\n const sizeBefore = this.transferred_;\n return loaded => this.updateProgress_(sizeBefore + loaded);\n }\n\n private shouldDoResumable_(blob: FbsBlob): boolean {\n return blob.size() > 256 * 1024;\n }\n\n private start_(): void {\n if (this.state_ !== InternalTaskState.RUNNING) {\n // This can happen if someone pauses us in a resume callback, for example.\n return;\n }\n if (this.request_ !== null) {\n return;\n }\n if (this.resumable_) {\n if (this.uploadUrl_ === null) {\n this.createResumable_();\n } else {\n if (this.needToFetchStatus_) {\n this.fetchStatus_();\n } else {\n if (this.needToFetchMetadata_) {\n // Happens if we miss the metadata on upload completion.\n this.fetchMetadata_();\n } else {\n this.continueUpload_();\n }\n }\n }\n } else {\n this.oneShotUpload_();\n }\n }\n\n private resolveToken_(callback: (p1: string | null) => void): void {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.authWrapper_.getAuthToken().then(authToken => {\n switch (this.state_) {\n case InternalTaskState.RUNNING:\n callback(authToken);\n break;\n case InternalTaskState.CANCELING:\n this.transition_(InternalTaskState.CANCELED);\n break;\n case InternalTaskState.PAUSING:\n this.transition_(InternalTaskState.PAUSED);\n break;\n default:\n }\n });\n }\n\n // TODO(andysoto): assert false\n\n private createResumable_(): void {\n this.resolveToken_(authToken => {\n const requestInfo = fbsRequests.createResumableUpload(\n this.authWrapper_,\n this.location_,\n this.mappings_,\n this.blob_,\n this.metadata_\n );\n const createRequest = this.authWrapper_.makeRequest(\n requestInfo,\n authToken\n );\n this.request_ = createRequest;\n createRequest.getPromise().then((url: string) => {\n this.request_ = null;\n this.uploadUrl_ = url;\n this.needToFetchStatus_ = false;\n this.completeTransitions_();\n }, this.errorHandler_);\n });\n }\n\n private fetchStatus_(): void {\n // TODO(andysoto): assert(this.uploadUrl_ !== null);\n const url = this.uploadUrl_ as string;\n this.resolveToken_(authToken => {\n const requestInfo = fbsRequests.getResumableUploadStatus(\n this.authWrapper_,\n this.location_,\n url,\n this.blob_\n );\n const statusRequest = this.authWrapper_.makeRequest(\n requestInfo,\n authToken\n );\n this.request_ = statusRequest;\n statusRequest.getPromise().then(status => {\n status = status as fbsRequests.ResumableUploadStatus;\n this.request_ = null;\n this.updateProgress_(status.current);\n this.needToFetchStatus_ = false;\n if (status.finalized) {\n this.needToFetchMetadata_ = true;\n }\n this.completeTransitions_();\n }, this.errorHandler_);\n });\n }\n\n private continueUpload_(): void {\n const chunkSize =\n fbsRequests.resumableUploadChunkSize * this.chunkMultiplier_;\n const status = new fbsRequests.ResumableUploadStatus(\n this.transferred_,\n this.blob_.size()\n );\n\n // TODO(andysoto): assert(this.uploadUrl_ !== null);\n const url = this.uploadUrl_ as string;\n this.resolveToken_(authToken => {\n let requestInfo;\n try {\n requestInfo = fbsRequests.continueResumableUpload(\n this.location_,\n this.authWrapper_,\n url,\n this.blob_,\n chunkSize,\n this.mappings_,\n status,\n this.makeProgressCallback_()\n );\n } catch (e) {\n this.error_ = e;\n this.transition_(InternalTaskState.ERROR);\n return;\n }\n const uploadRequest = this.authWrapper_.makeRequest(\n requestInfo,\n authToken\n );\n this.request_ = uploadRequest;\n uploadRequest\n .getPromise()\n .then((newStatus: fbsRequests.ResumableUploadStatus) => {\n this.increaseMultiplier_();\n this.request_ = null;\n this.updateProgress_(newStatus.current);\n if (newStatus.finalized) {\n this.metadata_ = newStatus.metadata;\n this.transition_(InternalTaskState.SUCCESS);\n } else {\n this.completeTransitions_();\n }\n }, this.errorHandler_);\n });\n }\n\n private increaseMultiplier_(): void {\n const currentSize =\n fbsRequests.resumableUploadChunkSize * this.chunkMultiplier_;\n\n // Max chunk size is 32M.\n if (currentSize < 32 * 1024 * 1024) {\n this.chunkMultiplier_ *= 2;\n }\n }\n\n private fetchMetadata_(): void {\n this.resolveToken_(authToken => {\n const requestInfo = fbsRequests.getMetadata(\n this.authWrapper_,\n this.location_,\n this.mappings_\n );\n const metadataRequest = this.authWrapper_.makeRequest(\n requestInfo,\n authToken\n );\n this.request_ = metadataRequest;\n metadataRequest.getPromise().then(metadata => {\n this.request_ = null;\n this.metadata_ = metadata;\n this.transition_(InternalTaskState.SUCCESS);\n }, this.metadataErrorHandler_);\n });\n }\n\n private oneShotUpload_(): void {\n this.resolveToken_(authToken => {\n const requestInfo = fbsRequests.multipartUpload(\n this.authWrapper_,\n this.location_,\n this.mappings_,\n this.blob_,\n this.metadata_\n );\n const multipartRequest = this.authWrapper_.makeRequest(\n requestInfo,\n authToken\n );\n this.request_ = multipartRequest;\n multipartRequest.getPromise().then(metadata => {\n this.request_ = null;\n this.metadata_ = metadata;\n this.updateProgress_(this.blob_.size());\n this.transition_(InternalTaskState.SUCCESS);\n }, this.errorHandler_);\n });\n }\n\n private updateProgress_(transferred: number): void {\n const old = this.transferred_;\n this.transferred_ = transferred;\n\n // A progress update can make the \"transferred\" value smaller (e.g. a\n // partial upload not completed by server, after which the \"transferred\"\n // value may reset to the value at the beginning of the request).\n if (this.transferred_ !== old) {\n this.notifyObservers_();\n }\n }\n\n private transition_(state: InternalTaskState): void {\n if (this.state_ === state) {\n return;\n }\n switch (state) {\n case InternalTaskState.CANCELING:\n // TODO(andysoto):\n // assert(this.state_ === InternalTaskState.RUNNING ||\n // this.state_ === InternalTaskState.PAUSING);\n this.state_ = state;\n if (this.request_ !== null) {\n this.request_.cancel();\n }\n break;\n case InternalTaskState.PAUSING:\n // TODO(andysoto):\n // assert(this.state_ === InternalTaskState.RUNNING);\n this.state_ = state;\n if (this.request_ !== null) {\n this.request_.cancel();\n }\n break;\n case InternalTaskState.RUNNING:\n // TODO(andysoto):\n // assert(this.state_ === InternalTaskState.PAUSED ||\n // this.state_ === InternalTaskState.PAUSING);\n const wasPaused = this.state_ === InternalTaskState.PAUSED;\n this.state_ = state;\n if (wasPaused) {\n this.notifyObservers_();\n this.start_();\n }\n break;\n case InternalTaskState.PAUSED:\n // TODO(andysoto):\n // assert(this.state_ === InternalTaskState.PAUSING);\n this.state_ = state;\n this.notifyObservers_();\n break;\n case InternalTaskState.CANCELED:\n // TODO(andysoto):\n // assert(this.state_ === InternalTaskState.PAUSED ||\n // this.state_ === InternalTaskState.CANCELING);\n this.error_ = canceled();\n this.state_ = state;\n this.notifyObservers_();\n break;\n case InternalTaskState.ERROR:\n // TODO(andysoto):\n // assert(this.state_ === InternalTaskState.RUNNING ||\n // this.state_ === InternalTaskState.PAUSING ||\n // this.state_ === InternalTaskState.CANCELING);\n this.state_ = state;\n this.notifyObservers_();\n break;\n case InternalTaskState.SUCCESS:\n // TODO(andysoto):\n // assert(this.state_ === InternalTaskState.RUNNING ||\n // this.state_ === InternalTaskState.PAUSING ||\n // this.state_ === InternalTaskState.CANCELING);\n this.state_ = state;\n this.notifyObservers_();\n break;\n default: // Ignore\n }\n }\n\n private completeTransitions_(): void {\n switch (this.state_) {\n case InternalTaskState.PAUSING:\n this.transition_(InternalTaskState.PAUSED);\n break;\n case InternalTaskState.CANCELING:\n this.transition_(InternalTaskState.CANCELED);\n break;\n case InternalTaskState.RUNNING:\n this.start_();\n break;\n default:\n // TODO(andysoto): assert(false);\n break;\n }\n }\n\n get snapshot(): UploadTaskSnapshot {\n const externalState = taskStateFromInternalTaskState(this.state_);\n return new UploadTaskSnapshot(\n this.transferred_,\n this.blob_.size(),\n externalState,\n this.metadata_,\n this,\n this.ref_\n );\n }\n\n /**\n * Adds a callback for an event.\n * @param type The type of event to listen for.\n */\n on(\n type: TaskEvent,\n nextOrObserver?:\n | NextFn\n | StorageObserver\n | null,\n error?: ErrorFn | null,\n completed?: CompleteFn | null\n ): Unsubscribe | Subscribe {\n function typeValidator(): void {\n if (type !== TaskEvent.STATE_CHANGED) {\n throw `Expected one of the event types: [${TaskEvent.STATE_CHANGED}].`;\n }\n }\n const nextOrObserverMessage =\n 'Expected a function or an Object with one of ' +\n '`next`, `error`, `complete` properties.';\n const nextValidator = nullFunctionSpec(true).validator;\n const observerValidator = looseObjectSpec(null, true).validator;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function nextOrObserverValidator(p: any): void {\n try {\n nextValidator(p);\n return;\n } catch (e) {}\n try {\n observerValidator(p);\n const anyDefined =\n typeUtils.isJustDef(p['next']) ||\n typeUtils.isJustDef(p['error']) ||\n typeUtils.isJustDef(p['complete']);\n if (!anyDefined) {\n throw '';\n }\n return;\n } catch (e) {\n throw nextOrObserverMessage;\n }\n }\n const specs = [\n stringSpec(typeValidator),\n looseObjectSpec(nextOrObserverValidator, true),\n nullFunctionSpec(true),\n nullFunctionSpec(true)\n ];\n validate('on', specs, arguments);\n const self = this;\n\n function makeBinder(\n specs: ArgSpec[] | null\n ): Subscribe {\n function binder(\n nextOrObserver?:\n | NextFn\n | StorageObserver\n | null,\n error?: ErrorFn | null,\n complete?: CompleteFn | null\n ): () => void {\n if (specs !== null) {\n validate('on', specs, arguments);\n }\n const observer = new Observer(nextOrObserver, error, completed);\n self.addObserver_(observer);\n return () => {\n self.removeObserver_(observer);\n };\n }\n return binder;\n }\n\n function binderNextOrObserverValidator(p: unknown): void {\n if (p === null) {\n throw nextOrObserverMessage;\n }\n nextOrObserverValidator(p);\n }\n const binderSpecs = [\n looseObjectSpec(binderNextOrObserverValidator),\n nullFunctionSpec(true),\n nullFunctionSpec(true)\n ];\n const typeOnly = !(\n typeUtils.isJustDef(nextOrObserver) ||\n typeUtils.isJustDef(error) ||\n typeUtils.isJustDef(completed)\n );\n if (typeOnly) {\n return makeBinder(binderSpecs);\n } else {\n return makeBinder(null)(nextOrObserver, error, completed);\n }\n }\n\n /**\n * This object behaves like a Promise, and resolves with its snapshot data\n * when the upload completes.\n * @param onFulfilled The fulfillment callback. Promise chaining works as normal.\n * @param onRejected The rejection callback.\n */\n then(\n onFulfilled?: ((value: UploadTaskSnapshot) => U | Promise) | null,\n onRejected?: ((error: Error) => U | Promise) | null\n ): Promise {\n // These casts are needed so that TypeScript can infer the types of the\n // resulting Promise.\n return this.promise_.then(\n onFulfilled as (value: UploadTaskSnapshot) => U | Promise,\n onRejected as ((error: unknown) => Promise) | null\n );\n }\n\n /**\n * Equivalent to calling `then(null, onRejected)`.\n */\n catch(onRejected: (p1: Error) => T | Promise): Promise {\n return this.then(null, onRejected);\n }\n\n /**\n * Adds the given observer.\n */\n private addObserver_(observer: Observer): void {\n this.observers_.push(observer);\n this.notifyObserver_(observer);\n }\n\n /**\n * Removes the given observer.\n */\n private removeObserver_(observer: Observer): void {\n const i = this.observers_.indexOf(observer);\n if (i !== -1) {\n this.observers_.splice(i, 1);\n }\n }\n\n private notifyObservers_(): void {\n this.finishPromise_();\n const observers = this.observers_.slice();\n observers.forEach(observer => {\n this.notifyObserver_(observer);\n });\n }\n\n private finishPromise_(): void {\n if (this.resolve_ !== null) {\n let triggered = true;\n switch (taskStateFromInternalTaskState(this.state_)) {\n case TaskState.SUCCESS:\n fbsAsync(this.resolve_.bind(null, this.snapshot))();\n break;\n case TaskState.CANCELED:\n case TaskState.ERROR:\n const toCall = this.reject_ as (p1: Error) => void;\n fbsAsync(toCall.bind(null, this.error_ as Error))();\n break;\n default:\n triggered = false;\n break;\n }\n if (triggered) {\n this.resolve_ = null;\n this.reject_ = null;\n }\n }\n }\n\n private notifyObserver_(observer: Observer): void {\n const externalState = taskStateFromInternalTaskState(this.state_);\n switch (externalState) {\n case TaskState.RUNNING:\n case TaskState.PAUSED:\n if (observer.next) {\n fbsAsync(observer.next.bind(observer, this.snapshot))();\n }\n break;\n case TaskState.SUCCESS:\n if (observer.complete) {\n fbsAsync(observer.complete.bind(observer))();\n }\n break;\n case TaskState.CANCELED:\n case TaskState.ERROR:\n if (observer.error) {\n fbsAsync(observer.error.bind(observer, this.error_ as Error))();\n }\n break;\n default:\n // TODO(andysoto): assert(false);\n if (observer.error) {\n fbsAsync(observer.error.bind(observer, this.error_ as Error))();\n }\n }\n }\n\n /**\n * Resumes a paused task. Has no effect on a currently running or failed task.\n * @return True if the operation took effect, false if ignored.\n */\n resume(): boolean {\n validate('resume', [], arguments);\n const valid =\n this.state_ === InternalTaskState.PAUSED ||\n this.state_ === InternalTaskState.PAUSING;\n if (valid) {\n this.transition_(InternalTaskState.RUNNING);\n }\n return valid;\n }\n\n /**\n * Pauses a currently running task. Has no effect on a paused or failed task.\n * @return True if the operation took effect, false if ignored.\n */\n pause(): boolean {\n validate('pause', [], arguments);\n const valid = this.state_ === InternalTaskState.RUNNING;\n if (valid) {\n this.transition_(InternalTaskState.PAUSING);\n }\n return valid;\n }\n\n /**\n * Cancels a currently running or paused task. Has no effect on a complete or\n * failed task.\n * @return True if the operation took effect, false if ignored.\n */\n cancel(): boolean {\n validate('cancel', [], arguments);\n const valid =\n this.state_ === InternalTaskState.RUNNING ||\n this.state_ === InternalTaskState.PAUSING;\n if (valid) {\n this.transition_(InternalTaskState.CANCELING);\n }\n return valid;\n }\n}\n","/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Defines the Firebase Storage Reference class.\n */\nimport { AuthWrapper } from './implementation/authwrapper';\nimport { FbsBlob } from './implementation/blob';\nimport * as errorsExports from './implementation/error';\nimport { Location } from './implementation/location';\nimport * as metadata from './implementation/metadata';\nimport * as path from './implementation/path';\nimport * as requests from './implementation/requests';\nimport {\n StringFormat,\n formatValidator,\n dataFromString\n} from './implementation/string';\nimport * as type from './implementation/type';\nimport { Metadata } from './metadata';\nimport { Service } from './service';\nimport { UploadTask } from './task';\nimport { ListOptions, ListResult } from './list';\nimport {\n listOptionSpec,\n stringSpec,\n validate,\n metadataSpec,\n uploadDataSpec\n} from './implementation/args';\n\n/**\n * Provides methods to interact with a bucket in the Firebase Storage service.\n * @param location An fbs.location, or the URL at\n * which to base this object, in one of the following forms:\n * gs:///\n * http[s]://firebasestorage.googleapis.com/\n * /b//o/\n * Any query or fragment strings will be ignored in the http[s]\n * format. If no value is passed, the storage object will use a URL based on\n * the project ID of the base firebase.App instance.\n */\nexport class Reference {\n protected location: Location;\n\n constructor(protected authWrapper: AuthWrapper, location: string | Location) {\n if (location instanceof Location) {\n this.location = location;\n } else {\n this.location = Location.makeFromUrl(location);\n }\n }\n\n /**\n * @return The URL for the bucket and path this object references,\n * in the form gs:///\n * @override\n */\n toString(): string {\n validate('toString', [], arguments);\n return 'gs://' + this.location.bucket + '/' + this.location.path;\n }\n\n protected newRef(authWrapper: AuthWrapper, location: Location): Reference {\n return new Reference(authWrapper, location);\n }\n\n protected mappings(): metadata.Mappings {\n return metadata.getMappings();\n }\n\n /**\n * @return A reference to the object obtained by\n * appending childPath, removing any duplicate, beginning, or trailing\n * slashes.\n */\n child(childPath: string): Reference {\n validate('child', [stringSpec()], arguments);\n const newPath = path.child(this.location.path, childPath);\n const location = new Location(this.location.bucket, newPath);\n return this.newRef(this.authWrapper, location);\n }\n\n /**\n * @return A reference to the parent of the\n * current object, or null if the current object is the root.\n */\n get parent(): Reference | null {\n const newPath = path.parent(this.location.path);\n if (newPath === null) {\n return null;\n }\n const location = new Location(this.location.bucket, newPath);\n return this.newRef(this.authWrapper, location);\n }\n\n /**\n * @return An reference to the root of this\n * object's bucket.\n */\n get root(): Reference {\n const location = new Location(this.location.bucket, '');\n return this.newRef(this.authWrapper, location);\n }\n\n get bucket(): string {\n return this.location.bucket;\n }\n\n get fullPath(): string {\n return this.location.path;\n }\n\n get name(): string {\n return path.lastComponent(this.location.path);\n }\n\n get storage(): Service {\n return this.authWrapper.service();\n }\n\n /**\n * Uploads a blob to this object's location.\n * @param data The blob to upload.\n * @return An UploadTask that lets you control and\n * observe the upload.\n */\n put(\n data: Blob | Uint8Array | ArrayBuffer,\n metadata: Metadata | null = null\n ): UploadTask {\n validate('put', [uploadDataSpec(), metadataSpec(true)], arguments);\n this.throwIfRoot_('put');\n return new UploadTask(\n this,\n this.authWrapper,\n this.location,\n this.mappings(),\n new FbsBlob(data),\n metadata\n );\n }\n\n /**\n * Uploads a string to this object's location.\n * @param value The string to upload.\n * @param format The format of the string to upload.\n * @return An UploadTask that lets you control and\n * observe the upload.\n */\n putString(\n value: string,\n format: StringFormat = StringFormat.RAW,\n metadata?: Metadata\n ): UploadTask {\n validate(\n 'putString',\n [stringSpec(), stringSpec(formatValidator, true), metadataSpec(true)],\n arguments\n );\n this.throwIfRoot_('putString');\n const data = dataFromString(format, value);\n const metadataClone = Object.assign({}, metadata);\n if (\n !type.isDef(metadataClone['contentType']) &&\n type.isDef(data.contentType)\n ) {\n metadataClone['contentType'] = data.contentType!;\n }\n return new UploadTask(\n this,\n this.authWrapper,\n this.location,\n this.mappings(),\n new FbsBlob(data.data, true),\n metadataClone\n );\n }\n\n /**\n * Deletes the object at this location.\n * @return A promise that resolves if the deletion succeeds.\n */\n delete(): Promise {\n validate('delete', [], arguments);\n this.throwIfRoot_('delete');\n return this.authWrapper.getAuthToken().then(authToken => {\n const requestInfo = requests.deleteObject(\n this.authWrapper,\n this.location\n );\n return this.authWrapper.makeRequest(requestInfo, authToken).getPromise();\n });\n }\n\n /**\n * List all items (files) and prefixes (folders) under this storage reference.\n *\n * This is a helper method for calling list() repeatedly until there are\n * no more results. The default pagination size is 1000.\n *\n * Note: The results may not be consistent if objects are changed while this\n * operation is running.\n *\n * Warning: listAll may potentially consume too many resources if there are\n * too many results.\n *\n * @return A Promise that resolves with all the items and prefixes under\n * the current storage reference. `prefixes` contains references to\n * sub-directories and `items` contains references to objects in this\n * folder. `nextPageToken` is never returned.\n */\n listAll(): Promise {\n validate('listAll', [], arguments);\n const accumulator = {\n prefixes: [],\n items: []\n };\n return this.listAllHelper(accumulator).then(() => accumulator);\n }\n\n private async listAllHelper(\n accumulator: ListResult,\n pageToken?: string\n ): Promise {\n const opt: ListOptions = {\n // maxResults is 1000 by default.\n pageToken\n };\n const nextPage = await this.list(opt);\n accumulator.prefixes.push(...nextPage.prefixes);\n accumulator.items.push(...nextPage.items);\n if (nextPage.nextPageToken != null) {\n await this.listAllHelper(accumulator, nextPage.nextPageToken);\n }\n }\n\n /**\n * List items (files) and prefixes (folders) under this storage reference.\n *\n * List API is only available for Firebase Rules Version 2.\n *\n * GCS is a key-blob store. Firebase Storage imposes the semantic of '/'\n * delimited folder structure.\n * Refer to GCS's List API if you want to learn more.\n *\n * To adhere to Firebase Rules's Semantics, Firebase Storage does not\n * support objects whose paths end with \"/\" or contain two consecutive\n * \"/\"s. Firebase Storage List API will filter these unsupported objects.\n * list() may fail if there are too many unsupported objects in the bucket.\n *\n * @param options See ListOptions for details.\n * @return A Promise that resolves with the items and prefixes.\n * `prefixes` contains references to sub-folders and `items`\n * contains references to objects in this folder. `nextPageToken`\n * can be used to get the rest of the results.\n */\n list(options?: ListOptions | null): Promise {\n validate('list', [listOptionSpec(true)], arguments);\n const self = this;\n return this.authWrapper.getAuthToken().then(authToken => {\n const op = options || {};\n const requestInfo = requests.list(\n self.authWrapper,\n self.location,\n /*delimiter= */ '/',\n op.pageToken,\n op.maxResults\n );\n return self.authWrapper.makeRequest(requestInfo, authToken).getPromise();\n });\n }\n\n /**\n * A promise that resolves with the metadata for this object. If this\n * object doesn't exist or metadata cannot be retreived, the promise is\n * rejected.\n */\n getMetadata(): Promise {\n validate('getMetadata', [], arguments);\n this.throwIfRoot_('getMetadata');\n return this.authWrapper.getAuthToken().then(authToken => {\n const requestInfo = requests.getMetadata(\n this.authWrapper,\n this.location,\n this.mappings()\n );\n return this.authWrapper.makeRequest(requestInfo, authToken).getPromise();\n });\n }\n\n /**\n * Updates the metadata for this object.\n * @param metadata The new metadata for the object.\n * Only values that have been explicitly set will be changed. Explicitly\n * setting a value to null will remove the metadata.\n * @return A promise that resolves\n * with the new metadata for this object.\n * @see firebaseStorage.Reference.prototype.getMetadata\n */\n updateMetadata(metadata: Metadata): Promise {\n validate('updateMetadata', [metadataSpec()], arguments);\n this.throwIfRoot_('updateMetadata');\n return this.authWrapper.getAuthToken().then(authToken => {\n const requestInfo = requests.updateMetadata(\n this.authWrapper,\n this.location,\n metadata,\n this.mappings()\n );\n return this.authWrapper.makeRequest(requestInfo, authToken).getPromise();\n });\n }\n\n /**\n * @return A promise that resolves with the download\n * URL for this object.\n */\n getDownloadURL(): Promise {\n validate('getDownloadURL', [], arguments);\n this.throwIfRoot_('getDownloadURL');\n return this.authWrapper.getAuthToken().then(authToken => {\n const requestInfo = requests.getDownloadUrl(\n this.authWrapper,\n this.location,\n this.mappings()\n );\n return this.authWrapper\n .makeRequest(requestInfo, authToken)\n .getPromise()\n .then(url => {\n if (url === null) {\n throw errorsExports.noDownloadURL();\n }\n return url;\n });\n });\n }\n\n private throwIfRoot_(name: string): void {\n if (this.location.path === '') {\n throw errorsExports.invalidRootOperation(name);\n }\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { FirebaseStorageError } from './error';\nimport { Request } from './request';\n\n/**\n * A request whose promise always fails.\n * @struct\n * @template T\n */\nexport class FailRequest implements Request {\n promise_: Promise;\n\n constructor(error: FirebaseStorageError) {\n this.promise_ = Promise.reject(error);\n }\n\n /** @inheritDoc */\n getPromise(): Promise {\n return this.promise_;\n }\n\n /** @inheritDoc */\n cancel(_appDelete = false): void {}\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Request } from './request';\nimport * as constants from './constants';\n\nexport class RequestMap {\n private readonly map: Map> = new Map();\n private id: number;\n\n constructor() {\n this.id = constants.MIN_SAFE_INTEGER;\n }\n\n /**\n * Registers the given request with this map.\n * The request is unregistered when it completes.\n *\n * @param request The request to register.\n */\n addRequest(request: Request): void {\n const id = this.id;\n this.id++;\n this.map.set(id, request);\n\n request.getPromise().then(\n () => this.map.delete(id),\n () => this.map.delete(id)\n );\n }\n\n /**\n * Cancels all registered requests.\n */\n clear(): void {\n this.map.forEach(v => {\n v && v.cancel(true);\n });\n this.map.clear();\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Reference } from '../reference';\nimport { Service } from '../service';\nimport * as constants from './constants';\nimport * as errorsExports from './error';\nimport { FailRequest } from './failrequest';\nimport { Location } from './location';\nimport { Request } from './request';\nimport { RequestInfo } from './requestinfo';\nimport { requestMaker } from './requestmaker';\nimport { RequestMap } from './requestmap';\nimport * as type from './type';\nimport { XhrIoPool } from './xhriopool';\nimport { FirebaseApp, FirebaseOptions } from '@firebase/app-types';\nimport {\n _FirebaseApp,\n FirebaseAuthTokenData\n} from '@firebase/app-types/private';\nimport { Provider } from '@firebase/component';\nimport { FirebaseAuthInternalName } from '@firebase/auth-interop-types';\n\n/**\n * @param app If null, getAuthToken always resolves with null.\n * @param service The storage service associated with this auth wrapper.\n * Untyped to avoid circular type dependencies.\n * @struct\n */\nexport class AuthWrapper {\n private app_: FirebaseApp | null;\n private authProvider_: Provider;\n private bucket_: string | null = null;\n private appId_: string | null = null;\n\n private storageRefMaker_: (p1: AuthWrapper, p2: Location) => Reference;\n private requestMaker_: requestMaker;\n private pool_: XhrIoPool;\n private service_: Service;\n private maxOperationRetryTime_: number;\n private maxUploadRetryTime_: number;\n private requestMap_: RequestMap;\n private deleted_: boolean = false;\n\n constructor(\n app: FirebaseApp | null,\n authProvider: Provider,\n maker: (p1: AuthWrapper, p2: Location) => Reference,\n requestMaker: requestMaker,\n service: Service,\n pool: XhrIoPool\n ) {\n this.app_ = app;\n if (this.app_ !== null) {\n const options = this.app_.options;\n if (type.isDef(options)) {\n this.bucket_ = AuthWrapper.extractBucket_(options);\n this.appId_ = options.appId ?? null;\n }\n }\n this.authProvider_ = authProvider;\n this.storageRefMaker_ = maker;\n this.requestMaker_ = requestMaker;\n this.pool_ = pool;\n this.service_ = service;\n this.maxOperationRetryTime_ = constants.DEFAULT_MAX_OPERATION_RETRY_TIME;\n this.maxUploadRetryTime_ = constants.DEFAULT_MAX_UPLOAD_RETRY_TIME;\n this.requestMap_ = new RequestMap();\n }\n\n private static extractBucket_(config: FirebaseOptions): string | null {\n const bucketString = config[constants.CONFIG_STORAGE_BUCKET_KEY] || null;\n if (bucketString == null) {\n return null;\n }\n const loc: Location = Location.makeFromBucketSpec(bucketString);\n return loc.bucket;\n }\n\n getAuthToken(): Promise {\n const auth = this.authProvider_.getImmediate({ optional: true });\n if (auth) {\n return auth.getToken().then(\n (response: FirebaseAuthTokenData | null): string | null => {\n if (response !== null) {\n return response.accessToken;\n } else {\n return null;\n }\n },\n () => null\n );\n } else {\n return Promise.resolve(null);\n }\n }\n\n bucket(): string | null {\n if (this.deleted_) {\n throw errorsExports.appDeleted();\n } else {\n return this.bucket_;\n }\n }\n\n /**\n * The service associated with this auth wrapper. Untyped to avoid circular\n * type dependencies.\n */\n service(): Service {\n return this.service_;\n }\n\n /**\n * Returns a new firebaseStorage.Reference object referencing this AuthWrapper\n * at the given Location.\n * @param loc The Location.\n * @return Actually a firebaseStorage.Reference, typing not allowed\n * because of circular dependency problems.\n */\n makeStorageReference(loc: Location): Reference {\n return this.storageRefMaker_(this, loc);\n }\n\n makeRequest(\n requestInfo: RequestInfo,\n authToken: string | null\n ): Request {\n if (!this.deleted_) {\n const request = this.requestMaker_(\n requestInfo,\n this.appId_,\n authToken,\n this.pool_\n );\n this.requestMap_.addRequest(request);\n return request;\n } else {\n return new FailRequest(errorsExports.appDeleted());\n }\n }\n\n /**\n * Stop running requests and prevent more from being created.\n */\n deleteApp(): void {\n this.deleted_ = true;\n this.app_ = null;\n this.requestMap_.clear();\n }\n\n maxUploadRetryTime(): number {\n return this.maxUploadRetryTime_;\n }\n\n setMaxUploadRetryTime(time: number): void {\n this.maxUploadRetryTime_ = time;\n }\n\n maxOperationRetryTime(): number {\n return this.maxOperationRetryTime_;\n }\n\n setMaxOperationRetryTime(time: number): void {\n this.maxOperationRetryTime_ = time;\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Provides a method for running a function with exponential\n * backoff.\n */\ntype id = (p1: boolean) => void;\n\nexport { id };\n\n/**\n * @param f May be invoked\n * before the function returns.\n * @param callback Get all the arguments passed to the function\n * passed to f, including the initial boolean.\n */\nexport function start(\n f: (p1: (success: boolean) => void, canceled: boolean) => void,\n callback: Function,\n timeout: number\n): id {\n // TODO(andysoto): make this code cleaner (probably refactor into an actual\n // type instead of a bunch of functions with state shared in the closure)\n let waitSeconds = 1;\n // Would type this as \"number\" but that doesn't work for Node so ¯\\_(ツ)_/¯\n // TODO: find a way to exclude Node type definition for storage because storage only works in browser\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let timeoutId: any = null;\n let hitTimeout = false;\n let cancelState = 0;\n\n function canceled(): boolean {\n return cancelState === 2;\n }\n let triggeredCallback = false;\n\n // TODO: This disable can be removed and the 'ignoreRestArgs' option added to\n // the no-explicit-any rule when ESlint releases it.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function triggerCallback(...args: any[]): void {\n if (!triggeredCallback) {\n triggeredCallback = true;\n callback.apply(null, args);\n }\n }\n\n function callWithDelay(millis: number): void {\n timeoutId = setTimeout(() => {\n timeoutId = null;\n f(handler, canceled());\n }, millis);\n }\n\n // TODO: This disable can be removed and the 'ignoreRestArgs' option added to\n // the no-explicit-any rule when ESlint releases it.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function handler(success: boolean, ...args: any[]): void {\n if (triggeredCallback) {\n return;\n }\n if (success) {\n triggerCallback.call(null, success, ...args);\n return;\n }\n const mustStop = canceled() || hitTimeout;\n if (mustStop) {\n triggerCallback.call(null, success, ...args);\n return;\n }\n if (waitSeconds < 64) {\n /* TODO(andysoto): don't back off so quickly if we know we're offline. */\n waitSeconds *= 2;\n }\n let waitMillis;\n if (cancelState === 1) {\n cancelState = 2;\n waitMillis = 0;\n } else {\n waitMillis = (waitSeconds + Math.random()) * 1000;\n }\n callWithDelay(waitMillis);\n }\n let stopped = false;\n\n function stop(wasTimeout: boolean): void {\n if (stopped) {\n return;\n }\n stopped = true;\n if (triggeredCallback) {\n return;\n }\n if (timeoutId !== null) {\n if (!wasTimeout) {\n cancelState = 2;\n }\n clearTimeout(timeoutId);\n callWithDelay(0);\n } else {\n if (!wasTimeout) {\n cancelState = 1;\n }\n }\n }\n callWithDelay(0);\n setTimeout(() => {\n hitTimeout = true;\n stop(true);\n }, timeout);\n return stop;\n}\n\n/**\n * Stops the retry loop from repeating.\n * If the function is currently \"in between\" retries, it is invoked immediately\n * with the second parameter as \"true\". Otherwise, it will be invoked once more\n * after the current invocation finishes iff the current invocation would have\n * triggered another retry.\n */\nexport function stop(id: id): void {\n id(false);\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Defines methods used to actually send HTTP requests from\n * abstract representations.\n */\n\nimport firebase from '@firebase/app';\nimport * as backoff from './backoff';\nimport {\n FirebaseStorageError,\n unknown,\n appDeleted,\n canceled,\n retryLimitExceeded\n} from './error';\nimport { RequestInfo } from './requestinfo';\nimport * as type from './type';\nimport * as UrlUtils from './url';\nimport { Headers, XhrIo, ErrorCode } from './xhrio';\nimport { XhrIoPool } from './xhriopool';\n\n/**\n * @template T\n */\nexport interface Request {\n getPromise(): Promise;\n\n /**\n * Cancels the request. IMPORTANT: the promise may still be resolved with an\n * appropriate value (if the request is finished before you call this method,\n * but the promise has not yet been resolved), so don't just assume it will be\n * rejected if you call this function.\n * @param appDelete True if the cancelation came from the app being deleted.\n */\n cancel(appDelete?: boolean): void;\n}\n\n/**\n * @struct\n * @template T\n */\nclass NetworkRequest implements Request {\n private url_: string;\n private method_: string;\n private headers_: Headers;\n private body_: string | Blob | Uint8Array | null;\n private successCodes_: number[];\n private additionalRetryCodes_: number[];\n private pendingXhr_: XhrIo | null = null;\n private backoffId_: backoff.id | null = null;\n private resolve_: Function | null = null;\n private reject_: Function | null = null;\n private canceled_: boolean = false;\n private appDelete_: boolean = false;\n private callback_: (p1: XhrIo, p2: string) => T;\n private errorCallback_:\n | ((p1: XhrIo, p2: FirebaseStorageError) => FirebaseStorageError)\n | null;\n private progressCallback_: ((p1: number, p2: number) => void) | null;\n private timeout_: number;\n private pool_: XhrIoPool;\n promise_: Promise;\n\n constructor(\n url: string,\n method: string,\n headers: Headers,\n body: string | Blob | Uint8Array | null,\n successCodes: number[],\n additionalRetryCodes: number[],\n callback: (p1: XhrIo, p2: string) => T,\n errorCallback:\n | ((p1: XhrIo, p2: FirebaseStorageError) => FirebaseStorageError)\n | null,\n timeout: number,\n progressCallback: ((p1: number, p2: number) => void) | null,\n pool: XhrIoPool\n ) {\n this.url_ = url;\n this.method_ = method;\n this.headers_ = headers;\n this.body_ = body;\n this.successCodes_ = successCodes.slice();\n this.additionalRetryCodes_ = additionalRetryCodes.slice();\n this.callback_ = callback;\n this.errorCallback_ = errorCallback;\n this.progressCallback_ = progressCallback;\n this.timeout_ = timeout;\n this.pool_ = pool;\n this.promise_ = new Promise((resolve, reject) => {\n this.resolve_ = resolve;\n this.reject_ = reject;\n this.start_();\n });\n }\n\n /**\n * Actually starts the retry loop.\n */\n private start_(): void {\n const self = this;\n\n function doTheRequest(\n backoffCallback: (p1: boolean, ...p2: unknown[]) => void,\n canceled: boolean\n ): void {\n if (canceled) {\n backoffCallback(false, new RequestEndStatus(false, null, true));\n return;\n }\n const xhr = self.pool_.createXhrIo();\n self.pendingXhr_ = xhr;\n\n function progressListener(progressEvent: ProgressEvent): void {\n const loaded = progressEvent.loaded;\n const total = progressEvent.lengthComputable ? progressEvent.total : -1;\n if (self.progressCallback_ !== null) {\n self.progressCallback_(loaded, total);\n }\n }\n if (self.progressCallback_ !== null) {\n xhr.addUploadProgressListener(progressListener);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n xhr\n .send(self.url_, self.method_, self.body_, self.headers_)\n .then((xhr: XhrIo) => {\n if (self.progressCallback_ !== null) {\n xhr.removeUploadProgressListener(progressListener);\n }\n self.pendingXhr_ = null;\n xhr = xhr as XhrIo;\n const hitServer = xhr.getErrorCode() === ErrorCode.NO_ERROR;\n const status = xhr.getStatus();\n if (!hitServer || self.isRetryStatusCode_(status)) {\n const wasCanceled = xhr.getErrorCode() === ErrorCode.ABORT;\n backoffCallback(\n false,\n new RequestEndStatus(false, null, wasCanceled)\n );\n return;\n }\n const successCode = self.successCodes_.indexOf(status) !== -1;\n backoffCallback(true, new RequestEndStatus(successCode, xhr));\n });\n }\n\n /**\n * @param requestWentThrough True if the request eventually went\n * through, false if it hit the retry limit or was canceled.\n */\n function backoffDone(\n requestWentThrough: boolean,\n status: RequestEndStatus\n ): void {\n const resolve = self.resolve_ as Function;\n const reject = self.reject_ as Function;\n const xhr = status.xhr as XhrIo;\n if (status.wasSuccessCode) {\n try {\n const result = self.callback_(xhr, xhr.getResponseText());\n if (type.isJustDef(result)) {\n resolve(result);\n } else {\n resolve();\n }\n } catch (e) {\n reject(e);\n }\n } else {\n if (xhr !== null) {\n const err = unknown();\n err.setServerResponseProp(xhr.getResponseText());\n if (self.errorCallback_) {\n reject(self.errorCallback_(xhr, err));\n } else {\n reject(err);\n }\n } else {\n if (status.canceled) {\n const err = self.appDelete_ ? appDeleted() : canceled();\n reject(err);\n } else {\n const err = retryLimitExceeded();\n reject(err);\n }\n }\n }\n }\n if (this.canceled_) {\n backoffDone(false, new RequestEndStatus(false, null, true));\n } else {\n this.backoffId_ = backoff.start(doTheRequest, backoffDone, this.timeout_);\n }\n }\n\n /** @inheritDoc */\n getPromise(): Promise {\n return this.promise_;\n }\n\n /** @inheritDoc */\n cancel(appDelete?: boolean): void {\n this.canceled_ = true;\n this.appDelete_ = appDelete || false;\n if (this.backoffId_ !== null) {\n backoff.stop(this.backoffId_);\n }\n if (this.pendingXhr_ !== null) {\n this.pendingXhr_.abort();\n }\n }\n\n private isRetryStatusCode_(status: number): boolean {\n // The codes for which to retry came from this page:\n // https://cloud.google.com/storage/docs/exponential-backoff\n const isFiveHundredCode = status >= 500 && status < 600;\n const extraRetryCodes = [\n // Request Timeout: web server didn't receive full request in time.\n 408,\n // Too Many Requests: you're getting rate-limited, basically.\n 429\n ];\n const isExtraRetryCode = extraRetryCodes.indexOf(status) !== -1;\n const isRequestSpecificRetryCode =\n this.additionalRetryCodes_.indexOf(status) !== -1;\n return isFiveHundredCode || isExtraRetryCode || isRequestSpecificRetryCode;\n }\n}\n\n/**\n * A collection of information about the result of a network request.\n * @param opt_canceled Defaults to false.\n * @struct\n */\nexport class RequestEndStatus {\n /**\n * True if the request was canceled.\n */\n canceled: boolean;\n\n constructor(\n public wasSuccessCode: boolean,\n public xhr: XhrIo | null,\n canceled?: boolean\n ) {\n this.canceled = !!canceled;\n }\n}\n\nexport function addAuthHeader_(\n headers: Headers,\n authToken: string | null\n): void {\n if (authToken !== null && authToken.length > 0) {\n headers['Authorization'] = 'Firebase ' + authToken;\n }\n}\n\nexport function addVersionHeader_(headers: Headers): void {\n const version =\n typeof firebase !== 'undefined' ? firebase.SDK_VERSION : 'AppManager';\n headers['X-Firebase-Storage-Version'] = 'webjs/' + version;\n}\n\nexport function addGmpidHeader_(headers: Headers, appId: string | null): void {\n if (appId) {\n headers['X-Firebase-GMPID'] = appId;\n }\n}\n\n/**\n * @template T\n */\nexport function makeRequest(\n requestInfo: RequestInfo,\n appId: string | null,\n authToken: string | null,\n pool: XhrIoPool\n): Request {\n const queryPart = UrlUtils.makeQueryString(requestInfo.urlParams);\n const url = requestInfo.url + queryPart;\n const headers = Object.assign({}, requestInfo.headers);\n addGmpidHeader_(headers, appId);\n addAuthHeader_(headers, authToken);\n addVersionHeader_(headers);\n return new NetworkRequest(\n url,\n requestInfo.method,\n headers,\n requestInfo.body,\n requestInfo.successCodes,\n requestInfo.additionalRetryCodes,\n requestInfo.handler,\n requestInfo.errorHandler,\n requestInfo.timeout,\n requestInfo.progressCallback,\n pool\n );\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FirebaseApp } from '@firebase/app-types';\nimport * as args from './implementation/args';\nimport { AuthWrapper } from './implementation/authwrapper';\nimport { Location } from './implementation/location';\nimport * as RequestExports from './implementation/request';\nimport { XhrIoPool } from './implementation/xhriopool';\nimport { Reference } from './reference';\nimport { Provider } from '@firebase/component';\nimport { FirebaseAuthInternalName } from '@firebase/auth-interop-types';\n\n/**\n * A service that provides firebaseStorage.Reference instances.\n * @param opt_url gs:// url to a custom Storage Bucket\n *\n * @struct\n */\nexport class Service {\n authWrapper_: AuthWrapper;\n private app_: FirebaseApp;\n private bucket_: Location | null = null;\n private internals_: ServiceInternals;\n\n constructor(\n app: FirebaseApp,\n authProvider: Provider,\n pool: XhrIoPool,\n url?: string\n ) {\n function maker(authWrapper: AuthWrapper, loc: Location): Reference {\n return new Reference(authWrapper, loc);\n }\n this.authWrapper_ = new AuthWrapper(\n app,\n authProvider,\n maker,\n RequestExports.makeRequest,\n this,\n pool\n );\n this.app_ = app;\n if (url != null) {\n this.bucket_ = Location.makeFromBucketSpec(url);\n } else {\n const authWrapperBucket = this.authWrapper_.bucket();\n if (authWrapperBucket != null) {\n this.bucket_ = new Location(authWrapperBucket, '');\n }\n }\n this.internals_ = new ServiceInternals(this);\n }\n\n /**\n * Returns a firebaseStorage.Reference for the given path in the default\n * bucket.\n */\n ref(path?: string): Reference {\n function validator(path: unknown): void {\n if (typeof path !== 'string') {\n throw 'Path is not a string.';\n }\n if (/^[A-Za-z]+:\\/\\//.test(path as string)) {\n throw 'Expected child path but got a URL, use refFromURL instead.';\n }\n }\n args.validate('ref', [args.stringSpec(validator, true)], arguments);\n if (this.bucket_ == null) {\n throw new Error('No Storage Bucket defined in Firebase Options.');\n }\n\n const ref = new Reference(this.authWrapper_, this.bucket_);\n if (path != null) {\n return ref.child(path);\n } else {\n return ref;\n }\n }\n\n /**\n * Returns a firebaseStorage.Reference object for the given absolute URL,\n * which must be a gs:// or http[s]:// URL.\n */\n refFromURL(url: string): Reference {\n function validator(p: unknown): void {\n if (typeof p !== 'string') {\n throw 'Path is not a string.';\n }\n if (!/^[A-Za-z]+:\\/\\//.test(p as string)) {\n throw 'Expected full URL but got a child path, use ref instead.';\n }\n try {\n Location.makeFromUrl(p as string);\n } catch (e) {\n throw 'Expected valid full URL but got an invalid one.';\n }\n }\n args.validate('refFromURL', [args.stringSpec(validator, false)], arguments);\n return new Reference(this.authWrapper_, url);\n }\n\n get maxUploadRetryTime(): number {\n return this.authWrapper_.maxUploadRetryTime();\n }\n\n setMaxUploadRetryTime(time: number): void {\n args.validate(\n 'setMaxUploadRetryTime',\n [args.nonNegativeNumberSpec()],\n arguments\n );\n this.authWrapper_.setMaxUploadRetryTime(time);\n }\n\n setMaxOperationRetryTime(time: number): void {\n args.validate(\n 'setMaxOperationRetryTime',\n [args.nonNegativeNumberSpec()],\n arguments\n );\n this.authWrapper_.setMaxOperationRetryTime(time);\n }\n\n get app(): FirebaseApp {\n return this.app_;\n }\n\n get INTERNAL(): ServiceInternals {\n return this.internals_;\n }\n}\n\n/**\n * @struct\n */\nexport class ServiceInternals {\n service_: Service;\n\n constructor(service: Service) {\n this.service_ = service;\n }\n\n /**\n * Called when the associated app is deleted.\n * @see {!fbs.AuthWrapper.prototype.deleteApp}\n */\n delete(): Promise {\n this.service_.authWrapper_.deleteApp();\n return Promise.resolve();\n }\n}\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport firebase from '@firebase/app';\nimport { _FirebaseNamespace } from '@firebase/app-types/private';\nimport { StringFormat } from './src/implementation/string';\nimport { TaskEvent, TaskState } from './src/implementation/taskenums';\n\nimport { XhrIoPool } from './src/implementation/xhriopool';\nimport { Reference } from './src/reference';\nimport { Service } from './src/service';\nimport * as types from '@firebase/storage-types';\nimport {\n Component,\n ComponentType,\n ComponentContainer\n} from '@firebase/component';\n\nimport { name, version } from './package.json';\n\n/**\n * Type constant for Firebase Storage.\n */\nconst STORAGE_TYPE = 'storage';\n\nfunction factory(\n container: ComponentContainer,\n url?: string\n): types.FirebaseStorage {\n // Dependencies\n const app = container.getProvider('app').getImmediate();\n const authProvider = container.getProvider('auth-internal');\n\n return (new Service(\n app,\n authProvider,\n new XhrIoPool(),\n url\n ) as unknown) as types.FirebaseStorage;\n}\n\nexport function registerStorage(instance: _FirebaseNamespace): void {\n const namespaceExports = {\n // no-inline\n TaskState,\n TaskEvent,\n StringFormat,\n Storage: Service,\n Reference\n };\n instance.INTERNAL.registerComponent(\n new Component(STORAGE_TYPE, factory, ComponentType.PUBLIC)\n .setServiceProps(namespaceExports)\n .setMultipleInstances(true)\n );\n\n instance.registerVersion(name, version);\n}\n\nregisterStorage(firebase as _FirebaseNamespace);\n\n/**\n * Define extension behavior for `registerStorage`\n */\ndeclare module '@firebase/app-types' {\n interface FirebaseNamespace {\n storage?: {\n (app?: FirebaseApp): types.FirebaseStorage;\n Storage: typeof types.FirebaseStorage;\n\n StringFormat: {\n BASE64: types.StringFormat;\n BASE64URL: types.StringFormat;\n DATA_URL: types.StringFormat;\n RAW: types.StringFormat;\n };\n TaskEvent: {\n STATE_CHANGED: types.TaskEvent;\n };\n TaskState: {\n CANCELED: types.TaskState;\n ERROR: types.TaskState;\n PAUSED: types.TaskState;\n RUNNING: types.TaskState;\n SUCCESS: types.TaskState;\n };\n };\n }\n interface FirebaseApp {\n storage?(storageBucket?: string): types.FirebaseStorage;\n }\n}\n"],"names":["errorsExports.unknown","errorsExports.invalidFormat","errorsExports.internalError","type.isDef","type.isNativeBlobDefined","type.isNativeBlob","fs.sliceBlob","fs.getBlob","type.isString","errorsExports.invalidDefaultBucket","errorsExports.invalidUrl","type.isNonArrayObject","path.lastComponent","json.jsonObjectOrNull","UrlUtils.makeUrl","UrlUtils.makeQueryString","type.isObject","type.isNonNullObject","type.isInteger","MetadataUtils.fromResourceString","ListResultUtils.fromResponseString","MetadataUtils.downloadUrlFromResourceString","MetadataUtils.toResourceString","type.isFunction","errorsExports.invalidArgumentCount","errorsExports.invalidArgument","type.isJustDef","MetadataUtils.metadataValidator","ListOptionsUtils.listOptionsValidator","type.isNumber","fbsRequests.createResumableUpload","fbsRequests.getResumableUploadStatus","fbsRequests.resumableUploadChunkSize","fbsRequests.ResumableUploadStatus","fbsRequests.continueResumableUpload","fbsRequests.getMetadata","fbsRequests.multipartUpload","typeUtils.isJustDef","fbsAsync","metadata.getMappings","path.child","path.parent","requests.deleteObject","requests.list","requests.getMetadata","requests.updateMetadata","requests.getDownloadUrl","errorsExports.noDownloadURL","errorsExports.invalidRootOperation","constants.MIN_SAFE_INTEGER","constants.DEFAULT_MAX_OPERATION_RETRY_TIME","constants.DEFAULT_MAX_UPLOAD_RETRY_TIME","constants.CONFIG_STORAGE_BUCKET_KEY","errorsExports.appDeleted","backoff.start","backoff.stop","RequestExports.makeRequest","args.validate","args.stringSpec","args.nonNegativeNumberSpec"],"mappings":"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"}