{"version":3,"file":"azure-storage-blob.min.js","sources":["../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/httpHeaders.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/util/base64.browser.ts","../../../../common/temp/node_modules/.registry.npmjs.org/uuid/3.3.3/node_modules/uuid/lib/bytesToUuid.js","../../../../common/temp/node_modules/.registry.npmjs.org/uuid/3.3.3/node_modules/uuid/lib/rng-browser.js","../../../../common/temp/node_modules/.registry.npmjs.org/uuid/3.3.3/node_modules/uuid/v4.js","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/util/constants.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/util/utils.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/serializer.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/webResource.ts","../../../../common/temp/node_modules/.registry.npmjs.org/tslib/1.10.0/node_modules/tslib/tslib.es6.js","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/httpPipelineLogLevel.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/restError.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/xhrHttpClient.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/operationParameter.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/operationSpec.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/util/xml.browser.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/policies/requestPolicy.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/policies/deserializationPolicy.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/policies/exponentialRetryPolicy.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/policies/generateClientRequestIdPolicy.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/policies/msRestUserAgentPolicy.browser.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/policies/userAgentPolicy.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/url.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/policies/redirectPolicy.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/policies/rpRegistrationPolicy.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/policies/signingPolicy.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/policies/systemErrorRetryPolicy.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/queryCollectionFormat.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/policies/proxyPolicy.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/policies/throttlingRetryPolicy.ts","../../../../common/temp/node_modules/.registry.npmjs.org/@azure/ms-rest-js/2.0.4/node_modules/@azure/ms-rest-js/lib/serviceClient.ts","../src/Aborter.ts","../src/generated/src/models/mappers.ts","../src/generated/src/models/parameters.ts","../src/generated/src/operations/service.ts","../src/generated/src/operations/container.ts","../src/generated/src/operations/blob.ts","../src/generated/src/operations/pageBlob.ts","../src/generated/src/operations/appendBlob.ts","../src/generated/src/operations/blockBlob.ts","../src/IRange.ts","../src/utils/constants.ts","../src/models.ts","../src/utils/utils.common.ts","../src/policies/BrowserPolicy.ts","../src/policies/RetryPolicy.ts","../src/BrowserPolicyFactory.ts","../src/credentials/Credential.ts","../src/generated/src/storageClientContext.ts","../src/policies/KeepAlivePolicy.ts","../src/KeepAlivePolicyFactory.ts","../src/policies/LoggingPolicy.ts","../src/LoggingPolicyFactory.ts","../src/Pipeline.ts","../src/utils/Mutex.ts","../src/RetryPolicyFactory.ts","../src/policies/TelemetryPolicy.ts","../src/TelemetryPolicyFactory.ts","../src/policies/UniqueRequestIDPolicy.ts","../src/UniqueRequestIDPolicyFactory.ts","../src/policies/CredentialPolicy.ts","../src/policies/AnonymousCredentialPolicy.ts","../src/credentials/AnonymousCredential.ts","../src/StorageURL.ts","../src/BlobURL.ts","../src/BlobDownloadResponse.browser.ts","../src/AppendBlobURL.ts","../../../../common/temp/node_modules/.registry.npmjs.org/events/3.0.0/node_modules/events/events.js","../src/BatchRequest.ts","../src/BlockBlobURL.ts","../src/ContainerURL.ts","../src/policies/TokenCredentialPolicy.ts","../src/credentials/TokenCredential.ts","../src/utils/Batch.ts","../src/highlevel.browser.ts","../src/PageBlobURL.ts","../src/utils/utils.browser.ts","../src/BatchUtils.browser.ts","../src/BatchResponseParser.ts","../src/ServiceURL.ts"],"sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\n/**\n * A collection of HttpHeaders that can be sent with a HTTP request.\n */\nfunction getHeaderKey(headerName: string) {\n return headerName.toLowerCase();\n}\n\n/**\n * An individual header within a HttpHeaders collection.\n */\nexport interface HttpHeader {\n /**\n * The name of the header.\n */\n name: string;\n\n /**\n * The value of the header.\n */\n value: string;\n}\n\n/**\n * A HttpHeaders collection represented as a simple JSON object.\n */\nexport type RawHttpHeaders = { [headerName: string]: string };\n\n/**\n * A collection of HTTP header key/value pairs.\n */\nexport class HttpHeaders {\n private readonly _headersMap: { [headerKey: string]: HttpHeader };\n\n constructor(rawHeaders?: RawHttpHeaders) {\n this._headersMap = {};\n if (rawHeaders) {\n for (const headerName in rawHeaders) {\n this.set(headerName, rawHeaders[headerName]);\n }\n }\n }\n\n /**\n * Set a header in this collection with the provided name and value. The name is\n * case-insensitive.\n * @param headerName The name of the header to set. This value is case-insensitive.\n * @param headerValue The value of the header to set.\n */\n public set(headerName: string, headerValue: string | number): void {\n this._headersMap[getHeaderKey(headerName)] = { name: headerName, value: headerValue.toString() };\n }\n\n /**\n * Get the header value for the provided header name, or undefined if no header exists in this\n * collection with the provided name.\n * @param headerName The name of the header.\n */\n public get(headerName: string): string | undefined {\n const header: HttpHeader = this._headersMap[getHeaderKey(headerName)];\n return !header ? undefined : header.value;\n }\n\n /**\n * Get whether or not this header collection contains a header entry for the provided header name.\n */\n public contains(headerName: string): boolean {\n return !!this._headersMap[getHeaderKey(headerName)];\n }\n\n /**\n * Remove the header with the provided headerName. Return whether or not the header existed and\n * was removed.\n * @param headerName The name of the header to remove.\n */\n public remove(headerName: string): boolean {\n const result: boolean = this.contains(headerName);\n delete this._headersMap[getHeaderKey(headerName)];\n return result;\n }\n\n /**\n * Get the headers that are contained this collection as an object.\n */\n public rawHeaders(): RawHttpHeaders {\n const result: RawHttpHeaders = {};\n for (const headerKey in this._headersMap) {\n const header: HttpHeader = this._headersMap[headerKey];\n result[header.name.toLowerCase()] = header.value;\n }\n return result;\n }\n\n /**\n * Get the headers that are contained in this collection as an array.\n */\n public headersArray(): HttpHeader[] {\n const headers: HttpHeader[] = [];\n for (const headerKey in this._headersMap) {\n headers.push(this._headersMap[headerKey]);\n }\n return headers;\n }\n\n /**\n * Get the header names that are contained in this collection.\n */\n public headerNames(): string[] {\n const headerNames: string[] = [];\n const headers: HttpHeader[] = this.headersArray();\n for (let i = 0; i < headers.length; ++i) {\n headerNames.push(headers[i].name);\n }\n return headerNames;\n }\n\n /**\n * Get the header names that are contained in this collection.\n */\n public headerValues(): string[] {\n const headerValues: string[] = [];\n const headers: HttpHeader[] = this.headersArray();\n for (let i = 0; i < headers.length; ++i) {\n headerValues.push(headers[i].value);\n }\n return headerValues;\n }\n\n /**\n * Get the JSON object representation of this HTTP header collection.\n */\n public toJson(): RawHttpHeaders {\n return this.rawHeaders();\n }\n\n /**\n * Get the string representation of this HTTP header collection.\n */\n public toString(): string {\n return JSON.stringify(this.toJson());\n }\n\n /**\n * Create a deep clone/copy of this HttpHeaders collection.\n */\n public clone(): HttpHeaders {\n return new HttpHeaders(this.rawHeaders());\n }\n}\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\n/**\n * Encodes a string in base64 format.\n * @param value the string to encode\n */\nexport function encodeString(value: string): string {\n return btoa(value);\n}\n\n/**\n * Encodes a byte array in base64 format.\n * @param value the Uint8Aray to encode\n */\nexport function encodeByteArray(value: Uint8Array): string {\n let str = \"\";\n for (let i = 0; i < value.length; i++) {\n str += String.fromCharCode(value[i]);\n }\n return btoa(str);\n}\n\n/**\n * Decodes a base64 string into a byte array.\n * @param value the base64 string to decode\n */\nexport function decodeString(value: string): Uint8Array {\n const byteString = atob(value);\n const arr = new Uint8Array(byteString.length);\n for (let i = 0; i < byteString.length; i++) {\n arr[i] = byteString.charCodeAt(i);\n }\n return arr;\n}\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([bth[buf[i++]], bth[buf[i++]], \n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]]]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nexport const Constants = {\n /**\n * The ms-rest version\n * @const\n * @type {string}\n */\n msRestVersion: \"2.0.4\",\n\n /**\n * Specifies HTTP.\n *\n * @const\n * @type {string}\n */\n HTTP: \"http:\",\n\n /**\n * Specifies HTTPS.\n *\n * @const\n * @type {string}\n */\n HTTPS: \"https:\",\n\n /**\n * Specifies HTTP Proxy.\n *\n * @const\n * @type {string}\n */\n HTTP_PROXY: \"HTTP_PROXY\",\n\n /**\n * Specifies HTTPS Proxy.\n *\n * @const\n * @type {string}\n */\n HTTPS_PROXY: \"HTTPS_PROXY\",\n\n HttpConstants: {\n /**\n * Http Verbs\n *\n * @const\n * @enum {string}\n */\n HttpVerbs: {\n PUT: \"PUT\",\n GET: \"GET\",\n DELETE: \"DELETE\",\n POST: \"POST\",\n MERGE: \"MERGE\",\n HEAD: \"HEAD\",\n PATCH: \"PATCH\"\n },\n\n StatusCodes: {\n TooManyRequests: 429\n }\n },\n\n /**\n * Defines constants for use with HTTP headers.\n */\n HeaderConstants: {\n /**\n * The Authorization header.\n *\n * @const\n * @type {string}\n */\n AUTHORIZATION: \"authorization\",\n\n AUTHORIZATION_SCHEME: \"Bearer\",\n\n /**\n * The Retry-After response-header field can be used with a 503 (Service\n * Unavailable) or 349 (Too Many Requests) responses to indicate how long\n * the service is expected to be unavailable to the requesting client.\n *\n * @const\n * @type {string}\n */\n RETRY_AFTER: \"Retry-After\",\n\n /**\n * The UserAgent header.\n *\n * @const\n * @type {string}\n */\n USER_AGENT: \"User-Agent\"\n }\n};\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport uuidv4 from \"uuid/v4\";\nimport { HttpOperationResponse } from \"../httpOperationResponse\";\nimport { RestError } from \"../restError\";\nimport { WebResource } from \"../webResource\";\nimport { Constants } from \"./constants\";\n\n/**\n * A constant that indicates whether the environment is node.js or browser based.\n */\nexport const isNode = (typeof process !== \"undefined\") && !!process.version && !!process.versions && !!process.versions.node;\n\n/**\n * Checks if a parsed URL is HTTPS\n *\n * @param {object} urlToCheck The url to check\n * @return {boolean} True if the URL is HTTPS; false otherwise.\n */\nexport function urlIsHTTPS(urlToCheck: { protocol: string }): boolean {\n return urlToCheck.protocol.toLowerCase() === Constants.HTTPS;\n}\n\n/**\n * Encodes an URI.\n *\n * @param {string} uri The URI to be encoded.\n * @return {string} The encoded URI.\n */\nexport function encodeUri(uri: string): string {\n return encodeURIComponent(uri)\n .replace(/!/g, \"%21\")\n .replace(/\"/g, \"%27\")\n .replace(/\\(/g, \"%28\")\n .replace(/\\)/g, \"%29\")\n .replace(/\\*/g, \"%2A\");\n}\n\n/**\n * Returns a stripped version of the Http Response which only contains body,\n * headers and the status.\n *\n * @param {HttpOperationResponse} response The Http Response\n *\n * @return {object} The stripped version of Http Response.\n */\nexport function stripResponse(response: HttpOperationResponse): any {\n const strippedResponse: any = {};\n strippedResponse.body = response.bodyAsText;\n strippedResponse.headers = response.headers;\n strippedResponse.status = response.status;\n return strippedResponse;\n}\n\n/**\n * Returns a stripped version of the Http Request that does not contain the\n * Authorization header.\n *\n * @param {WebResource} request The Http Request object\n *\n * @return {WebResource} The stripped version of Http Request.\n */\nexport function stripRequest(request: WebResource): WebResource {\n const strippedRequest = request.clone();\n if (strippedRequest.headers) {\n strippedRequest.headers.remove(\"authorization\");\n }\n return strippedRequest;\n}\n\n/**\n * Validates the given uuid as a string\n *\n * @param {string} uuid The uuid as a string that needs to be validated\n *\n * @return {boolean} True if the uuid is valid; false otherwise.\n */\nexport function isValidUuid(uuid: string): boolean {\n const validUuidRegex = new RegExp(\"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$\", \"ig\");\n return validUuidRegex.test(uuid);\n}\n\n/**\n * Provides an array of values of an object. For example\n * for a given object { \"a\": \"foo\", \"b\": \"bar\" }, the method returns [\"foo\", \"bar\"].\n *\n * @param {object} obj An object whose properties need to be enumerated so that it\"s values can be provided as an array\n *\n * @return {any[]} An array of values of the given object.\n */\nexport function objectValues(obj: { [key: string]: any; }): any[] {\n const result: any[] = [];\n if (obj && obj instanceof Object) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n result.push((obj)[key]);\n }\n }\n } else {\n throw new Error(`The provided object ${JSON.stringify(obj, undefined, 2)} is not a valid object that can be ` +\n `enumerated to provide its values as an array.`);\n }\n return result;\n}\n\n/**\n * Generated UUID\n *\n * @return {string} RFC4122 v4 UUID.\n */\nexport function generateUuid(): string {\n return uuidv4();\n}\n\n/**\n * Executes an array of promises sequentially. Inspiration of this method is here:\n * https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html. An awesome blog on promises!\n *\n * @param {Array} promiseFactories An array of promise factories(A function that return a promise)\n *\n * @param {any} [kickstart] Input to the first promise that is used to kickstart the promise chain.\n * If not provided then the promise chain starts with undefined.\n *\n * @return A chain of resolved or rejected promises\n */\nexport function executePromisesSequentially(promiseFactories: Array, kickstart: any) {\n let result = Promise.resolve(kickstart);\n promiseFactories.forEach((promiseFactory) => {\n result = result.then(promiseFactory);\n });\n return result;\n}\n\n/**\n * Merges source object into the target object\n * @param {object} source The object that needs to be merged\n *\n * @param {object} target The object to be merged into\n *\n * @returns {object} Returns the merged target object.\n */\nexport function mergeObjects(source: { [key: string]: any; }, target: { [key: string]: any; }) {\n Object.keys(source).forEach((key) => {\n target[key] = source[key];\n });\n return target;\n}\n\n/**\n * A wrapper for setTimeout that resolves a promise after t milliseconds.\n * @param {number} t The number of milliseconds to be delayed.\n * @param {T} value The value to be resolved with after a timeout of t milliseconds.\n * @returns {Promise} Resolved promise\n */\nexport function delay(t: number, value?: T): Promise {\n return new Promise((resolve) => setTimeout(() => resolve(value), t));\n}\n\n/**\n * Service callback that is returned for REST requests initiated by the service client.\n */\nexport interface ServiceCallback {\n /**\n * A method that will be invoked as a callback to a service function.\n * @param {Error | RestError | null} err The error occurred if any, while executing the request; otherwise null.\n * @param {TResult} [result] The deserialized response body if an error did not occur.\n * @param {WebResource} [request] The raw/actual request sent to the server if an error did not occur.\n * @param {HttpOperationResponse} [response] The raw/actual response from the server if an error did not occur.\n */\n (err: Error | RestError | null, result?: TResult, request?: WebResource, response?: HttpOperationResponse): void;\n}\n\n/**\n * Converts a Promise to a callback.\n * @param {Promise} promise The Promise to be converted to a callback\n * @returns {Function} A function that takes the callback (cb: Function): void\n * @deprecated generated code should instead depend on responseToBody\n */\nexport function promiseToCallback(promise: Promise): Function {\n if (typeof promise.then !== \"function\") {\n throw new Error(\"The provided input is not a Promise.\");\n }\n return (cb: Function): void => {\n promise.then((data: any) => {\n cb(undefined, data);\n }, (err: Error) => {\n cb(err);\n });\n };\n}\n\n/**\n * Converts a Promise to a service callback.\n * @param {Promise} promise - The Promise of HttpOperationResponse to be converted to a service callback\n * @returns {Function} A function that takes the service callback (cb: ServiceCallback): void\n */\nexport function promiseToServiceCallback(promise: Promise): Function {\n if (typeof promise.then !== \"function\") {\n throw new Error(\"The provided input is not a Promise.\");\n }\n return (cb: ServiceCallback): void => {\n promise.then((data: HttpOperationResponse) => {\n process.nextTick(cb, undefined, data.parsedBody as T, data.request, data);\n }, (err: Error) => {\n process.nextTick(cb, err);\n });\n };\n}\n\nexport function prepareXMLRootList(obj: any, elementName: string) {\n if (!Array.isArray(obj)) {\n obj = [obj];\n }\n return { [elementName]: obj };\n}\n\n/**\n * Applies the properties on the prototype of sourceCtors to the prototype of targetCtor\n * @param {object} targetCtor The target object on which the properties need to be applied.\n * @param {Array} sourceCtors An array of source objects from which the properties need to be taken.\n */\nexport function applyMixins(targetCtor: any, sourceCtors: any[]): void {\n sourceCtors.forEach(sourceCtors => {\n Object.getOwnPropertyNames(sourceCtors.prototype).forEach(name => {\n targetCtor.prototype[name] = sourceCtors.prototype[name];\n });\n });\n}\n\nconst validateISODuration = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n/**\n * Indicates whether the given string is in ISO 8601 format.\n * @param {string} value The value to be validated for ISO 8601 duration format.\n * @return {boolean} `true` if valid, `false` otherwise.\n */\nexport function isDuration(value: string): boolean {\n return validateISODuration.test(value);\n}\n\n/**\n * Replace all of the instances of searchValue in value with the provided replaceValue.\n * @param {string | undefined} value The value to search and replace in.\n * @param {string} searchValue The value to search for in the value argument.\n * @param {string} replaceValue The value to replace searchValue with in the value argument.\n * @returns {string | undefined} The value where each instance of searchValue was replaced with replacedValue.\n */\nexport function replaceAll(value: string | undefined, searchValue: string, replaceValue: string): string | undefined {\n return !value || !searchValue ? value : value.split(searchValue).join(replaceValue || \"\");\n}\n\n/**\n * Determines whether the given enity is a basic/primitive type\n * (string, number, boolean, null, undefined).\n * @param value Any entity\n * @return boolean - true is it is primitive type, false otherwise.\n */\nexport function isPrimitiveType(value: any): boolean {\n return (typeof value !== \"object\" && typeof value !== \"function\") || value === null;\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport * as base64 from \"./util/base64\";\nimport * as utils from \"./util/utils\";\n\nexport class Serializer {\n constructor(public readonly modelMappers: { [key: string]: any } = {}, public readonly isXML?: boolean) { }\n\n validateConstraints(mapper: Mapper, value: any, objectName: string): void {\n const failValidation = (constraintName: keyof MapperConstraints, constraintValue: any) => {\n throw new Error(`\"${objectName}\" with value \"${value}\" should satisfy the constraint \"${constraintName}\": ${constraintValue}.`);\n };\n if (mapper.constraints && (value != undefined)) {\n const {\n ExclusiveMaximum,\n ExclusiveMinimum,\n InclusiveMaximum,\n InclusiveMinimum,\n MaxItems,\n MaxLength,\n MinItems,\n MinLength,\n MultipleOf,\n Pattern,\n UniqueItems\n } = mapper.constraints;\n if (ExclusiveMaximum != undefined && value >= ExclusiveMaximum) {\n failValidation(\"ExclusiveMaximum\", ExclusiveMaximum);\n }\n if (ExclusiveMinimum != undefined && value <= ExclusiveMinimum) {\n failValidation(\"ExclusiveMinimum\", ExclusiveMinimum);\n }\n if (InclusiveMaximum != undefined && value > InclusiveMaximum) {\n failValidation(\"InclusiveMaximum\", InclusiveMaximum);\n }\n if (InclusiveMinimum != undefined && value < InclusiveMinimum) {\n failValidation(\"InclusiveMinimum\", InclusiveMinimum);\n }\n if (MaxItems != undefined && value.length > MaxItems) {\n failValidation(\"MaxItems\", MaxItems);\n }\n if (MaxLength != undefined && value.length > MaxLength) {\n failValidation(\"MaxLength\", MaxLength);\n }\n if (MinItems != undefined && value.length < MinItems) {\n failValidation(\"MinItems\", MinItems);\n }\n if (MinLength != undefined && value.length < MinLength) {\n failValidation(\"MinLength\", MinLength);\n }\n if (MultipleOf != undefined && value % MultipleOf !== 0) {\n failValidation(\"MultipleOf\", MultipleOf);\n }\n if (Pattern) {\n const pattern: RegExp = typeof Pattern === \"string\" ? new RegExp(Pattern) : Pattern;\n if ((typeof value !== \"string\") || (value.match(pattern) === null)) {\n failValidation(\"Pattern\", Pattern);\n }\n }\n if (UniqueItems && value.some((item: any, i: number, ar: Array) => ar.indexOf(item) !== i)) {\n failValidation(\"UniqueItems\", UniqueItems);\n }\n }\n }\n\n /**\n * Serialize the given object based on its metadata defined in the mapper\n *\n * @param {Mapper} mapper The mapper which defines the metadata of the serializable object\n *\n * @param {object|string|Array|number|boolean|Date|stream} object A valid Javascript object to be serialized\n *\n * @param {string} objectName Name of the serialized object\n *\n * @returns {object|string|Array|number|boolean|Date|stream} A valid serialized Javascript object\n */\n serialize(mapper: Mapper, object: any, objectName?: string): any {\n let payload: any = {};\n const mapperType = mapper.type.name as string;\n if (!objectName) {\n objectName = mapper.serializedName!;\n }\n if (mapperType.match(/^Sequence$/ig) !== null) {\n payload = [];\n }\n\n if (mapper.isConstant) {\n object = mapper.defaultValue;\n }\n\n // This table of allowed values should help explain\n // the mapper.required and mapper.nullable properties.\n // X means \"neither undefined or null are allowed\".\n // || required\n // || true | false\n // nullable || ==========================\n // true || null | undefined/null\n // false || X | undefined\n // undefined || X | undefined/null\n\n const { required, nullable } = mapper;\n\n if (required && nullable && object === undefined) {\n throw new Error(`${objectName} cannot be undefined.`);\n }\n if (required && !nullable && object == undefined) {\n throw new Error(`${objectName} cannot be null or undefined.`);\n }\n if (!required && nullable === false && object === null) {\n throw new Error(`${objectName} cannot be null.`);\n }\n\n if (object == undefined) {\n payload = object;\n } else {\n // Validate Constraints if any\n this.validateConstraints(mapper, object, objectName);\n if (mapperType.match(/^any$/ig) !== null) {\n payload = object;\n } else if (mapperType.match(/^(Number|String|Boolean|Object|Stream|Uuid)$/ig) !== null) {\n payload = serializeBasicTypes(mapperType, objectName, object);\n } else if (mapperType.match(/^Enum$/ig) !== null) {\n const enumMapper: EnumMapper = mapper as EnumMapper;\n payload = serializeEnumType(objectName, enumMapper.type.allowedValues, object);\n } else if (mapperType.match(/^(Date|DateTime|TimeSpan|DateTimeRfc1123|UnixTime)$/ig) !== null) {\n payload = serializeDateTypes(mapperType, object, objectName);\n } else if (mapperType.match(/^ByteArray$/ig) !== null) {\n payload = serializeByteArrayType(objectName, object);\n } else if (mapperType.match(/^Base64Url$/ig) !== null) {\n payload = serializeBase64UrlType(objectName, object);\n } else if (mapperType.match(/^Sequence$/ig) !== null) {\n payload = serializeSequenceType(this, mapper as SequenceMapper, object, objectName);\n } else if (mapperType.match(/^Dictionary$/ig) !== null) {\n payload = serializeDictionaryType(this, mapper as DictionaryMapper, object, objectName);\n } else if (mapperType.match(/^Composite$/ig) !== null) {\n payload = serializeCompositeType(this, mapper as CompositeMapper, object, objectName);\n }\n }\n return payload;\n }\n\n /**\n * Deserialize the given object based on its metadata defined in the mapper\n *\n * @param {object} mapper The mapper which defines the metadata of the serializable object\n *\n * @param {object|string|Array|number|boolean|Date|stream} responseBody A valid Javascript entity to be deserialized\n *\n * @param {string} objectName Name of the deserialized object\n *\n * @returns {object|string|Array|number|boolean|Date|stream} A valid deserialized Javascript object\n */\n deserialize(mapper: Mapper, responseBody: any, objectName: string): any {\n if (responseBody == undefined) {\n if (this.isXML && mapper.type.name === \"Sequence\" && !mapper.xmlIsWrapped) {\n // Edge case for empty XML non-wrapped lists. xml2js can't distinguish\n // between the list being empty versus being missing,\n // so let's do the more user-friendly thing and return an empty list.\n responseBody = [];\n }\n // specifically check for undefined as default value can be a falsey value `0, \"\", false, null`\n if (mapper.defaultValue !== undefined) {\n responseBody = mapper.defaultValue;\n }\n return responseBody;\n }\n\n let payload: any;\n const mapperType = mapper.type.name;\n if (!objectName) {\n objectName = mapper.serializedName!;\n }\n\n if (mapperType.match(/^Composite$/ig) !== null) {\n payload = deserializeCompositeType(this, mapper as CompositeMapper, responseBody, objectName);\n } else {\n if (this.isXML) {\n /**\n * If the mapper specifies this as a non-composite type value but the responseBody contains\n * both header (\"$\") and body (\"_\") properties, then just reduce the responseBody value to\n * the body (\"_\") property.\n */\n if (responseBody[\"$\"] != undefined && responseBody[\"_\"] != undefined) {\n responseBody = responseBody[\"_\"];\n }\n }\n\n if (mapperType.match(/^Number$/ig) !== null) {\n payload = parseFloat(responseBody);\n if (isNaN(payload)) {\n payload = responseBody;\n }\n } else if (mapperType.match(/^Boolean$/ig) !== null) {\n if (responseBody === \"true\") {\n payload = true;\n } else if (responseBody === \"false\") {\n payload = false;\n } else {\n payload = responseBody;\n }\n } else if (mapperType.match(/^(String|Enum|Object|Stream|Uuid|TimeSpan|any)$/ig) !== null) {\n payload = responseBody;\n } else if (mapperType.match(/^(Date|DateTime|DateTimeRfc1123)$/ig) !== null) {\n payload = new Date(responseBody);\n } else if (mapperType.match(/^UnixTime$/ig) !== null) {\n payload = unixTimeToDate(responseBody);\n } else if (mapperType.match(/^ByteArray$/ig) !== null) {\n payload = base64.decodeString(responseBody);\n } else if (mapperType.match(/^Base64Url$/ig) !== null) {\n payload = base64UrlToByteArray(responseBody);\n } else if (mapperType.match(/^Sequence$/ig) !== null) {\n payload = deserializeSequenceType(this, mapper as SequenceMapper, responseBody, objectName);\n } else if (mapperType.match(/^Dictionary$/ig) !== null) {\n payload = deserializeDictionaryType(this, mapper as DictionaryMapper, responseBody, objectName);\n }\n }\n\n if (mapper.isConstant) {\n payload = mapper.defaultValue;\n }\n\n return payload;\n }\n}\n\nfunction trimEnd(str: string, ch: string) {\n let len = str.length;\n while ((len - 1) >= 0 && str[len - 1] === ch) {\n --len;\n }\n return str.substr(0, len);\n}\n\nfunction bufferToBase64Url(buffer: any): string | undefined {\n if (!buffer) {\n return undefined;\n }\n if (!(buffer instanceof Uint8Array)) {\n throw new Error(`Please provide an input of type Uint8Array for converting to Base64Url.`);\n }\n // Uint8Array to Base64.\n const str = base64.encodeByteArray(buffer);\n // Base64 to Base64Url.\n return trimEnd(str, \"=\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n}\n\nfunction base64UrlToByteArray(str: string): Uint8Array | undefined {\n if (!str) {\n return undefined;\n }\n if (str && typeof str.valueOf() !== \"string\") {\n throw new Error(\"Please provide an input of type string for converting to Uint8Array\");\n }\n // Base64Url to Base64.\n str = str.replace(/\\-/g, \"+\").replace(/\\_/g, \"/\");\n // Base64 to Uint8Array.\n return base64.decodeString(str);\n}\n\nfunction splitSerializeName(prop: string | undefined): string[] {\n const classes: string[] = [];\n let partialclass = \"\";\n if (prop) {\n const subwords = prop.split(\".\");\n\n for (const item of subwords) {\n if (item.charAt(item.length - 1) === \"\\\\\") {\n partialclass += item.substr(0, item.length - 1) + \".\";\n } else {\n partialclass += item;\n classes.push(partialclass);\n partialclass = \"\";\n }\n }\n }\n\n return classes;\n}\n\nfunction dateToUnixTime(d: string | Date): number | undefined {\n if (!d) {\n return undefined;\n }\n\n if (typeof d.valueOf() === \"string\") {\n d = new Date(d as string);\n }\n return Math.floor((d as Date).getTime() / 1000);\n}\n\nfunction unixTimeToDate(n: number): Date | undefined {\n if (!n) {\n return undefined;\n }\n return new Date(n * 1000);\n}\n\nfunction serializeBasicTypes(typeName: string, objectName: string, value: any): any {\n if (value !== null && value !== undefined) {\n if (typeName.match(/^Number$/ig) !== null) {\n if (typeof value !== \"number\") {\n throw new Error(`${objectName} with value ${value} must be of type number.`);\n }\n } else if (typeName.match(/^String$/ig) !== null) {\n if (typeof value.valueOf() !== \"string\") {\n throw new Error(`${objectName} with value \"${value}\" must be of type string.`);\n }\n } else if (typeName.match(/^Uuid$/ig) !== null) {\n if (!(typeof value.valueOf() === \"string\" && utils.isValidUuid(value))) {\n throw new Error(`${objectName} with value \"${value}\" must be of type string and a valid uuid.`);\n }\n } else if (typeName.match(/^Boolean$/ig) !== null) {\n if (typeof value !== \"boolean\") {\n throw new Error(`${objectName} with value ${value} must be of type boolean.`);\n }\n } else if (typeName.match(/^Stream$/ig) !== null) {\n const objectType = typeof value;\n if (objectType !== \"string\" &&\n objectType !== \"function\" &&\n !(value instanceof ArrayBuffer) &&\n !ArrayBuffer.isView(value) &&\n !(typeof Blob === \"function\" && value instanceof Blob)) {\n throw new Error(`${objectName} must be a string, Blob, ArrayBuffer, ArrayBufferView, or a function returning NodeJS.ReadableStream.`);\n }\n }\n }\n return value;\n}\n\nfunction serializeEnumType(objectName: string, allowedValues: Array, value: any): any {\n if (!allowedValues) {\n throw new Error(`Please provide a set of allowedValues to validate ${objectName} as an Enum Type.`);\n }\n const isPresent = allowedValues.some((item) => {\n if (typeof item.valueOf() === \"string\") {\n return item.toLowerCase() === value.toLowerCase();\n }\n return item === value;\n });\n if (!isPresent) {\n throw new Error(`${value} is not a valid value for ${objectName}. The valid values are: ${JSON.stringify(allowedValues)}.`);\n }\n return value;\n}\n\nfunction serializeByteArrayType(objectName: string, value: any): any {\n if (value != undefined) {\n if (!(value instanceof Uint8Array)) {\n throw new Error(`${objectName} must be of type Uint8Array.`);\n }\n value = base64.encodeByteArray(value);\n }\n return value;\n}\n\nfunction serializeBase64UrlType(objectName: string, value: any): any {\n if (value != undefined) {\n if (!(value instanceof Uint8Array)) {\n throw new Error(`${objectName} must be of type Uint8Array.`);\n }\n value = bufferToBase64Url(value);\n }\n return value;\n}\n\nfunction serializeDateTypes(typeName: string, value: any, objectName: string) {\n if (value != undefined) {\n if (typeName.match(/^Date$/ig) !== null) {\n if (!(value instanceof Date ||\n (typeof value.valueOf() === \"string\" && !isNaN(Date.parse(value))))) {\n throw new Error(`${objectName} must be an instanceof Date or a string in ISO8601 format.`);\n }\n value = (value instanceof Date) ? value.toISOString().substring(0, 10) : new Date(value).toISOString().substring(0, 10);\n } else if (typeName.match(/^DateTime$/ig) !== null) {\n if (!(value instanceof Date ||\n (typeof value.valueOf() === \"string\" && !isNaN(Date.parse(value))))) {\n throw new Error(`${objectName} must be an instanceof Date or a string in ISO8601 format.`);\n }\n value = (value instanceof Date) ? value.toISOString() : new Date(value).toISOString();\n } else if (typeName.match(/^DateTimeRfc1123$/ig) !== null) {\n if (!(value instanceof Date ||\n (typeof value.valueOf() === \"string\" && !isNaN(Date.parse(value))))) {\n throw new Error(`${objectName} must be an instanceof Date or a string in RFC-1123 format.`);\n }\n value = (value instanceof Date) ? value.toUTCString() : new Date(value).toUTCString();\n } else if (typeName.match(/^UnixTime$/ig) !== null) {\n if (!(value instanceof Date ||\n (typeof value.valueOf() === \"string\" && !isNaN(Date.parse(value))))) {\n throw new Error(`${objectName} must be an instanceof Date or a string in RFC-1123/ISO8601 format ` +\n `for it to be serialized in UnixTime/Epoch format.`);\n }\n value = dateToUnixTime(value);\n } else if (typeName.match(/^TimeSpan$/ig) !== null) {\n if (!utils.isDuration(value)) {\n throw new Error(`${objectName} must be a string in ISO 8601 format. Instead was \"${value}\".`);\n }\n value = value;\n }\n }\n return value;\n}\n\nfunction serializeSequenceType(serializer: Serializer, mapper: SequenceMapper, object: any, objectName: string) {\n if (!Array.isArray(object)) {\n throw new Error(`${objectName} must be of type Array.`);\n }\n const elementType = mapper.type.element;\n if (!elementType || typeof elementType !== \"object\") {\n throw new Error(`element\" metadata for an Array must be defined in the ` +\n `mapper and it must of type \"object\" in ${objectName}.`);\n }\n const tempArray = [];\n for (let i = 0; i < object.length; i++) {\n tempArray[i] = serializer.serialize(elementType, object[i], objectName);\n }\n return tempArray;\n}\n\nfunction serializeDictionaryType(serializer: Serializer, mapper: DictionaryMapper, object: any, objectName: string) {\n if (typeof object !== \"object\") {\n throw new Error(`${objectName} must be of type object.`);\n }\n const valueType = mapper.type.value;\n if (!valueType || typeof valueType !== \"object\") {\n throw new Error(`\"value\" metadata for a Dictionary must be defined in the ` +\n `mapper and it must of type \"object\" in ${objectName}.`);\n }\n const tempDictionary: { [key: string]: any } = {};\n for (const key of Object.keys(object)) {\n tempDictionary[key] = serializer.serialize(valueType, object[key], objectName + \".\" + key);\n }\n return tempDictionary;\n}\n\n/**\n * Resolves a composite mapper's modelProperties.\n * @param serializer the serializer containing the entire set of mappers\n * @param mapper the composite mapper to resolve\n */\nfunction resolveModelProperties(serializer: Serializer, mapper: CompositeMapper, objectName: string): { [propertyName: string]: Mapper } {\n let modelProps = mapper.type.modelProperties;\n if (!modelProps) {\n const className = mapper.type.className;\n if (!className) {\n throw new Error(`Class name for model \"${objectName}\" is not provided in the mapper \"${JSON.stringify(mapper, undefined, 2)}\".`);\n }\n\n const modelMapper = serializer.modelMappers[className];\n if (!modelMapper) {\n throw new Error(`mapper() cannot be null or undefined for model \"${className}\".`);\n }\n modelProps = modelMapper.type.modelProperties;\n if (!modelProps) {\n throw new Error(`modelProperties cannot be null or undefined in the ` +\n `mapper \"${JSON.stringify(modelMapper)}\" of type \"${className}\" for object \"${objectName}\".`);\n }\n }\n\n return modelProps;\n}\n\nfunction serializeCompositeType(serializer: Serializer, mapper: CompositeMapper, object: any, objectName: string) {\n if (getPolymorphicDiscriminatorRecursively(serializer, mapper)) {\n mapper = getPolymorphicMapper(serializer, mapper, object, \"clientName\");\n }\n\n if (object != undefined) {\n const payload: any = {};\n const modelProps = resolveModelProperties(serializer, mapper, objectName);\n for (const key of Object.keys(modelProps)) {\n const propertyMapper = modelProps[key];\n if (propertyMapper.readOnly) {\n continue;\n }\n\n let propName: string | undefined;\n let parentObject: any = payload;\n if (serializer.isXML) {\n if (propertyMapper.xmlIsWrapped) {\n propName = propertyMapper.xmlName;\n } else {\n propName = propertyMapper.xmlElementName || propertyMapper.xmlName;\n }\n } else {\n const paths = splitSerializeName(propertyMapper.serializedName!);\n propName = paths.pop();\n\n for (const pathName of paths) {\n const childObject = parentObject[pathName];\n if ((childObject == undefined) && (object[key] != undefined)) {\n parentObject[pathName] = {};\n }\n parentObject = parentObject[pathName];\n }\n }\n\n if (parentObject != undefined) {\n const propertyObjectName = propertyMapper.serializedName !== \"\"\n ? objectName + \".\" + propertyMapper.serializedName\n : objectName;\n\n let toSerialize = object[key];\n const polymorphicDiscriminator = getPolymorphicDiscriminatorRecursively(serializer, mapper);\n if (polymorphicDiscriminator && polymorphicDiscriminator.clientName === key && toSerialize == undefined) {\n toSerialize = mapper.serializedName;\n }\n\n const serializedValue = serializer.serialize(propertyMapper, toSerialize, propertyObjectName);\n if (serializedValue !== undefined && propName != undefined) {\n if (propertyMapper.xmlIsAttribute) {\n // $ is the key attributes are kept under in xml2js.\n // This keeps things simple while preventing name collision\n // with names in user documents.\n parentObject.$ = parentObject.$ || {};\n parentObject.$[propName] = serializedValue;\n } else if (propertyMapper.xmlIsWrapped) {\n parentObject[propName] = { [propertyMapper.xmlElementName!]: serializedValue };\n } else {\n parentObject[propName] = serializedValue;\n }\n }\n }\n }\n\n const additionalPropertiesMapper = mapper.type.additionalProperties;\n if (additionalPropertiesMapper) {\n const propNames = Object.keys(modelProps);\n for (const clientPropName in object) {\n const isAdditionalProperty = propNames.every(pn => pn !== clientPropName);\n if (isAdditionalProperty) {\n payload[clientPropName] = serializer.serialize(additionalPropertiesMapper, object[clientPropName], objectName + '[\"' + clientPropName + '\"]');\n }\n }\n }\n\n return payload;\n }\n return object;\n}\n\nfunction isSpecialXmlProperty(propertyName: string): boolean {\n return [\"$\", \"_\"].includes(propertyName);\n}\n\nfunction deserializeCompositeType(serializer: Serializer, mapper: CompositeMapper, responseBody: any, objectName: string): any {\n if (getPolymorphicDiscriminatorRecursively(serializer, mapper)) {\n mapper = getPolymorphicMapper(serializer, mapper, responseBody, \"serializedName\");\n }\n\n const modelProps = resolveModelProperties(serializer, mapper, objectName);\n let instance: { [key: string]: any } = {};\n const handledPropertyNames: string[] = [];\n\n for (const key of Object.keys(modelProps)) {\n const propertyMapper = modelProps[key];\n const paths = splitSerializeName(modelProps[key].serializedName!);\n handledPropertyNames.push(paths[0]);\n const { serializedName, xmlName, xmlElementName } = propertyMapper;\n let propertyObjectName = objectName;\n if (serializedName !== \"\" && serializedName !== undefined) {\n propertyObjectName = objectName + \".\" + serializedName;\n }\n\n const headerCollectionPrefix = (propertyMapper as DictionaryMapper).headerCollectionPrefix;\n if (headerCollectionPrefix) {\n const dictionary: any = {};\n for (const headerKey of Object.keys(responseBody)) {\n if (headerKey.startsWith(headerCollectionPrefix)) {\n dictionary[headerKey.substring(headerCollectionPrefix.length)] = serializer.deserialize((propertyMapper as DictionaryMapper).type.value, responseBody[headerKey], propertyObjectName);\n }\n\n handledPropertyNames.push(headerKey);\n }\n instance[key] = dictionary;\n } else if (serializer.isXML) {\n if (propertyMapper.xmlIsAttribute && responseBody.$) {\n instance[key] = serializer.deserialize(propertyMapper, responseBody.$[xmlName!], propertyObjectName);\n } else {\n const propertyName = xmlElementName || xmlName || serializedName;\n let unwrappedProperty = responseBody[propertyName!];\n if (propertyMapper.xmlIsWrapped) {\n unwrappedProperty = responseBody[xmlName!];\n unwrappedProperty = unwrappedProperty && unwrappedProperty[xmlElementName!];\n\n const isEmptyWrappedList = unwrappedProperty === undefined;\n if (isEmptyWrappedList) {\n unwrappedProperty = [];\n }\n }\n instance[key] = serializer.deserialize(propertyMapper, unwrappedProperty, propertyObjectName);\n }\n } else {\n // deserialize the property if it is present in the provided responseBody instance\n let propertyInstance;\n let res = responseBody;\n // traversing the object step by step.\n for (const item of paths) {\n if (!res) break;\n res = res[item];\n }\n propertyInstance = res;\n const polymorphicDiscriminator = mapper.type.polymorphicDiscriminator;\n // checking that the model property name (key)(ex: \"fishtype\") and the\n // clientName of the polymorphicDiscriminator {metadata} (ex: \"fishtype\")\n // instead of the serializedName of the polymorphicDiscriminator (ex: \"fish.type\")\n // is a better approach. The generator is not consistent with escaping '\\.' in the\n // serializedName of the property (ex: \"fish\\.type\") that is marked as polymorphic discriminator\n // and the serializedName of the metadata polymorphicDiscriminator (ex: \"fish.type\"). However,\n // the clientName transformation of the polymorphicDiscriminator (ex: \"fishtype\") and\n // the transformation of model property name (ex: \"fishtype\") is done consistently.\n // Hence, it is a safer bet to rely on the clientName of the polymorphicDiscriminator.\n if (polymorphicDiscriminator && key === polymorphicDiscriminator.clientName && propertyInstance == undefined) {\n propertyInstance = mapper.serializedName;\n }\n\n let serializedValue;\n // paging\n if (Array.isArray(responseBody[key]) && modelProps[key].serializedName === \"\") {\n propertyInstance = responseBody[key];\n instance = serializer.deserialize(propertyMapper, propertyInstance, propertyObjectName);\n } else if (propertyInstance !== undefined || propertyMapper.defaultValue !== undefined) {\n serializedValue = serializer.deserialize(propertyMapper, propertyInstance, propertyObjectName);\n instance[key] = serializedValue;\n }\n }\n }\n\n const additionalPropertiesMapper = mapper.type.additionalProperties;\n if (additionalPropertiesMapper) {\n const isAdditionalProperty = (responsePropName: string) => {\n for (const clientPropName in modelProps) {\n const paths = splitSerializeName(modelProps[clientPropName].serializedName);\n if (paths[0] === responsePropName) {\n return false;\n }\n }\n return true;\n };\n\n for (const responsePropName in responseBody) {\n if (isAdditionalProperty(responsePropName)) {\n instance[responsePropName] = serializer.deserialize(additionalPropertiesMapper, responseBody[responsePropName], objectName + '[\"' + responsePropName + '\"]');\n }\n }\n } else if (responseBody) {\n for (const key of Object.keys(responseBody)) {\n if (instance[key] === undefined && !handledPropertyNames.includes(key) && !isSpecialXmlProperty(key)) {\n instance[key] = responseBody[key];\n }\n }\n }\n\n return instance;\n}\n\nfunction deserializeDictionaryType(serializer: Serializer, mapper: DictionaryMapper, responseBody: any, objectName: string): any {\n /*jshint validthis: true */\n const value = mapper.type.value;\n if (!value || typeof value !== \"object\") {\n throw new Error(`\"value\" metadata for a Dictionary must be defined in the ` +\n `mapper and it must of type \"object\" in ${objectName}`);\n }\n if (responseBody) {\n const tempDictionary: { [key: string]: any } = {};\n for (const key of Object.keys(responseBody)) {\n tempDictionary[key] = serializer.deserialize(value, responseBody[key], objectName);\n }\n return tempDictionary;\n }\n return responseBody;\n}\n\nfunction deserializeSequenceType(serializer: Serializer, mapper: SequenceMapper, responseBody: any, objectName: string): any {\n /*jshint validthis: true */\n const element = mapper.type.element;\n if (!element || typeof element !== \"object\") {\n throw new Error(`element\" metadata for an Array must be defined in the ` +\n `mapper and it must of type \"object\" in ${objectName}`);\n }\n if (responseBody) {\n if (!Array.isArray(responseBody)) {\n // xml2js will interpret a single element array as just the element, so force it to be an array\n responseBody = [responseBody];\n }\n\n const tempArray = [];\n for (let i = 0; i < responseBody.length; i++) {\n tempArray[i] = serializer.deserialize(element, responseBody[i], `${objectName}[${i}]`);\n }\n return tempArray;\n }\n return responseBody;\n}\n\nfunction getPolymorphicMapper(serializer: Serializer, mapper: CompositeMapper, object: any, polymorphicPropertyName: \"clientName\" | \"serializedName\"): CompositeMapper {\n const polymorphicDiscriminator = getPolymorphicDiscriminatorRecursively(serializer, mapper);\n if (polymorphicDiscriminator) {\n const discriminatorName = polymorphicDiscriminator[polymorphicPropertyName];\n if (discriminatorName != undefined) {\n const discriminatorValue = object[discriminatorName];\n if (discriminatorValue != undefined) {\n const typeName = mapper.type.uberParent || mapper.type.className;\n const indexDiscriminator = discriminatorValue === typeName\n ? discriminatorValue\n : typeName + \".\" + discriminatorValue;\n const polymorphicMapper = serializer.modelMappers.discriminators[indexDiscriminator];\n if (polymorphicMapper) {\n mapper = polymorphicMapper;\n }\n }\n }\n }\n return mapper;\n}\n\nfunction getPolymorphicDiscriminatorRecursively(serializer: Serializer, mapper: CompositeMapper): PolymorphicDiscriminator | undefined {\n return mapper.type.polymorphicDiscriminator\n || getPolymorphicDiscriminatorSafely(serializer, mapper.type.uberParent)\n || getPolymorphicDiscriminatorSafely(serializer, mapper.type.className);\n}\n\nfunction getPolymorphicDiscriminatorSafely(serializer: Serializer, typeName?: string) {\n return (typeName && serializer.modelMappers[typeName] && serializer.modelMappers[typeName].type.polymorphicDiscriminator);\n}\n\nexport interface MapperConstraints {\n InclusiveMaximum?: number;\n ExclusiveMaximum?: number;\n InclusiveMinimum?: number;\n ExclusiveMinimum?: number;\n MaxLength?: number;\n MinLength?: number;\n Pattern?: RegExp;\n MaxItems?: number;\n MinItems?: number;\n UniqueItems?: true;\n MultipleOf?: number;\n}\n\nexport type MapperType = SimpleMapperType | CompositeMapperType | SequenceMapperType | DictionaryMapperType | EnumMapperType;\n\nexport interface SimpleMapperType {\n name: \"Base64Url\"\n | \"Boolean\"\n | \"ByteArray\"\n | \"Date\"\n | \"DateTime\"\n | \"DateTimeRfc1123\"\n | \"Object\"\n | \"Stream\"\n | \"String\"\n | \"TimeSpan\"\n | \"UnixTime\"\n | \"Uuid\"\n | \"Number\"\n | \"any\";\n}\n\nexport interface CompositeMapperType {\n name: \"Composite\";\n\n // Only one of the two below properties should be present.\n // Use className to reference another type definition,\n // and use modelProperties/additionalProperties when the reference to the other type has been resolved.\n className?: string;\n\n modelProperties?: { [propertyName: string]: Mapper };\n additionalProperties?: Mapper;\n\n uberParent?: string;\n polymorphicDiscriminator?: PolymorphicDiscriminator;\n}\n\nexport interface SequenceMapperType {\n name: \"Sequence\";\n element: Mapper;\n}\n\nexport interface DictionaryMapperType {\n name: \"Dictionary\";\n value: Mapper;\n}\n\nexport interface EnumMapperType {\n name: \"Enum\";\n allowedValues: any[];\n}\n\nexport interface BaseMapper {\n xmlName?: string;\n xmlIsAttribute?: boolean;\n xmlElementName?: string;\n xmlIsWrapped?: boolean;\n readOnly?: boolean;\n isConstant?: boolean;\n required?: boolean;\n nullable?: boolean;\n serializedName?: string;\n type: MapperType;\n defaultValue?: any;\n constraints?: MapperConstraints;\n}\n\nexport type Mapper = BaseMapper | CompositeMapper | SequenceMapper | DictionaryMapper | EnumMapper;\n\nexport interface PolymorphicDiscriminator {\n serializedName: string;\n clientName: string;\n [key: string]: string;\n}\n\nexport interface CompositeMapper extends BaseMapper {\n type: CompositeMapperType;\n}\n\nexport interface SequenceMapper extends BaseMapper {\n type: SequenceMapperType;\n}\n\nexport interface DictionaryMapper extends BaseMapper {\n type: DictionaryMapperType;\n headerCollectionPrefix?: string;\n}\n\nexport interface EnumMapper extends BaseMapper {\n type: EnumMapperType;\n}\n\nexport interface UrlParameterValue {\n value: string;\n skipUrlEncoding: boolean;\n}\n\n// TODO: why is this here?\nexport function serializeObject(toSerialize: any): any {\n if (toSerialize == undefined) return undefined;\n if (toSerialize instanceof Uint8Array) {\n toSerialize = base64.encodeByteArray(toSerialize);\n return toSerialize;\n }\n else if (toSerialize instanceof Date) {\n return toSerialize.toISOString();\n }\n else if (Array.isArray(toSerialize)) {\n const array = [];\n for (let i = 0; i < toSerialize.length; i++) {\n array.push(serializeObject(toSerialize[i]));\n }\n return array;\n } else if (typeof toSerialize === \"object\") {\n const dictionary: { [key: string]: any } = {};\n for (const property in toSerialize) {\n dictionary[property] = serializeObject(toSerialize[property]);\n }\n return dictionary;\n }\n return toSerialize;\n}\n\n/**\n * Utility function to create a K:V from a list of strings\n */\nfunction strEnum(o: Array): { [K in T]: K } {\n const result: any = {};\n for (const key of o) {\n result[key] = key;\n }\n return result;\n}\n\nexport const MapperType = strEnum([\n \"Base64Url\",\n \"Boolean\",\n \"ByteArray\",\n \"Composite\",\n \"Date\",\n \"DateTime\",\n \"DateTimeRfc1123\",\n \"Dictionary\",\n \"Enum\",\n \"Number\",\n \"Object\",\n \"Sequence\",\n \"String\",\n \"Stream\",\n \"TimeSpan\",\n \"UnixTime\"\n]);\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { HttpHeaders } from \"./httpHeaders\";\nimport { OperationSpec } from \"./operationSpec\";\nimport { Mapper, Serializer } from \"./serializer\";\nimport { generateUuid } from \"./util/utils\";\nimport { HttpOperationResponse } from \"./httpOperationResponse\";\nimport { OperationResponse } from \"./operationResponse\";\nimport { ProxySettings } from \"./serviceClient\";\n\nexport type HttpMethods = \"GET\" | \"PUT\" | \"POST\" | \"DELETE\" | \"PATCH\" | \"HEAD\" | \"OPTIONS\" | \"TRACE\";\nexport type HttpRequestBody = Blob | string | ArrayBuffer | ArrayBufferView | (() => NodeJS.ReadableStream);\n\n/**\n * Fired in response to upload or download progress.\n */\nexport type TransferProgressEvent = {\n /**\n * The number of bytes loaded so far.\n */\n loadedBytes: number\n};\n\n/**\n * Allows the request to be aborted upon firing of the \"abort\" event.\n * Compatible with the browser built-in AbortSignal and common polyfills.\n */\nexport interface AbortSignalLike {\n readonly aborted: boolean;\n dispatchEvent: (event: Event) => boolean;\n onabort: ((this: AbortSignalLike, ev: Event) => any) | null;\n addEventListener: (type: \"abort\", listener: (this: AbortSignalLike, ev: Event) => any, options?: any) => void;\n removeEventListener: (type: \"abort\", listener: (this: AbortSignalLike, ev: Event) => any, options?: any) => void;\n}\n\n/**\n * Creates a new WebResource object.\n *\n * This class provides an abstraction over a REST call by being library / implementation agnostic and wrapping the necessary\n * properties to initiate a request.\n *\n * @constructor\n */\nexport class WebResource {\n url: string;\n method: HttpMethods;\n body?: any;\n headers: HttpHeaders;\n /**\n * Whether or not the body of the HttpOperationResponse should be treated as a stream.\n */\n streamResponseBody?: boolean;\n /**\n * Whether or not the HttpOperationResponse should be deserialized. If this is undefined, then the\n * HttpOperationResponse should be deserialized.\n */\n shouldDeserialize?: boolean | ((response: HttpOperationResponse) => boolean);\n /**\n * A function that returns the proper OperationResponse for the given OperationSpec and\n * HttpOperationResponse combination. If this is undefined, then a simple status code lookup will\n * be used.\n */\n operationResponseGetter?: (operationSpec: OperationSpec, response: HttpOperationResponse) => (undefined | OperationResponse);\n formData?: any;\n query?: { [key: string]: any; };\n operationSpec?: OperationSpec;\n withCredentials: boolean;\n timeout: number;\n proxySettings?: ProxySettings;\n keepAlive?: boolean;\n\n abortSignal?: AbortSignalLike;\n\n /** Callback which fires upon upload progress. */\n onUploadProgress?: (progress: TransferProgressEvent) => void;\n\n /** Callback which fires upon download progress. */\n onDownloadProgress?: (progress: TransferProgressEvent) => void;\n\n constructor(\n url?: string,\n method?: HttpMethods,\n body?: any,\n query?: { [key: string]: any; },\n headers?: { [key: string]: any; } | HttpHeaders,\n streamResponseBody?: boolean,\n withCredentials?: boolean,\n abortSignal?: AbortSignalLike,\n timeout?: number,\n onUploadProgress?: (progress: TransferProgressEvent) => void,\n onDownloadProgress?: (progress: TransferProgressEvent) => void,\n proxySettings?: ProxySettings,\n keepAlive?: boolean) {\n\n this.streamResponseBody = streamResponseBody;\n this.url = url || \"\";\n this.method = method || \"GET\";\n this.headers = (headers instanceof HttpHeaders ? headers : new HttpHeaders(headers));\n this.body = body;\n this.query = query;\n this.formData = undefined;\n this.withCredentials = withCredentials || false;\n this.abortSignal = abortSignal;\n this.timeout = timeout || 0;\n this.onUploadProgress = onUploadProgress;\n this.onDownloadProgress = onDownloadProgress;\n this.proxySettings = proxySettings;\n this.keepAlive = keepAlive;\n }\n\n /**\n * Validates that the required properties such as method, url, headers[\"Content-Type\"],\n * headers[\"accept-language\"] are defined. It will throw an error if one of the above\n * mentioned properties are not defined.\n */\n validateRequestProperties(): void {\n if (!this.method) {\n throw new Error(\"WebResource.method is required.\");\n }\n if (!this.url) {\n throw new Error(\"WebResource.url is required.\");\n }\n }\n\n /**\n * Prepares the request.\n * @param {RequestPrepareOptions} options Options to provide for preparing the request.\n * @returns {WebResource} Returns the prepared WebResource (HTTP Request) object that needs to be given to the request pipeline.\n */\n prepare(options: RequestPrepareOptions): WebResource {\n if (!options) {\n throw new Error(\"options object is required\");\n }\n\n if (options.method == undefined || typeof options.method.valueOf() !== \"string\") {\n throw new Error(\"options.method must be a string.\");\n }\n\n if (options.url && options.pathTemplate) {\n throw new Error(\"options.url and options.pathTemplate are mutually exclusive. Please provide exactly one of them.\");\n }\n\n\n if ((options.pathTemplate == undefined || typeof options.pathTemplate.valueOf() !== \"string\") && (options.url == undefined || typeof options.url.valueOf() !== \"string\")) {\n throw new Error(\"Please provide exactly one of options.pathTemplate or options.url.\");\n }\n\n // set the url if it is provided.\n if (options.url) {\n if (typeof options.url !== \"string\") {\n throw new Error(\"options.url must be of type \\\"string\\\".\");\n }\n this.url = options.url;\n }\n\n // set the method\n if (options.method) {\n const validMethods = [\"GET\", \"PUT\", \"HEAD\", \"DELETE\", \"OPTIONS\", \"POST\", \"PATCH\", \"TRACE\"];\n if (validMethods.indexOf(options.method.toUpperCase()) === -1) {\n throw new Error(\"The provided method \\\"\" + options.method + \"\\\" is invalid. Supported HTTP methods are: \" + JSON.stringify(validMethods));\n }\n }\n this.method = (options.method.toUpperCase() as HttpMethods);\n\n // construct the url if path template is provided\n if (options.pathTemplate) {\n const { pathTemplate, pathParameters } = options;\n if (typeof pathTemplate !== \"string\") {\n throw new Error(\"options.pathTemplate must be of type \\\"string\\\".\");\n }\n if (!options.baseUrl) {\n options.baseUrl = \"https://management.azure.com\";\n }\n const baseUrl = options.baseUrl;\n let url = baseUrl + (baseUrl.endsWith(\"/\") ? \"\" : \"/\") + (pathTemplate.startsWith(\"/\") ? pathTemplate.slice(1) : pathTemplate);\n const segments = url.match(/({\\w*\\s*\\w*})/ig);\n if (segments && segments.length) {\n if (!pathParameters) {\n throw new Error(`pathTemplate: ${pathTemplate} has been provided. Hence, options.pathParameters must also be provided.`);\n }\n segments.forEach(function (item) {\n const pathParamName = item.slice(1, -1);\n const pathParam = (pathParameters as { [key: string]: any })[pathParamName];\n if (pathParam === null || pathParam === undefined || !(typeof pathParam === \"string\" || typeof pathParam === \"object\")) {\n throw new Error(`pathTemplate: ${pathTemplate} contains the path parameter ${pathParamName}` +\n ` however, it is not present in ${pathParameters} - ${JSON.stringify(pathParameters, undefined, 2)}.` +\n `The value of the path parameter can either be a \"string\" of the form { ${pathParamName}: \"some sample value\" } or ` +\n `it can be an \"object\" of the form { \"${pathParamName}\": { value: \"some sample value\", skipUrlEncoding: true } }.`);\n }\n\n if (typeof pathParam.valueOf() === \"string\") {\n url = url.replace(item, encodeURIComponent(pathParam));\n }\n\n if (typeof pathParam.valueOf() === \"object\") {\n if (!pathParam.value) {\n throw new Error(`options.pathParameters[${pathParamName}] is of type \"object\" but it does not contain a \"value\" property.`);\n }\n if (pathParam.skipUrlEncoding) {\n url = url.replace(item, pathParam.value);\n } else {\n url = url.replace(item, encodeURIComponent(pathParam.value));\n }\n }\n });\n }\n this.url = url;\n }\n\n // append query parameters to the url if they are provided. They can be provided with pathTemplate or url option.\n if (options.queryParameters) {\n const queryParameters = options.queryParameters;\n if (typeof queryParameters !== \"object\") {\n throw new Error(`options.queryParameters must be of type object. It should be a JSON object ` +\n `of \"query-parameter-name\" as the key and the \"query-parameter-value\" as the value. ` +\n `The \"query-parameter-value\" may be fo type \"string\" or an \"object\" of the form { value: \"query-parameter-value\", skipUrlEncoding: true }.`);\n }\n // append question mark if it is not present in the url\n if (this.url && this.url.indexOf(\"?\") === -1) {\n this.url += \"?\";\n }\n // construct queryString\n const queryParams = [];\n // We need to populate this.query as a dictionary if the request is being used for Sway's validateRequest().\n this.query = {};\n for (const queryParamName in queryParameters) {\n const queryParam: any = queryParameters[queryParamName];\n if (queryParam) {\n if (typeof queryParam === \"string\") {\n queryParams.push(queryParamName + \"=\" + encodeURIComponent(queryParam));\n this.query[queryParamName] = encodeURIComponent(queryParam);\n }\n else if (typeof queryParam === \"object\") {\n if (!queryParam.value) {\n throw new Error(`options.queryParameters[${queryParamName}] is of type \"object\" but it does not contain a \"value\" property.`);\n }\n if (queryParam.skipUrlEncoding) {\n queryParams.push(queryParamName + \"=\" + queryParam.value);\n this.query[queryParamName] = queryParam.value;\n } else {\n queryParams.push(queryParamName + \"=\" + encodeURIComponent(queryParam.value));\n this.query[queryParamName] = encodeURIComponent(queryParam.value);\n }\n }\n }\n }// end-of-for\n // append the queryString\n this.url += queryParams.join(\"&\");\n }\n\n // add headers to the request if they are provided\n if (options.headers) {\n const headers = options.headers;\n for (const headerName of Object.keys(options.headers)) {\n this.headers.set(headerName, headers[headerName]);\n }\n }\n // ensure accept-language is set correctly\n if (!this.headers.get(\"accept-language\")) {\n this.headers.set(\"accept-language\", \"en-US\");\n }\n // ensure the request-id is set correctly\n if (!this.headers.get(\"x-ms-client-request-id\") && !options.disableClientRequestId) {\n this.headers.set(\"x-ms-client-request-id\", generateUuid());\n }\n\n // default\n if (!this.headers.get(\"Content-Type\")) {\n this.headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n }\n\n // set the request body. request.js automatically sets the Content-Length request header, so we need not set it explicilty\n this.body = options.body;\n if (options.body != undefined) {\n // body as a stream special case. set the body as-is and check for some special request headers specific to sending a stream.\n if (options.bodyIsStream) {\n if (!this.headers.get(\"Transfer-Encoding\")) {\n this.headers.set(\"Transfer-Encoding\", \"chunked\");\n }\n if (this.headers.get(\"Content-Type\") !== \"application/octet-stream\") {\n this.headers.set(\"Content-Type\", \"application/octet-stream\");\n }\n } else {\n if (options.serializationMapper) {\n this.body = new Serializer(options.mappers).serialize(options.serializationMapper, options.body, \"requestBody\");\n }\n if (!options.disableJsonStringifyOnBody) {\n this.body = JSON.stringify(options.body);\n }\n }\n }\n\n this.abortSignal = options.abortSignal;\n this.onDownloadProgress = options.onDownloadProgress;\n this.onUploadProgress = options.onUploadProgress;\n\n return this;\n }\n\n /**\n * Clone this WebResource HTTP request object.\n * @returns {WebResource} The clone of this WebResource HTTP request object.\n */\n clone(): WebResource {\n const result = new WebResource(\n this.url,\n this.method,\n this.body,\n this.query,\n this.headers && this.headers.clone(),\n this.streamResponseBody,\n this.withCredentials,\n this.abortSignal,\n this.timeout,\n this.onUploadProgress,\n this.onDownloadProgress);\n\n if (this.formData) {\n result.formData = this.formData;\n }\n\n if (this.operationSpec) {\n result.operationSpec = this.operationSpec;\n }\n\n if (this.shouldDeserialize) {\n result.shouldDeserialize = this.shouldDeserialize;\n }\n\n if (this.operationResponseGetter) {\n result.operationResponseGetter = this.operationResponseGetter;\n }\n\n return result;\n }\n}\n\nexport interface RequestPrepareOptions {\n /**\n * The HTTP request method. Valid values are \"GET\", \"PUT\", \"HEAD\", \"DELETE\", \"OPTIONS\", \"POST\",\n * or \"PATCH\".\n */\n method: HttpMethods;\n /**\n * The request url. It may or may not have query parameters in it. Either provide the \"url\" or\n * provide the \"pathTemplate\" in the options object. Both the options are mutually exclusive.\n */\n url?: string;\n /**\n * A dictionary of query parameters to be appended to the url, where\n * the \"key\" is the \"query-parameter-name\" and the \"value\" is the \"query-parameter-value\".\n * The \"query-parameter-value\" can be of type \"string\" or it can be of type \"object\".\n * The \"object\" format should be used when you want to skip url encoding. While using the object format,\n * the object must have a property named value which provides the \"query-parameter-value\".\n * Example:\n * - query-parameter-value in \"object\" format: { \"query-parameter-name\": { value: \"query-parameter-value\", skipUrlEncoding: true } }\n * - query-parameter-value in \"string\" format: { \"query-parameter-name\": \"query-parameter-value\"}.\n * Note: \"If options.url already has some query parameters, then the value provided in options.queryParameters will be appended to the url.\n */\n queryParameters?: { [key: string]: any | ParameterValue };\n /**\n * The path template of the request url. Either provide the \"url\" or provide the \"pathTemplate\" in\n * the options object. Both the options are mutually exclusive.\n * Example: \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}\"\n */\n pathTemplate?: string;\n /**\n * The base url of the request. Default value is: \"https://management.azure.com\". This is\n * applicable only with pathTemplate. If you are providing options.url then it is expected that\n * you provide the complete url.\n */\n baseUrl?: string;\n /**\n * A dictionary of path parameters that need to be replaced with actual values in the pathTemplate.\n * Here the key is the \"path-parameter-name\" and the value is the \"path-parameter-value\".\n * The \"path-parameter-value\" can be of type \"string\" or it can be of type \"object\".\n * The \"object\" format should be used when you want to skip url encoding. While using the object format,\n * the object must have a property named value which provides the \"path-parameter-value\".\n * Example:\n * - path-parameter-value in \"object\" format: { \"path-parameter-name\": { value: \"path-parameter-value\", skipUrlEncoding: true } }\n * - path-parameter-value in \"string\" format: { \"path-parameter-name\": \"path-parameter-value\" }.\n */\n pathParameters?: { [key: string]: any | ParameterValue };\n formData?: { [key: string]: any };\n /**\n * A dictionary of request headers that need to be applied to the request.\n * Here the key is the \"header-name\" and the value is the \"header-value\". The header-value MUST be of type string.\n * - ContentType must be provided with the key name as \"Content-Type\". Default value \"application/json; charset=utf-8\".\n * - \"Transfer-Encoding\" is set to \"chunked\" by default if \"options.bodyIsStream\" is set to true.\n * - \"Content-Type\" is set to \"application/octet-stream\" by default if \"options.bodyIsStream\" is set to true.\n * - \"accept-language\" by default is set to \"en-US\"\n * - \"x-ms-client-request-id\" by default is set to a new Guid. To not generate a guid for the request, please set options.disableClientRequestId to true\n */\n headers?: { [key: string]: any };\n /**\n * When set to true, instructs the client to not set \"x-ms-client-request-id\" header to a new Guid().\n */\n disableClientRequestId?: boolean;\n /**\n * The request body. It can be of any type. This value will be serialized if it is not a stream.\n */\n body?: any;\n /**\n * Provides information on how to serialize the request body.\n */\n serializationMapper?: Mapper;\n /**\n * A dictionary of mappers that may be used while [de]serialization.\n */\n mappers?: { [x: string]: any };\n /**\n * Provides information on how to deserialize the response body.\n */\n deserializationMapper?: object;\n /**\n * Indicates whether this method should JSON.stringify() the request body. Default value: false.\n */\n disableJsonStringifyOnBody?: boolean;\n /**\n * Indicates whether the request body is a stream (useful for file upload scenarios).\n */\n bodyIsStream?: boolean;\n abortSignal?: AbortSignalLike;\n onUploadProgress?: (progress: TransferProgressEvent) => void;\n onDownloadProgress?: (progress: TransferProgressEvent) => void;\n}\n\n/**\n * The Parameter value provided for path or query parameters in RequestPrepareOptions\n */\nexport interface ParameterValue {\n value: any;\n skipUrlEncoding: boolean;\n [key: string]: any;\n}\n\n/**\n * Describes the base structure of the options object that will be used in every operation.\n */\nexport interface RequestOptionsBase {\n /**\n * @property {object} [customHeaders] User defined custom request headers that\n * will be applied before the request is sent.\n */\n customHeaders?: { [key: string]: string };\n\n /**\n * The signal which can be used to abort requests.\n */\n abortSignal?: AbortSignalLike;\n\n /**\n * The number of milliseconds a request can take before automatically being terminated.\n */\n timeout?: number;\n\n /**\n * Callback which fires upon upload progress.\n */\n onUploadProgress?: (progress: TransferProgressEvent) => void;\n\n /**\n * Callback which fires upon download progress.\n */\n onDownloadProgress?: (progress: TransferProgressEvent) => void;\n\n [key: string]: any;\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\n/**\n * The different levels of logs that can be used with the HttpPipelineLogger.\n */\nexport enum HttpPipelineLogLevel {\n /**\n * A log level that indicates that no logs will be logged.\n */\n OFF,\n\n /**\n * An error log.\n */\n ERROR,\n\n /**\n * A warning log.\n */\n WARNING,\n\n /**\n * An information log.\n */\n INFO\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { HttpOperationResponse } from \"./httpOperationResponse\";\nimport { WebResource } from \"./webResource\";\n\nexport class RestError extends Error {\n static readonly REQUEST_SEND_ERROR: string = \"REQUEST_SEND_ERROR\";\n static readonly REQUEST_ABORTED_ERROR: string = \"REQUEST_ABORTED_ERROR\";\n static readonly PARSE_ERROR: string = \"PARSE_ERROR\";\n\n code?: string;\n statusCode?: number;\n request?: WebResource;\n response?: HttpOperationResponse;\n body?: any;\n constructor(message: string, code?: string, statusCode?: number, request?: WebResource, response?: HttpOperationResponse, body?: any) {\n super(message);\n this.code = code;\n this.statusCode = statusCode;\n this.request = request;\n this.response = response;\n this.body = body;\n\n Object.setPrototypeOf(this, RestError.prototype);\n }\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { HttpClient } from \"./httpClient\";\nimport { HttpHeaders } from \"./httpHeaders\";\nimport { WebResource, TransferProgressEvent } from \"./webResource\";\nimport { HttpOperationResponse } from \"./httpOperationResponse\";\nimport { RestError } from \"./restError\";\n\n/**\n * A HttpClient implementation that uses XMLHttpRequest to send HTTP requests.\n */\nexport class XhrHttpClient implements HttpClient {\n public sendRequest(request: WebResource): Promise {\n const xhr = new XMLHttpRequest();\n\n if (request.proxySettings) {\n throw new Error(\"HTTP proxy is not supported in browser environment\");\n }\n\n const abortSignal = request.abortSignal;\n if (abortSignal) {\n const listener = () => {\n xhr.abort();\n };\n abortSignal.addEventListener(\"abort\", listener);\n xhr.addEventListener(\"readystatechange\", () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n abortSignal.removeEventListener(\"abort\", listener);\n }\n });\n }\n\n addProgressListener(xhr.upload, request.onUploadProgress);\n addProgressListener(xhr, request.onDownloadProgress);\n\n if (request.formData) {\n const formData = request.formData;\n const requestForm = new FormData();\n const appendFormValue = (key: string, value: any) => {\n if (value && value.hasOwnProperty(\"value\") && value.hasOwnProperty(\"options\")) {\n requestForm.append(key, value.value, value.options);\n } else {\n requestForm.append(key, value);\n }\n };\n for (const formKey of Object.keys(formData)) {\n const formValue = formData[formKey];\n if (Array.isArray(formValue)) {\n for (let j = 0; j < formValue.length; j++) {\n appendFormValue(formKey, formValue[j]);\n }\n } else {\n appendFormValue(formKey, formValue);\n }\n }\n\n request.body = requestForm;\n request.formData = undefined;\n const contentType = request.headers.get(\"Content-Type\");\n if (contentType && contentType.indexOf(\"multipart/form-data\") !== -1) {\n // browser will automatically apply a suitable content-type header\n request.headers.remove(\"Content-Type\");\n }\n }\n\n xhr.open(request.method, request.url);\n xhr.timeout = request.timeout;\n xhr.withCredentials = request.withCredentials;\n for (const header of request.headers.headersArray()) {\n xhr.setRequestHeader(header.name, header.value);\n }\n xhr.responseType = request.streamResponseBody ? \"blob\" : \"text\";\n\n // tslint:disable-next-line:no-null-keyword\n xhr.send(request.body === undefined ? null : request.body);\n\n if (request.streamResponseBody) {\n return new Promise((resolve, reject) => {\n xhr.addEventListener(\"readystatechange\", () => {\n // Resolve as soon as headers are loaded\n if (xhr.readyState === XMLHttpRequest.HEADERS_RECEIVED) {\n const blobBody = new Promise((resolve, reject) => {\n xhr.addEventListener(\"load\", () => {\n resolve(xhr.response);\n });\n rejectOnTerminalEvent(request, xhr, reject);\n });\n resolve({\n request,\n status: xhr.status,\n headers: parseHeaders(xhr),\n blobBody\n });\n }\n });\n rejectOnTerminalEvent(request, xhr, reject);\n });\n } else {\n return new Promise(function (resolve, reject) {\n xhr.addEventListener(\"load\", () => resolve({\n request,\n status: xhr.status,\n headers: parseHeaders(xhr),\n bodyAsText: xhr.responseText\n }));\n rejectOnTerminalEvent(request, xhr, reject);\n });\n }\n }\n}\n\nfunction addProgressListener(xhr: XMLHttpRequestEventTarget, listener?: (progress: TransferProgressEvent) => void) {\n if (listener) {\n xhr.addEventListener(\"progress\", rawEvent => listener({\n loadedBytes: rawEvent.loaded\n }));\n }\n}\n\n// exported locally for testing\nexport function parseHeaders(xhr: XMLHttpRequest) {\n const responseHeaders = new HttpHeaders();\n const headerLines = xhr.getAllResponseHeaders().trim().split(/[\\r\\n]+/);\n for (const line of headerLines) {\n const index = line.indexOf(\":\");\n const headerName = line.slice(0, index);\n const headerValue = line.slice(index + 2);\n responseHeaders.set(headerName, headerValue);\n }\n return responseHeaders;\n}\n\nfunction rejectOnTerminalEvent(request: WebResource, xhr: XMLHttpRequest, reject: (err: any) => void) {\n xhr.addEventListener(\"error\", () => reject(new RestError(`Failed to send request to ${request.url}`, RestError.REQUEST_SEND_ERROR, undefined, request)));\n xhr.addEventListener(\"abort\", () => reject(new RestError(\"The request was aborted\", RestError.REQUEST_ABORTED_ERROR, undefined, request)));\n xhr.addEventListener(\"timeout\", () => reject(new RestError(`timeout of ${xhr.timeout}ms exceeded`, RestError.REQUEST_SEND_ERROR, undefined, request)));\n}\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { QueryCollectionFormat } from \"./queryCollectionFormat\";\nimport { Mapper } from \"./serializer\";\n\nexport type ParameterPath = string | string[] | { [propertyName: string]: ParameterPath };\n\n/**\n * A common interface that all Operation parameter's extend.\n */\nexport interface OperationParameter {\n /**\n * The path to this parameter's value in OperationArguments or the object that contains paths for\n * each property's value in OperationArguments.\n */\n parameterPath: ParameterPath;\n\n /**\n * The mapper that defines how to validate and serialize this parameter's value.\n */\n mapper: Mapper;\n}\n\n/**\n * A parameter for an operation that will be substituted into the operation's request URL.\n */\nexport interface OperationURLParameter extends OperationParameter {\n /**\n * Whether or not to skip encoding the URL parameter's value before adding it to the URL.\n */\n skipEncoding?: boolean;\n}\n\n/**\n * A parameter for an operation that will be added as a query parameter to the operation's HTTP\n * request.\n */\nexport interface OperationQueryParameter extends OperationParameter {\n /**\n * Whether or not to skip encoding the query parameter's value before adding it to the URL.\n */\n skipEncoding?: boolean;\n\n /**\n * If this query parameter's value is a collection, what type of format should the value be\n * converted to.\n */\n collectionFormat?: QueryCollectionFormat;\n}\n\n/**\n * Get the path to this parameter's value as a dotted string (a.b.c).\n * @param parameter The parameter to get the path string for.\n * @returns The path to this parameter's value as a dotted string.\n */\nexport function getPathStringFromParameter(parameter: OperationParameter): string {\n return getPathStringFromParameterPath(parameter.parameterPath, parameter.mapper);\n}\n\nexport function getPathStringFromParameterPath(parameterPath: ParameterPath, mapper: Mapper): string {\n let result: string;\n if (typeof parameterPath === \"string\") {\n result = parameterPath;\n } else if (Array.isArray(parameterPath)) {\n result = parameterPath.join(\".\");\n } else {\n result = mapper.serializedName!;\n }\n return result;\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { OperationParameter, OperationQueryParameter, OperationURLParameter } from \"./operationParameter\";\nimport { OperationResponse } from \"./operationResponse\";\nimport { MapperType, Serializer } from \"./serializer\";\nimport { HttpMethods } from \"./webResource\";\n\n/**\n * A specification that defines an operation.\n */\nexport interface OperationSpec {\n /**\n * The serializer to use in this operation.\n */\n readonly serializer: Serializer;\n\n /**\n * The HTTP method that should be used by requests for this operation.\n */\n readonly httpMethod: HttpMethods;\n\n /**\n * The URL that was provided in the service's specification. This will still have all of the URL\n * template variables in it. If this is not provided when the OperationSpec is created, then it\n * will be populated by a \"baseUri\" property on the ServiceClient.\n */\n readonly baseUrl?: string;\n\n /**\n * The fixed path for this operation's URL. This will still have all of the URL template variables\n * in it.\n */\n readonly path?: string;\n\n /**\n * The content type of the request body. This value will be used as the \"Content-Type\" header if\n * it is provided.\n */\n readonly contentType?: string;\n\n /**\n * The parameter that will be used to construct the HTTP request's body.\n */\n readonly requestBody?: OperationParameter;\n\n /**\n * Whether or not this operation uses XML request and response bodies.\n */\n readonly isXML?: boolean;\n\n /**\n * The parameters to the operation method that will be substituted into the constructed URL.\n */\n readonly urlParameters?: ReadonlyArray;\n\n /**\n * The parameters to the operation method that will be added to the constructed URL's query.\n */\n readonly queryParameters?: ReadonlyArray;\n\n /**\n * The parameters to the operation method that will be converted to headers on the operation's\n * HTTP request.\n */\n readonly headerParameters?: ReadonlyArray;\n\n /**\n * The parameters to the operation method that will be used to create a formdata body for the\n * operation's HTTP request.\n */\n readonly formDataParameters?: ReadonlyArray;\n\n /**\n * The different types of responses that this operation can return based on what status code is\n * returned.\n */\n readonly responses: { [responseCode: string]: OperationResponse };\n}\n\nexport function isStreamOperation(operationSpec: OperationSpec): boolean {\n let result = false;\n for (const statusCode in operationSpec.responses) {\n const operationResponse: OperationResponse = operationSpec.responses[statusCode];\n if (operationResponse.bodyMapper && operationResponse.bodyMapper.type.name === MapperType.Stream) {\n result = true;\n break;\n }\n }\n return result;\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nconst parser = new DOMParser();\nexport function parseXML(str: string): Promise {\n try {\n const dom = parser.parseFromString(str, \"application/xml\");\n throwIfError(dom);\n\n const obj = domToObject(dom.childNodes[0]);\n return Promise.resolve(obj);\n } catch (err) {\n return Promise.reject(err);\n }\n}\n\nlet errorNS = \"\";\ntry {\n errorNS = parser.parseFromString(\"INVALID\", \"text/xml\").getElementsByTagName(\"parsererror\")[0].namespaceURI!;\n} catch (ignored) {\n // Most browsers will return a document containing , but IE will throw.\n}\n\nfunction throwIfError(dom: Document) {\n if (errorNS) {\n const parserErrors = dom.getElementsByTagNameNS(errorNS, \"parsererror\");\n if (parserErrors.length) {\n throw new Error(parserErrors.item(0)!.innerHTML);\n }\n }\n}\n\nfunction isElement(node: Node): node is Element {\n return !!(node as Element).attributes;\n}\n\n/**\n * Get the Element-typed version of the provided Node if the provided node is an element with\n * attributes. If it isn't, then undefined is returned.\n */\nfunction asElementWithAttributes(node: Node): Element | undefined {\n return isElement(node) && node.hasAttributes() ? node : undefined;\n}\n\nfunction domToObject(node: Node): any {\n let result: any = {};\n\n const childNodeCount: number = node.childNodes.length;\n\n const firstChildNode: Node = node.childNodes[0];\n const onlyChildTextValue: string | undefined = (firstChildNode && childNodeCount === 1 && firstChildNode.nodeType === Node.TEXT_NODE && firstChildNode.nodeValue) || undefined;\n\n const elementWithAttributes: Element | undefined = asElementWithAttributes(node);\n if (elementWithAttributes) {\n result[\"$\"] = {};\n\n for (let i = 0; i < elementWithAttributes.attributes.length; i++) {\n const attr = elementWithAttributes.attributes[i];\n result[\"$\"][attr.nodeName] = attr.nodeValue;\n }\n\n if (onlyChildTextValue) {\n result[\"_\"] = onlyChildTextValue;\n }\n } else if (childNodeCount === 0) {\n result = \"\";\n } else if (onlyChildTextValue) {\n result = onlyChildTextValue;\n }\n\n if (!onlyChildTextValue) {\n for (let i = 0; i < childNodeCount; i++) {\n const child = node.childNodes[i];\n // Ignore leading/trailing whitespace nodes\n if (child.nodeType !== Node.TEXT_NODE) {\n const childObject: any = domToObject(child);\n if (!result[child.nodeName]) {\n result[child.nodeName] = childObject;\n } else if (Array.isArray(result[child.nodeName])) {\n result[child.nodeName].push(childObject);\n } else {\n result[child.nodeName] = [result[child.nodeName], childObject];\n }\n }\n }\n }\n\n return result;\n}\n\n// tslint:disable-next-line:no-null-keyword\nconst doc = document.implementation.createDocument(null, null, null);\nconst serializer = new XMLSerializer();\n\nexport function stringifyXML(obj: any, opts?: { rootName?: string }) {\n const rootName = opts && opts.rootName || \"root\";\n const dom = buildNode(obj, rootName)[0];\n return '' + serializer.serializeToString(dom);\n}\n\nfunction buildAttributes(attrs: { [key: string]: { toString(): string; } }): Attr[] {\n const result = [];\n for (const key of Object.keys(attrs)) {\n const attr = doc.createAttribute(key);\n attr.value = attrs[key].toString();\n result.push(attr);\n }\n return result;\n}\n\nfunction buildNode(obj: any, elementName: string): Node[] {\n if (typeof obj === \"string\" || typeof obj === \"number\" || typeof obj === \"boolean\") {\n const elem = doc.createElement(elementName);\n elem.textContent = obj.toString();\n return [elem];\n }\n else if (Array.isArray(obj)) {\n const result = [];\n for (const arrayElem of obj) {\n for (const child of buildNode(arrayElem, elementName)) {\n result.push(child);\n }\n }\n return result;\n } else if (typeof obj === \"object\") {\n const elem = doc.createElement(elementName);\n for (const key of Object.keys(obj)) {\n if (key === \"$\") {\n for (const attr of buildAttributes(obj[key])) {\n elem.attributes.setNamedItem(attr);\n }\n } else {\n for (const child of buildNode(obj[key], key)) {\n elem.appendChild(child);\n }\n }\n }\n return [elem];\n }\n else {\n throw new Error(`Illegal value passed to buildObject: ${obj}`);\n }\n}\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { HttpOperationResponse } from \"../httpOperationResponse\";\nimport { HttpPipelineLogger } from \"../httpPipelineLogger\";\nimport { HttpPipelineLogLevel } from \"../httpPipelineLogLevel\";\nimport { WebResource } from \"../webResource\";\n\n/**\n * Creates a new RequestPolicy per-request that uses the provided nextPolicy.\n */\nexport type RequestPolicyFactory = {\n create(nextPolicy: RequestPolicy, options: RequestPolicyOptions): RequestPolicy\n};\n\nexport interface RequestPolicy {\n sendRequest(httpRequest: WebResource): Promise;\n}\n\nexport abstract class BaseRequestPolicy implements RequestPolicy {\n protected constructor(readonly _nextPolicy: RequestPolicy, readonly _options: RequestPolicyOptions) {\n }\n\n public abstract sendRequest(webResource: WebResource): Promise;\n\n /**\n * Get whether or not a log with the provided log level should be logged.\n * @param logLevel The log level of the log that will be logged.\n * @returns Whether or not a log with the provided log level should be logged.\n */\n public shouldLog(logLevel: HttpPipelineLogLevel): boolean {\n return this._options.shouldLog(logLevel);\n }\n\n /**\n * Attempt to log the provided message to the provided logger. If no logger was provided or if\n * the log level does not meat the logger's threshold, then nothing will be logged.\n * @param logLevel The log level of this log.\n * @param message The message of this log.\n */\n public log(logLevel: HttpPipelineLogLevel, message: string): void {\n this._options.log(logLevel, message);\n }\n}\n\n/**\n * Optional properties that can be used when creating a RequestPolicy.\n */\nexport class RequestPolicyOptions {\n constructor(private _logger?: HttpPipelineLogger) {\n }\n\n /**\n * Get whether or not a log with the provided log level should be logged.\n * @param logLevel The log level of the log that will be logged.\n * @returns Whether or not a log with the provided log level should be logged.\n */\n public shouldLog(logLevel: HttpPipelineLogLevel): boolean {\n return !!this._logger &&\n logLevel !== HttpPipelineLogLevel.OFF &&\n logLevel <= this._logger.minimumLogLevel;\n }\n\n /**\n * Attempt to log the provided message to the provided logger. If no logger was provided or if\n * the log level does not meat the logger's threshold, then nothing will be logged.\n * @param logLevel The log level of this log.\n * @param message The message of this log.\n */\n public log(logLevel: HttpPipelineLogLevel, message: string): void {\n if (this._logger && this.shouldLog(logLevel)) {\n this._logger.log(logLevel, message);\n }\n }\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { HttpOperationResponse } from \"../httpOperationResponse\";\nimport { OperationResponse } from \"../operationResponse\";\nimport { OperationSpec, isStreamOperation } from \"../operationSpec\";\nimport { RestError } from \"../restError\";\nimport { Mapper, MapperType } from \"../serializer\";\nimport * as utils from \"../util/utils\";\nimport { parseXML } from \"../util/xml\";\nimport { WebResource } from \"../webResource\";\nimport { BaseRequestPolicy, RequestPolicy, RequestPolicyFactory, RequestPolicyOptions } from \"./requestPolicy\";\n\n/**\n * The content-types that will indicate that an operation response should be deserialized in a\n * particular way.\n */\nexport interface DeserializationContentTypes {\n /**\n * The content-types that indicate that an operation response should be deserialized as JSON.\n * Defaults to [ \"application/json\", \"text/json\" ].\n */\n json?: string[];\n\n /**\n * The content-types that indicate that an operation response should be deserialized as XML.\n * Defaults to [ \"application/xml\", \"application/atom+xml\" ].\n */\n xml?: string[];\n}\n\n/**\n * Create a new serialization RequestPolicyCreator that will serialized HTTP request bodies as they\n * pass through the HTTP pipeline.\n */\nexport function deserializationPolicy(deserializationContentTypes?: DeserializationContentTypes): RequestPolicyFactory {\n return {\n create: (nextPolicy: RequestPolicy, options: RequestPolicyOptions) => {\n return new DeserializationPolicy(nextPolicy, deserializationContentTypes, options);\n }\n };\n}\n\nexport const defaultJsonContentTypes = [\"application/json\", \"text/json\"];\nexport const defaultXmlContentTypes = [\"application/xml\", \"application/atom+xml\"];\n\n/**\n * A RequestPolicy that will deserialize HTTP response bodies and headers as they pass through the\n * HTTP pipeline.\n */\nexport class DeserializationPolicy extends BaseRequestPolicy {\n public readonly jsonContentTypes: string[];\n public readonly xmlContentTypes: string[];\n\n constructor(nextPolicy: RequestPolicy, deserializationContentTypes: DeserializationContentTypes | undefined, options: RequestPolicyOptions) {\n super(nextPolicy, options);\n\n this.jsonContentTypes = deserializationContentTypes && deserializationContentTypes.json || defaultJsonContentTypes;\n this.xmlContentTypes = deserializationContentTypes && deserializationContentTypes.xml || defaultXmlContentTypes;\n }\n\n public async sendRequest(request: WebResource): Promise {\n return this._nextPolicy.sendRequest(request).then((response: HttpOperationResponse) => deserializeResponseBody(this.jsonContentTypes, this.xmlContentTypes, response));\n }\n}\n\nfunction getOperationResponse(parsedResponse: HttpOperationResponse): undefined | OperationResponse {\n let result: OperationResponse | undefined;\n const request: WebResource = parsedResponse.request;\n const operationSpec: OperationSpec | undefined = request.operationSpec;\n if (operationSpec) {\n const operationResponseGetter: undefined | ((operationSpec: OperationSpec, response: HttpOperationResponse) => (undefined | OperationResponse)) = request.operationResponseGetter;\n if (!operationResponseGetter) {\n result = operationSpec.responses[parsedResponse.status];\n } else {\n result = operationResponseGetter(operationSpec, parsedResponse);\n }\n }\n return result;\n}\n\nfunction shouldDeserializeResponse(parsedResponse: HttpOperationResponse): boolean {\n const shouldDeserialize: undefined | boolean | ((response: HttpOperationResponse) => boolean) = parsedResponse.request.shouldDeserialize;\n let result: boolean;\n if (shouldDeserialize === undefined) {\n result = true;\n } else if (typeof shouldDeserialize === \"boolean\") {\n result = shouldDeserialize;\n } else {\n result = shouldDeserialize(parsedResponse);\n }\n return result;\n}\n\nexport function deserializeResponseBody(jsonContentTypes: string[], xmlContentTypes: string[], response: HttpOperationResponse): Promise {\n return parse(jsonContentTypes, xmlContentTypes, response).then(parsedResponse => {\n const shouldDeserialize: boolean = shouldDeserializeResponse(parsedResponse);\n if (shouldDeserialize) {\n const operationSpec: OperationSpec | undefined = parsedResponse.request.operationSpec;\n if (operationSpec && operationSpec.responses) {\n const statusCode: number = parsedResponse.status;\n\n const expectedStatusCodes: string[] = Object.keys(operationSpec.responses);\n\n const hasNoExpectedStatusCodes: boolean = (expectedStatusCodes.length === 0 || (expectedStatusCodes.length === 1 && expectedStatusCodes[0] === \"default\"));\n\n const responseSpec: OperationResponse | undefined = getOperationResponse(parsedResponse);\n\n const isExpectedStatusCode: boolean = hasNoExpectedStatusCodes ? (200 <= statusCode && statusCode < 300) : !!responseSpec;\n if (!isExpectedStatusCode) {\n const defaultResponseSpec: OperationResponse = operationSpec.responses.default;\n if (defaultResponseSpec) {\n const initialErrorMessage: string = isStreamOperation(operationSpec)\n ? `Unexpected status code: ${statusCode}`\n : parsedResponse.bodyAsText as string;\n\n const error = new RestError(initialErrorMessage);\n error.statusCode = statusCode;\n error.request = utils.stripRequest(parsedResponse.request);\n error.response = utils.stripResponse(parsedResponse);\n\n let parsedErrorResponse: { [key: string]: any } = parsedResponse.parsedBody;\n try {\n if (parsedErrorResponse) {\n const defaultResponseBodyMapper: Mapper | undefined = defaultResponseSpec.bodyMapper;\n if (defaultResponseBodyMapper && defaultResponseBodyMapper.serializedName === \"CloudError\") {\n if (parsedErrorResponse.error) {\n parsedErrorResponse = parsedErrorResponse.error;\n }\n if (parsedErrorResponse.code) {\n error.code = parsedErrorResponse.code;\n }\n if (parsedErrorResponse.message) {\n error.message = parsedErrorResponse.message;\n }\n } else {\n let internalError: any = parsedErrorResponse;\n if (parsedErrorResponse.error) {\n internalError = parsedErrorResponse.error;\n }\n\n error.code = internalError.code;\n if (internalError.message) {\n error.message = internalError.message;\n }\n }\n\n if (defaultResponseBodyMapper) {\n let valueToDeserialize: any = parsedErrorResponse;\n if (operationSpec.isXML && defaultResponseBodyMapper.type.name === MapperType.Sequence) {\n valueToDeserialize = typeof parsedErrorResponse === \"object\"\n ? parsedErrorResponse[defaultResponseBodyMapper.xmlElementName!]\n : [];\n }\n error.body = operationSpec.serializer.deserialize(defaultResponseBodyMapper, valueToDeserialize, \"error.body\");\n }\n }\n } catch (defaultError) {\n error.message = `Error \\\"${defaultError.message}\\\" occurred in deserializing the responseBody - \\\"${parsedResponse.bodyAsText}\\\" for the default response.`;\n }\n return Promise.reject(error);\n }\n } else if (responseSpec) {\n if (responseSpec.bodyMapper) {\n let valueToDeserialize: any = parsedResponse.parsedBody;\n if (operationSpec.isXML && responseSpec.bodyMapper.type.name === MapperType.Sequence) {\n valueToDeserialize = typeof valueToDeserialize === \"object\" ? valueToDeserialize[responseSpec.bodyMapper.xmlElementName!] : [];\n }\n try {\n parsedResponse.parsedBody = operationSpec.serializer.deserialize(responseSpec.bodyMapper, valueToDeserialize, \"operationRes.parsedBody\");\n } catch (error) {\n const restError = new RestError(`Error ${error} occurred in deserializing the responseBody - ${parsedResponse.bodyAsText}`);\n restError.request = utils.stripRequest(parsedResponse.request);\n restError.response = utils.stripResponse(parsedResponse);\n return Promise.reject(restError);\n }\n } else if (operationSpec.httpMethod === \"HEAD\") {\n // head methods never have a body, but we return a boolean to indicate presence/absence of the resource\n parsedResponse.parsedBody = response.status >= 200 && response.status < 300;\n }\n\n if (responseSpec.headersMapper) {\n parsedResponse.parsedHeaders = operationSpec.serializer.deserialize(responseSpec.headersMapper, parsedResponse.headers.rawHeaders(), \"operationRes.parsedHeaders\");\n }\n }\n }\n }\n return Promise.resolve(parsedResponse);\n });\n}\n\nfunction parse(jsonContentTypes: string[], xmlContentTypes: string[], operationResponse: HttpOperationResponse): Promise {\n const errorHandler = (err: Error & { code: string }) => {\n const msg = `Error \"${err}\" occurred while parsing the response body - ${operationResponse.bodyAsText}.`;\n const errCode = err.code || RestError.PARSE_ERROR;\n const e = new RestError(msg, errCode, operationResponse.status, operationResponse.request, operationResponse, operationResponse.bodyAsText);\n return Promise.reject(e);\n };\n\n if (!operationResponse.request.streamResponseBody && operationResponse.bodyAsText) {\n const text = operationResponse.bodyAsText;\n const contentType: string = operationResponse.headers.get(\"Content-Type\") || \"\";\n const contentComponents: string[] = !contentType ? [] : contentType.split(\";\").map(component => component.toLowerCase());\n if (contentComponents.length === 0 || contentComponents.some(component => jsonContentTypes.indexOf(component) !== -1)) {\n return new Promise(resolve => {\n operationResponse.parsedBody = JSON.parse(text);\n resolve(operationResponse);\n }).catch(errorHandler);\n } else if (contentComponents.some(component => xmlContentTypes.indexOf(component) !== -1)) {\n return parseXML(text)\n .then(body => {\n operationResponse.parsedBody = body;\n return operationResponse;\n })\n .catch(errorHandler);\n }\n }\n\n return Promise.resolve(operationResponse);\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { HttpOperationResponse } from \"../httpOperationResponse\";\nimport * as utils from \"../util/utils\";\nimport { WebResource } from \"../webResource\";\nimport { BaseRequestPolicy, RequestPolicy, RequestPolicyFactory, RequestPolicyOptions } from \"./requestPolicy\";\nimport { RestError } from \"../restError\";\n\nexport interface RetryData {\n retryCount: number;\n retryInterval: number;\n error?: RetryError;\n}\n\nexport interface RetryError extends Error {\n message: string;\n code?: string;\n innerError?: RetryError;\n}\n\nexport function exponentialRetryPolicy(retryCount?: number, retryInterval?: number, minRetryInterval?: number, maxRetryInterval?: number): RequestPolicyFactory {\n return {\n create: (nextPolicy: RequestPolicy, options: RequestPolicyOptions) => {\n return new ExponentialRetryPolicy(nextPolicy, options, retryCount, retryInterval, minRetryInterval, maxRetryInterval);\n }\n };\n}\n\nconst DEFAULT_CLIENT_RETRY_INTERVAL = 1000 * 30;\nconst DEFAULT_CLIENT_RETRY_COUNT = 3;\nconst DEFAULT_CLIENT_MAX_RETRY_INTERVAL = 1000 * 90;\nconst DEFAULT_CLIENT_MIN_RETRY_INTERVAL = 1000 * 3;\n\n/**\n * @class\n * Instantiates a new \"ExponentialRetryPolicyFilter\" instance.\n */\nexport class ExponentialRetryPolicy extends BaseRequestPolicy {\n /**\n * The client retry count.\n */\n retryCount: number;\n /**\n * The client retry interval in milliseconds.\n */\n retryInterval: number;\n /**\n * The minimum retry interval in milliseconds.\n */\n minRetryInterval: number;\n /**\n * The maximum retry interval in milliseconds.\n */\n maxRetryInterval: number;\n\n /**\n * @constructor\n * @param {RequestPolicy} nextPolicy The next RequestPolicy in the pipeline chain.\n * @param {RequestPolicyOptions} options The options for this RequestPolicy.\n * @param {number} [retryCount] The client retry count.\n * @param {number} [retryInterval] The client retry interval, in milliseconds.\n * @param {number} [minRetryInterval] The minimum retry interval, in milliseconds.\n * @param {number} [maxRetryInterval] The maximum retry interval, in milliseconds.\n */\n constructor(nextPolicy: RequestPolicy, options: RequestPolicyOptions, retryCount?: number, retryInterval?: number, minRetryInterval?: number, maxRetryInterval?: number) {\n super(nextPolicy, options);\n function isNumber(n: any): n is number { return typeof n === \"number\"; }\n this.retryCount = isNumber(retryCount) ? retryCount : DEFAULT_CLIENT_RETRY_COUNT;\n this.retryInterval = isNumber(retryInterval) ? retryInterval : DEFAULT_CLIENT_RETRY_INTERVAL;\n this.minRetryInterval = isNumber(minRetryInterval) ? minRetryInterval : DEFAULT_CLIENT_MIN_RETRY_INTERVAL;\n this.maxRetryInterval = isNumber(maxRetryInterval) ? maxRetryInterval : DEFAULT_CLIENT_MAX_RETRY_INTERVAL;\n }\n\n public sendRequest(request: WebResource): Promise {\n return this._nextPolicy.sendRequest(request.clone())\n .then(response => retry(this, request, response))\n .catch(error => retry(this, request, error.response, undefined, error));\n }\n}\n\n/**\n * Determines if the operation should be retried and how long to wait until the next retry.\n *\n * @param {ExponentialRetryPolicy} policy The ExponentialRetryPolicy that this function is being called against.\n * @param {number} statusCode The HTTP status code.\n * @param {RetryData} retryData The retry data.\n * @return {boolean} True if the operation qualifies for a retry; false otherwise.\n */\nfunction shouldRetry(policy: ExponentialRetryPolicy, statusCode: number | undefined, retryData: RetryData): boolean {\n if (statusCode == undefined || (statusCode < 500 && statusCode !== 408) || statusCode === 501 || statusCode === 505) {\n return false;\n }\n\n let currentCount: number;\n if (!retryData) {\n throw new Error(\"retryData for the ExponentialRetryPolicyFilter cannot be null.\");\n } else {\n currentCount = (retryData && retryData.retryCount);\n }\n\n return (currentCount < policy.retryCount);\n}\n\n/**\n * Updates the retry data for the next attempt.\n *\n * @param {ExponentialRetryPolicy} policy The ExponentialRetryPolicy that this function is being called against.\n * @param {RetryData} retryData The retry data.\n * @param {RetryError} [err] The operation\"s error, if any.\n */\nfunction updateRetryData(policy: ExponentialRetryPolicy, retryData?: RetryData, err?: RetryError): RetryData {\n if (!retryData) {\n retryData = {\n retryCount: 0,\n retryInterval: 0\n };\n }\n\n if (err) {\n if (retryData.error) {\n err.innerError = retryData.error;\n }\n\n retryData.error = err;\n }\n\n // Adjust retry count\n retryData.retryCount++;\n\n // Adjust retry interval\n let incrementDelta = Math.pow(2, retryData.retryCount) - 1;\n const boundedRandDelta = policy.retryInterval * 0.8 +\n Math.floor(Math.random() * (policy.retryInterval * 1.2 - policy.retryInterval * 0.8));\n incrementDelta *= boundedRandDelta;\n\n retryData.retryInterval = Math.min(policy.minRetryInterval + incrementDelta, policy.maxRetryInterval);\n\n return retryData;\n}\n\nfunction retry(policy: ExponentialRetryPolicy, request: WebResource, response?: HttpOperationResponse, retryData?: RetryData, requestError?: RetryError): Promise {\n retryData = updateRetryData(policy, retryData, requestError);\n const isAborted: boolean | undefined = request.abortSignal && request.abortSignal.aborted;\n if (!isAborted && shouldRetry(policy, response && response.status, retryData)) {\n return utils.delay(retryData.retryInterval)\n .then(() => policy._nextPolicy.sendRequest(request.clone()))\n .then(res => retry(policy, request, res, retryData, undefined))\n .catch(err => retry(policy, request, response, retryData, err));\n } else if (isAborted || requestError || !response) {\n // If the operation failed in the end, return all errors instead of just the last one\n const err = retryData.error ||\n new RestError(\n \"Failed to send the request.\",\n RestError.REQUEST_SEND_ERROR,\n response && response.status,\n response && response.request,\n response);\n return Promise.reject(err);\n } else {\n return Promise.resolve(response);\n }\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { HttpOperationResponse } from \"../httpOperationResponse\";\nimport * as utils from \"../util/utils\";\nimport { WebResource } from \"../webResource\";\nimport { BaseRequestPolicy, RequestPolicy, RequestPolicyFactory, RequestPolicyOptions } from \"./requestPolicy\";\n\nexport function generateClientRequestIdPolicy(requestIdHeaderName = \"x-ms-client-request-id\"): RequestPolicyFactory {\n return {\n create: (nextPolicy: RequestPolicy, options: RequestPolicyOptions) => {\n return new GenerateClientRequestIdPolicy(nextPolicy, options, requestIdHeaderName);\n }\n };\n}\n\nexport class GenerateClientRequestIdPolicy extends BaseRequestPolicy {\n constructor(nextPolicy: RequestPolicy, options: RequestPolicyOptions, private _requestIdHeaderName: string) {\n super(nextPolicy, options);\n }\n\n public sendRequest(request: WebResource): Promise {\n if (!request.headers.contains(this._requestIdHeaderName)) {\n request.headers.set(this._requestIdHeaderName, utils.generateUuid());\n }\n return this._nextPolicy.sendRequest(request);\n }\n}\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\n/*\n * NOTE: When moving this file, please update \"browser\" section in package.json\n * and \"plugins\" section in webpack.testconfig.ts.\n */\n\nimport { TelemetryInfo } from \"./userAgentPolicy\";\n\ninterface NavigatorEx extends Navigator {\n readonly oscpu: string | undefined;\n}\n\nexport function getDefaultUserAgentKey(): string {\n return \"x-ms-command-name\";\n}\n\nexport function getPlatformSpecificData(): TelemetryInfo[] {\n const navigator = window.navigator as NavigatorEx;\n const osInfo = {\n key: \"OS\",\n value: (navigator.oscpu || navigator.platform).replace(\" \", \"\")\n };\n\n return [osInfo];\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { HttpHeaders } from \"../httpHeaders\";\nimport { HttpOperationResponse } from \"../httpOperationResponse\";\nimport { Constants } from \"../util/constants\";\nimport { WebResource } from \"../webResource\";\nimport { getDefaultUserAgentKey, getPlatformSpecificData } from \"./msRestUserAgentPolicy\";\nimport { BaseRequestPolicy, RequestPolicy, RequestPolicyFactory, RequestPolicyOptions } from \"./requestPolicy\";\n\nexport type TelemetryInfo = { key?: string; value?: string };\n\nfunction getRuntimeInfo(): TelemetryInfo[] {\n const msRestRuntime = {\n key: \"ms-rest-js\",\n value: Constants.msRestVersion\n };\n\n return [msRestRuntime];\n}\n\nfunction getUserAgentString(telemetryInfo: TelemetryInfo[], keySeparator = \" \", valueSeparator = \"/\"): string {\n return telemetryInfo.map(info => {\n const value = info.value ? `${valueSeparator}${info.value}` : \"\";\n return `${info.key}${value}`;\n }).join(keySeparator);\n}\n\nexport const getDefaultUserAgentHeaderName = getDefaultUserAgentKey;\n\nexport function getDefaultUserAgentValue(): string {\n const runtimeInfo = getRuntimeInfo();\n const platformSpecificData = getPlatformSpecificData();\n const userAgent = getUserAgentString(runtimeInfo.concat(platformSpecificData));\n return userAgent;\n}\n\nexport function userAgentPolicy(userAgentData?: TelemetryInfo): RequestPolicyFactory {\n const key: string = (!userAgentData || userAgentData.key == undefined) ? getDefaultUserAgentKey() : userAgentData.key;\n const value: string = (!userAgentData || userAgentData.value == undefined) ? getDefaultUserAgentValue() : userAgentData.value;\n\n return {\n create: (nextPolicy: RequestPolicy, options: RequestPolicyOptions) => {\n return new UserAgentPolicy(nextPolicy, options, key, value);\n }\n };\n}\n\nexport class UserAgentPolicy extends BaseRequestPolicy {\n constructor(readonly _nextPolicy: RequestPolicy, readonly _options: RequestPolicyOptions, protected headerKey: string, protected headerValue: string) {\n super(_nextPolicy, _options);\n }\n\n sendRequest(request: WebResource): Promise {\n this.addUserAgentHeader(request);\n return this._nextPolicy.sendRequest(request);\n }\n\n addUserAgentHeader(request: WebResource): void {\n if (!request.headers) {\n request.headers = new HttpHeaders();\n }\n\n if (!request.headers.get(this.headerKey) && this.headerValue) {\n request.headers.set(this.headerKey, this.headerValue);\n }\n }\n}\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { replaceAll } from \"./util/utils\";\n\ntype URLQueryParseState = \"ParameterName\" | \"ParameterValue\" | \"Invalid\";\n\n/**\n * A class that handles the query portion of a URLBuilder.\n */\nexport class URLQuery {\n private readonly _rawQuery: { [queryParameterName: string]: string | string[] } = {};\n\n /**\n * Get whether or not there any query parameters in this URLQuery.\n */\n public any(): boolean {\n return Object.keys(this._rawQuery).length > 0;\n }\n\n /**\n * Set a query parameter with the provided name and value. If the parameterValue is undefined or\n * empty, then this will attempt to remove an existing query parameter with the provided\n * parameterName.\n */\n public set(parameterName: string, parameterValue: any): void {\n if (parameterName) {\n if (parameterValue != undefined) {\n const newValue = Array.isArray(parameterValue) ? parameterValue : parameterValue.toString();\n this._rawQuery[parameterName] = newValue;\n } else {\n delete this._rawQuery[parameterName];\n }\n }\n }\n\n /**\n * Get the value of the query parameter with the provided name. If no parameter exists with the\n * provided parameter name, then undefined will be returned.\n */\n public get(parameterName: string): string | string[] | undefined {\n return parameterName ? this._rawQuery[parameterName] : undefined;\n }\n\n /**\n * Get the string representation of this query. The return value will not start with a \"?\".\n */\n public toString(): string {\n let result = \"\";\n for (const parameterName in this._rawQuery) {\n if (result) {\n result += \"&\";\n }\n const parameterValue = this._rawQuery[parameterName];\n if (Array.isArray(parameterValue)) {\n const parameterStrings = [];\n for (const parameterValueElement of parameterValue) {\n parameterStrings.push(`${parameterName}=${parameterValueElement}`);\n }\n result += parameterStrings.join(\"&\");\n } else {\n result += `${parameterName}=${parameterValue}`;\n }\n }\n return result;\n }\n\n /**\n * Parse a URLQuery from the provided text.\n */\n public static parse(text: string): URLQuery {\n const result = new URLQuery();\n\n if (text) {\n if (text.startsWith(\"?\")) {\n text = text.substring(1);\n }\n\n let currentState: URLQueryParseState = \"ParameterName\";\n\n let parameterName = \"\";\n let parameterValue = \"\";\n for (let i = 0; i < text.length; ++i) {\n const currentCharacter: string = text[i];\n switch (currentState) {\n case \"ParameterName\":\n switch (currentCharacter) {\n case \"=\":\n currentState = \"ParameterValue\";\n break;\n\n case \"&\":\n parameterName = \"\";\n parameterValue = \"\";\n break;\n\n default:\n parameterName += currentCharacter;\n break;\n }\n break;\n\n case \"ParameterValue\":\n switch (currentCharacter) {\n case \"=\":\n parameterName = \"\";\n parameterValue = \"\";\n currentState = \"Invalid\";\n break;\n\n case \"&\":\n result.set(parameterName, parameterValue);\n parameterName = \"\";\n parameterValue = \"\";\n currentState = \"ParameterName\";\n break;\n\n default:\n parameterValue += currentCharacter;\n break;\n }\n break;\n\n case \"Invalid\":\n if (currentCharacter === \"&\") {\n currentState = \"ParameterName\";\n }\n break;\n\n default:\n throw new Error(\"Unrecognized URLQuery parse state: \" + currentState);\n }\n }\n if (currentState === \"ParameterValue\") {\n result.set(parameterName, parameterValue);\n }\n }\n\n return result;\n }\n}\n\n/**\n * A class that handles creating, modifying, and parsing URLs.\n */\nexport class URLBuilder {\n private _scheme: string | undefined;\n private _host: string | undefined;\n private _port: string | undefined;\n private _path: string | undefined;\n private _query: URLQuery | undefined;\n\n /**\n * Set the scheme/protocol for this URL. If the provided scheme contains other parts of a URL\n * (such as a host, port, path, or query), those parts will be added to this URL as well.\n */\n public setScheme(scheme: string | undefined): void {\n if (!scheme) {\n this._scheme = undefined;\n } else {\n this.set(scheme, \"SCHEME\");\n }\n }\n\n /**\n * Get the scheme that has been set in this URL.\n */\n public getScheme(): string | undefined {\n return this._scheme;\n }\n\n /**\n * Set the host for this URL. If the provided host contains other parts of a URL (such as a\n * port, path, or query), those parts will be added to this URL as well.\n */\n public setHost(host: string | undefined): void {\n if (!host) {\n this._host = undefined;\n } else {\n this.set(host, \"SCHEME_OR_HOST\");\n }\n }\n\n /**\n * Get the host that has been set in this URL.\n */\n public getHost(): string | undefined {\n return this._host;\n }\n\n /**\n * Set the port for this URL. If the provided port contains other parts of a URL (such as a\n * path or query), those parts will be added to this URL as well.\n */\n public setPort(port: number | string | undefined): void {\n if (port == undefined || port === \"\") {\n this._port = undefined;\n } else {\n this.set(port.toString(), \"PORT\");\n }\n }\n\n /**\n * Get the port that has been set in this URL.\n */\n public getPort(): string | undefined {\n return this._port;\n }\n\n /**\n * Set the path for this URL. If the provided path contains a query, then it will be added to\n * this URL as well.\n */\n public setPath(path: string | undefined): void {\n if (!path) {\n this._path = undefined;\n } else {\n if (path.indexOf(\"://\") !== -1) {\n this.set(path, \"SCHEME\");\n } else {\n this.set(path, \"PATH\");\n }\n }\n }\n\n /**\n * Append the provided path to this URL's existing path. If the provided path contains a query,\n * then it will be added to this URL as well.\n */\n public appendPath(path: string | undefined): void {\n if (path) {\n let currentPath: string | undefined = this.getPath();\n if (currentPath) {\n if (!currentPath.endsWith(\"/\")) {\n currentPath += \"/\";\n }\n\n if (path.startsWith(\"/\")) {\n path = path.substring(1);\n }\n\n path = currentPath + path;\n }\n this.set(path, \"PATH\");\n }\n }\n\n /**\n * Get the path that has been set in this URL.\n */\n public getPath(): string | undefined {\n return this._path;\n }\n\n /**\n * Set the query in this URL.\n */\n public setQuery(query: string | undefined): void {\n if (!query) {\n this._query = undefined;\n } else {\n this._query = URLQuery.parse(query);\n }\n }\n\n /**\n * Set a query parameter with the provided name and value in this URL's query. If the provided\n * query parameter value is undefined or empty, then the query parameter will be removed if it\n * existed.\n */\n public setQueryParameter(queryParameterName: string, queryParameterValue: any): void {\n if (queryParameterName) {\n if (!this._query) {\n this._query = new URLQuery();\n }\n this._query.set(queryParameterName, queryParameterValue);\n }\n }\n\n /**\n * Get the value of the query parameter with the provided query parameter name. If no query\n * parameter exists with the provided name, then undefined will be returned.\n */\n public getQueryParameterValue(queryParameterName: string): string | string[] | undefined {\n return this._query ? this._query.get(queryParameterName) : undefined;\n }\n\n /**\n * Get the query in this URL.\n */\n public getQuery(): string | undefined {\n return this._query ? this._query.toString() : undefined;\n }\n\n /**\n * Set the parts of this URL by parsing the provided text using the provided startState.\n */\n private set(text: string, startState: URLTokenizerState): void {\n const tokenizer = new URLTokenizer(text, startState);\n\n while (tokenizer.next()) {\n const token: URLToken | undefined = tokenizer.current();\n if (token) {\n switch (token.type) {\n case \"SCHEME\":\n this._scheme = token.text || undefined;\n break;\n\n case \"HOST\":\n this._host = token.text || undefined;\n break;\n\n case \"PORT\":\n this._port = token.text || undefined;\n break;\n\n case \"PATH\":\n const tokenPath: string | undefined = token.text || undefined;\n if (!this._path || this._path === \"/\" || tokenPath !== \"/\") {\n this._path = tokenPath;\n }\n break;\n\n case \"QUERY\":\n this._query = URLQuery.parse(token.text);\n break;\n\n default:\n throw new Error(`Unrecognized URLTokenType: ${token.type}`);\n }\n }\n }\n }\n\n public toString(): string {\n let result = \"\";\n\n if (this._scheme) {\n result += `${this._scheme}://`;\n }\n\n if (this._host) {\n result += this._host;\n }\n\n if (this._port) {\n result += `:${this._port}`;\n }\n\n if (this._path) {\n if (!this._path.startsWith(\"/\")) {\n result += \"/\";\n }\n result += this._path;\n }\n\n if (this._query && this._query.any()) {\n result += `?${this._query.toString()}`;\n }\n\n return result;\n }\n\n /**\n * If the provided searchValue is found in this URLBuilder, then replace it with the provided\n * replaceValue.\n */\n public replaceAll(searchValue: string, replaceValue: string): void {\n if (searchValue) {\n this.setScheme(replaceAll(this.getScheme(), searchValue, replaceValue));\n this.setHost(replaceAll(this.getHost(), searchValue, replaceValue));\n this.setPort(replaceAll(this.getPort(), searchValue, replaceValue));\n this.setPath(replaceAll(this.getPath(), searchValue, replaceValue));\n this.setQuery(replaceAll(this.getQuery(), searchValue, replaceValue));\n }\n }\n\n public static parse(text: string): URLBuilder {\n const result = new URLBuilder();\n result.set(text, \"SCHEME_OR_HOST\");\n return result;\n }\n}\n\ntype URLTokenizerState = \"SCHEME\" | \"SCHEME_OR_HOST\" | \"HOST\" | \"PORT\" | \"PATH\" | \"QUERY\" | \"DONE\";\n\ntype URLTokenType = \"SCHEME\" | \"HOST\" | \"PORT\" | \"PATH\" | \"QUERY\";\n\nexport class URLToken {\n public constructor(public readonly text: string, public readonly type: URLTokenType) {\n }\n\n public static scheme(text: string): URLToken {\n return new URLToken(text, \"SCHEME\");\n }\n\n public static host(text: string): URLToken {\n return new URLToken(text, \"HOST\");\n }\n\n public static port(text: string): URLToken {\n return new URLToken(text, \"PORT\");\n }\n\n public static path(text: string): URLToken {\n return new URLToken(text, \"PATH\");\n }\n\n public static query(text: string): URLToken {\n return new URLToken(text, \"QUERY\");\n }\n}\n\n/**\n * Get whether or not the provided character (single character string) is an alphanumeric (letter or\n * digit) character.\n */\nexport function isAlphaNumericCharacter(character: string): boolean {\n const characterCode: number = character.charCodeAt(0);\n return (48 /* '0' */ <= characterCode && characterCode <= 57 /* '9' */) ||\n (65 /* 'A' */ <= characterCode && characterCode <= 90 /* 'Z' */) ||\n (97 /* 'a' */ <= characterCode && characterCode <= 122 /* 'z' */);\n}\n\n/**\n * A class that tokenizes URL strings.\n */\nexport class URLTokenizer {\n readonly _textLength: number;\n _currentState: URLTokenizerState;\n _currentIndex: number;\n _currentToken: URLToken | undefined;\n\n public constructor(readonly _text: string, state?: URLTokenizerState) {\n this._textLength = _text ? _text.length : 0;\n this._currentState = state != undefined ? state : \"SCHEME_OR_HOST\";\n this._currentIndex = 0;\n }\n\n /**\n * Get the current URLToken this URLTokenizer is pointing at, or undefined if the URLTokenizer\n * hasn't started or has finished tokenizing.\n */\n public current(): URLToken | undefined {\n return this._currentToken;\n }\n\n /**\n * Advance to the next URLToken and return whether or not a URLToken was found.\n */\n public next(): boolean {\n if (!hasCurrentCharacter(this)) {\n this._currentToken = undefined;\n } else {\n switch (this._currentState) {\n case \"SCHEME\":\n nextScheme(this);\n break;\n\n case \"SCHEME_OR_HOST\":\n nextSchemeOrHost(this);\n break;\n\n case \"HOST\":\n nextHost(this);\n break;\n\n case \"PORT\":\n nextPort(this);\n break;\n\n case \"PATH\":\n nextPath(this);\n break;\n\n case \"QUERY\":\n nextQuery(this);\n break;\n\n default:\n throw new Error(`Unrecognized URLTokenizerState: ${this._currentState}`);\n }\n }\n return !!this._currentToken;\n }\n}\n\n\n/**\n * Read the remaining characters from this Tokenizer's character stream.\n */\nfunction readRemaining(tokenizer: URLTokenizer): string {\n let result = \"\";\n if (tokenizer._currentIndex < tokenizer._textLength) {\n result = tokenizer._text.substring(tokenizer._currentIndex);\n tokenizer._currentIndex = tokenizer._textLength;\n }\n return result;\n}\n\n/**\n * Whether or not this URLTokenizer has a current character.\n */\nfunction hasCurrentCharacter(tokenizer: URLTokenizer): boolean {\n return tokenizer._currentIndex < tokenizer._textLength;\n}\n\n/**\n * Get the character in the text string at the current index.\n */\nfunction getCurrentCharacter(tokenizer: URLTokenizer): string {\n return tokenizer._text[tokenizer._currentIndex];\n}\n\n/**\n * Advance to the character in text that is \"step\" characters ahead. If no step value is provided,\n * then step will default to 1.\n */\nfunction nextCharacter(tokenizer: URLTokenizer, step?: number): void {\n if (hasCurrentCharacter(tokenizer)) {\n if (!step) {\n step = 1;\n }\n tokenizer._currentIndex += step;\n }\n}\n\n/**\n * Starting with the current character, peek \"charactersToPeek\" number of characters ahead in this\n * Tokenizer's stream of characters.\n */\nfunction peekCharacters(tokenizer: URLTokenizer, charactersToPeek: number): string {\n let endIndex: number = tokenizer._currentIndex + charactersToPeek;\n if (tokenizer._textLength < endIndex) {\n endIndex = tokenizer._textLength;\n }\n return tokenizer._text.substring(tokenizer._currentIndex, endIndex);\n}\n\n/**\n * Read characters from this Tokenizer until the end of the stream or until the provided condition\n * is false when provided the current character.\n */\nfunction readWhile(tokenizer: URLTokenizer, condition: (character: string) => boolean): string {\n let result = \"\";\n\n while (hasCurrentCharacter(tokenizer)) {\n const currentCharacter: string = getCurrentCharacter(tokenizer);\n if (!condition(currentCharacter)) {\n break;\n } else {\n result += currentCharacter;\n nextCharacter(tokenizer);\n }\n }\n\n return result;\n}\n\n/**\n * Read characters from this Tokenizer until a non-alphanumeric character or the end of the\n * character stream is reached.\n */\nfunction readWhileLetterOrDigit(tokenizer: URLTokenizer): string {\n return readWhile(tokenizer, (character: string) => isAlphaNumericCharacter(character));\n}\n\n/**\n * Read characters from this Tokenizer until one of the provided terminating characters is read or\n * the end of the character stream is reached.\n */\nfunction readUntilCharacter(tokenizer: URLTokenizer, ...terminatingCharacters: string[]): string {\n return readWhile(tokenizer, (character: string) => terminatingCharacters.indexOf(character) === -1);\n}\n\nfunction nextScheme(tokenizer: URLTokenizer): void {\n const scheme: string = readWhileLetterOrDigit(tokenizer);\n tokenizer._currentToken = URLToken.scheme(scheme);\n if (!hasCurrentCharacter(tokenizer)) {\n tokenizer._currentState = \"DONE\";\n } else {\n tokenizer._currentState = \"HOST\";\n }\n}\n\nfunction nextSchemeOrHost(tokenizer: URLTokenizer): void {\n const schemeOrHost: string = readUntilCharacter(tokenizer, \":\", \"/\", \"?\");\n if (!hasCurrentCharacter(tokenizer)) {\n tokenizer._currentToken = URLToken.host(schemeOrHost);\n tokenizer._currentState = \"DONE\";\n } else if (getCurrentCharacter(tokenizer) === \":\") {\n if (peekCharacters(tokenizer, 3) === \"://\") {\n tokenizer._currentToken = URLToken.scheme(schemeOrHost);\n tokenizer._currentState = \"HOST\";\n } else {\n tokenizer._currentToken = URLToken.host(schemeOrHost);\n tokenizer._currentState = \"PORT\";\n }\n } else {\n tokenizer._currentToken = URLToken.host(schemeOrHost);\n if (getCurrentCharacter(tokenizer) === \"/\") {\n tokenizer._currentState = \"PATH\";\n } else {\n tokenizer._currentState = \"QUERY\";\n }\n }\n}\n\nfunction nextHost(tokenizer: URLTokenizer): void {\n if (peekCharacters(tokenizer, 3) === \"://\") {\n nextCharacter(tokenizer, 3);\n }\n\n const host: string = readUntilCharacter(tokenizer, \":\", \"/\", \"?\");\n tokenizer._currentToken = URLToken.host(host);\n\n if (!hasCurrentCharacter(tokenizer)) {\n tokenizer._currentState = \"DONE\";\n } else if (getCurrentCharacter(tokenizer) === \":\") {\n tokenizer._currentState = \"PORT\";\n } else if (getCurrentCharacter(tokenizer) === \"/\") {\n tokenizer._currentState = \"PATH\";\n } else {\n tokenizer._currentState = \"QUERY\";\n }\n}\n\nfunction nextPort(tokenizer: URLTokenizer): void {\n if (getCurrentCharacter(tokenizer) === \":\") {\n nextCharacter(tokenizer);\n }\n\n const port: string = readUntilCharacter(tokenizer, \"/\", \"?\");\n tokenizer._currentToken = URLToken.port(port);\n\n if (!hasCurrentCharacter(tokenizer)) {\n tokenizer._currentState = \"DONE\";\n } else if (getCurrentCharacter(tokenizer) === \"/\") {\n tokenizer._currentState = \"PATH\";\n } else {\n tokenizer._currentState = \"QUERY\";\n }\n}\n\nfunction nextPath(tokenizer: URLTokenizer): void {\n const path: string = readUntilCharacter(tokenizer, \"?\");\n tokenizer._currentToken = URLToken.path(path);\n\n if (!hasCurrentCharacter(tokenizer)) {\n tokenizer._currentState = \"DONE\";\n } else {\n tokenizer._currentState = \"QUERY\";\n }\n}\n\nfunction nextQuery(tokenizer: URLTokenizer): void {\n if (getCurrentCharacter(tokenizer) === \"?\") {\n nextCharacter(tokenizer);\n }\n\n const query: string = readRemaining(tokenizer);\n tokenizer._currentToken = URLToken.query(query);\n tokenizer._currentState = \"DONE\";\n}\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { HttpOperationResponse } from \"../httpOperationResponse\";\nimport { URLBuilder } from \"../url\";\nimport { WebResource } from \"../webResource\";\nimport { BaseRequestPolicy, RequestPolicy, RequestPolicyFactory, RequestPolicyOptions } from \"./requestPolicy\";\n\nexport function redirectPolicy(maximumRetries = 20): RequestPolicyFactory {\n return {\n create: (nextPolicy: RequestPolicy, options: RequestPolicyOptions) => {\n return new RedirectPolicy(nextPolicy, options, maximumRetries);\n }\n };\n}\n\nexport class RedirectPolicy extends BaseRequestPolicy {\n constructor(nextPolicy: RequestPolicy, options: RequestPolicyOptions, readonly maxRetries = 20) {\n super(nextPolicy, options);\n }\n\n public sendRequest(request: WebResource): Promise {\n return this._nextPolicy.sendRequest(request).then(response => handleRedirect(this, response, 0));\n }\n}\n\nfunction handleRedirect(policy: RedirectPolicy, response: HttpOperationResponse, currentRetries: number): Promise {\n const { request, status } = response;\n const locationHeader = response.headers.get(\"location\");\n if (locationHeader &&\n (status === 300 || status === 307 || (status === 303 && request.method === \"POST\")) &&\n (!policy.maxRetries || currentRetries < policy.maxRetries)) {\n\n const builder = URLBuilder.parse(request.url);\n builder.setPath(locationHeader);\n request.url = builder.toString();\n\n // POST request with Status code 303 should be converted into a\n // redirected GET request if the redirect url is present in the location header\n if (status === 303) {\n request.method = \"GET\";\n }\n\n return policy._nextPolicy.sendRequest(request)\n .then(res => handleRedirect(policy, res, currentRetries + 1));\n }\n\n return Promise.resolve(response);\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\nimport { HttpOperationResponse } from \"../httpOperationResponse\";\nimport * as utils from \"../util/utils\";\nimport { WebResource } from \"../webResource\";\nimport { BaseRequestPolicy, RequestPolicy, RequestPolicyFactory, RequestPolicyOptions } from \"./requestPolicy\";\n\nexport function rpRegistrationPolicy(retryTimeout = 30): RequestPolicyFactory {\n return {\n create: (nextPolicy: RequestPolicy, options: RequestPolicyOptions) => {\n return new RPRegistrationPolicy(nextPolicy, options, retryTimeout);\n }\n };\n}\n\nexport class RPRegistrationPolicy extends BaseRequestPolicy {\n constructor(nextPolicy: RequestPolicy, options: RequestPolicyOptions, readonly _retryTimeout = 30) {\n super(nextPolicy, options);\n }\n\n public sendRequest(request: WebResource): Promise {\n return this._nextPolicy.sendRequest(request.clone())\n .then(response => registerIfNeeded(this, request, response));\n }\n}\n\n\nfunction registerIfNeeded(policy: RPRegistrationPolicy, request: WebResource, response: HttpOperationResponse): Promise {\n if (response.status === 409) {\n const rpName = checkRPNotRegisteredError(response.bodyAsText as string);\n if (rpName) {\n const urlPrefix = extractSubscriptionUrl(request.url);\n return registerRP(policy, urlPrefix, rpName, request)\n // Autoregistration of ${provider} failed for some reason. We will not return this error\n // instead will return the initial response with 409 status code back to the user.\n // do nothing here as we are returning the original response at the end of this method.\n .catch(() => false)\n .then(registrationStatus => {\n if (registrationStatus) {\n // Retry the original request. We have to change the x-ms-client-request-id\n // otherwise Azure endpoint will return the initial 409 (cached) response.\n request.headers.set(\"x-ms-client-request-id\", utils.generateUuid());\n return policy._nextPolicy.sendRequest(request.clone());\n }\n return response;\n });\n }\n }\n\n return Promise.resolve(response);\n}\n\n/**\n * Reuses the headers of the original request and url (if specified).\n * @param {WebResource} originalRequest The original request\n * @param {boolean} reuseUrlToo Should the url from the original request be reused as well. Default false.\n * @returns {object} A new request object with desired headers.\n */\nfunction getRequestEssentials(originalRequest: WebResource, reuseUrlToo = false): WebResource {\n const reqOptions: WebResource = originalRequest.clone();\n if (reuseUrlToo) {\n reqOptions.url = originalRequest.url;\n }\n\n // We have to change the x-ms-client-request-id otherwise Azure endpoint\n // will return the initial 409 (cached) response.\n reqOptions.headers.set(\"x-ms-client-request-id\", utils.generateUuid());\n\n // Set content-type to application/json\n reqOptions.headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n\n return reqOptions;\n}\n\n/**\n * Validates the error code and message associated with 409 response status code. If it matches to that of\n * RP not registered then it returns the name of the RP else returns undefined.\n * @param {string} body The response body received after making the original request.\n * @returns {string} The name of the RP if condition is satisfied else undefined.\n */\nfunction checkRPNotRegisteredError(body: string): string {\n let result, responseBody;\n if (body) {\n try {\n responseBody = JSON.parse(body);\n } catch (err) {\n // do nothing;\n }\n if (responseBody && responseBody.error && responseBody.error.message &&\n responseBody.error.code && responseBody.error.code === \"MissingSubscriptionRegistration\") {\n const matchRes = responseBody.error.message.match(/.*'(.*)'/i);\n if (matchRes) {\n result = matchRes.pop();\n }\n }\n }\n return result;\n}\n\n/**\n * Extracts the first part of the URL, just after subscription:\n * https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/\n * @param {string} url The original request url\n * @returns {string} The url prefix as explained above.\n */\nfunction extractSubscriptionUrl(url: string): string {\n let result;\n const matchRes = url.match(/.*\\/subscriptions\\/[a-f0-9-]+\\//ig);\n if (matchRes && matchRes[0]) {\n result = matchRes[0];\n } else {\n throw new Error(`Unable to extract subscriptionId from the given url - ${url}.`);\n }\n return result;\n}\n\n/**\n * Registers the given provider.\n * @param {RPRegistrationPolicy} policy The RPRegistrationPolicy this function is being called against.\n * @param {string} urlPrefix https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/\n * @param {string} provider The provider name to be registered.\n * @param {WebResource} originalRequest The original request sent by the user that returned a 409 response\n * with a message that the provider is not registered.\n * @param {registrationCallback} callback The callback that handles the RP registration\n */\nfunction registerRP(policy: RPRegistrationPolicy, urlPrefix: string, provider: string, originalRequest: WebResource): Promise {\n const postUrl = `${urlPrefix}providers/${provider}/register?api-version=2016-02-01`;\n const getUrl = `${urlPrefix}providers/${provider}?api-version=2016-02-01`;\n const reqOptions = getRequestEssentials(originalRequest);\n reqOptions.method = \"POST\";\n reqOptions.url = postUrl;\n\n return policy._nextPolicy.sendRequest(reqOptions)\n .then(response => {\n if (response.status !== 200) {\n throw new Error(`Autoregistration of ${provider} failed. Please try registering manually.`);\n }\n return getRegistrationStatus(policy, getUrl, originalRequest);\n });\n}\n\n/**\n * Polls the registration status of the provider that was registered. Polling happens at an interval of 30 seconds.\n * Polling will happen till the registrationState property of the response body is \"Registered\".\n * @param {RPRegistrationPolicy} policy The RPRegistrationPolicy this function is being called against.\n * @param {string} url The request url for polling\n * @param {WebResource} originalRequest The original request sent by the user that returned a 409 response\n * with a message that the provider is not registered.\n * @returns {Promise} True if RP Registration is successful.\n */\nfunction getRegistrationStatus(policy: RPRegistrationPolicy, url: string, originalRequest: WebResource): Promise {\n const reqOptions: any = getRequestEssentials(originalRequest);\n reqOptions.url = url;\n reqOptions.method = \"GET\";\n\n return policy._nextPolicy.sendRequest(reqOptions).then(res => {\n const obj = (res.parsedBody as any);\n if (res.parsedBody && obj.registrationState && obj.registrationState === \"Registered\") {\n return true;\n } else {\n return utils.delay(policy._retryTimeout * 1000).then(() => getRegistrationStatus(policy, url, originalRequest));\n }\n });\n}\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { ServiceClientCredentials } from \"../credentials/serviceClientCredentials\";\nimport { HttpOperationResponse } from \"../httpOperationResponse\";\nimport { WebResource } from \"../webResource\";\nimport { BaseRequestPolicy, RequestPolicyFactory, RequestPolicy, RequestPolicyOptions } from \"./requestPolicy\";\n\nexport function signingPolicy(authenticationProvider: ServiceClientCredentials): RequestPolicyFactory {\n return {\n create: (nextPolicy: RequestPolicy, options: RequestPolicyOptions) => {\n return new SigningPolicy(nextPolicy, options, authenticationProvider);\n }\n };\n}\n\nexport class SigningPolicy extends BaseRequestPolicy {\n\n constructor(nextPolicy: RequestPolicy, options: RequestPolicyOptions, public authenticationProvider: ServiceClientCredentials) {\n super(nextPolicy, options);\n }\n\n signRequest(request: WebResource): Promise {\n return this.authenticationProvider.signRequest(request);\n }\n\n public sendRequest(request: WebResource): Promise {\n return this.signRequest(request).then(nextRequest => this._nextPolicy.sendRequest(nextRequest));\n }\n}\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { HttpOperationResponse } from \"../httpOperationResponse\";\nimport * as utils from \"../util/utils\";\nimport { WebResource } from \"../webResource\";\nimport { BaseRequestPolicy, RequestPolicy, RequestPolicyFactory, RequestPolicyOptions } from \"./requestPolicy\";\n\nexport interface RetryData {\n retryCount: number;\n retryInterval: number;\n error?: RetryError;\n}\n\nexport interface RetryError extends Error {\n message: string;\n code?: string;\n innerError?: RetryError;\n}\n\nexport function systemErrorRetryPolicy(retryCount?: number, retryInterval?: number, minRetryInterval?: number, maxRetryInterval?: number): RequestPolicyFactory {\n return {\n create: (nextPolicy: RequestPolicy, options: RequestPolicyOptions) => {\n return new SystemErrorRetryPolicy(nextPolicy, options, retryCount, retryInterval, minRetryInterval, maxRetryInterval);\n }\n };\n}\n\n/**\n * @class\n * Instantiates a new \"ExponentialRetryPolicyFilter\" instance.\n *\n * @constructor\n * @param {number} retryCount The client retry count.\n * @param {number} retryInterval The client retry interval, in milliseconds.\n * @param {number} minRetryInterval The minimum retry interval, in milliseconds.\n * @param {number} maxRetryInterval The maximum retry interval, in milliseconds.\n */\nexport class SystemErrorRetryPolicy extends BaseRequestPolicy {\n retryCount: number;\n retryInterval: number;\n minRetryInterval: number;\n maxRetryInterval: number;\n DEFAULT_CLIENT_RETRY_INTERVAL = 1000 * 30;\n DEFAULT_CLIENT_RETRY_COUNT = 3;\n DEFAULT_CLIENT_MAX_RETRY_INTERVAL = 1000 * 90;\n DEFAULT_CLIENT_MIN_RETRY_INTERVAL = 1000 * 3;\n\n constructor(nextPolicy: RequestPolicy, options: RequestPolicyOptions, retryCount?: number, retryInterval?: number, minRetryInterval?: number, maxRetryInterval?: number) {\n super(nextPolicy, options);\n this.retryCount = typeof retryCount === \"number\" ? retryCount : this.DEFAULT_CLIENT_RETRY_COUNT;\n this.retryInterval = typeof retryInterval === \"number\" ? retryInterval : this.DEFAULT_CLIENT_RETRY_INTERVAL;\n this.minRetryInterval = typeof minRetryInterval === \"number\" ? minRetryInterval : this.DEFAULT_CLIENT_MIN_RETRY_INTERVAL;\n this.maxRetryInterval = typeof maxRetryInterval === \"number\" ? maxRetryInterval : this.DEFAULT_CLIENT_MAX_RETRY_INTERVAL;\n }\n\n public sendRequest(request: WebResource): Promise {\n return this._nextPolicy.sendRequest(request.clone()).then(response => retry(this, request, response));\n }\n}\n\n/**\n * Determines if the operation should be retried and how long to wait until the next retry.\n *\n * @param {number} statusCode The HTTP status code.\n * @param {RetryData} retryData The retry data.\n * @return {boolean} True if the operation qualifies for a retry; false otherwise.\n */\nfunction shouldRetry(policy: SystemErrorRetryPolicy, retryData: RetryData): boolean {\n let currentCount;\n if (!retryData) {\n throw new Error(\"retryData for the SystemErrorRetryPolicyFilter cannot be null.\");\n } else {\n currentCount = (retryData && retryData.retryCount);\n }\n return (currentCount < policy.retryCount);\n}\n\n/**\n * Updates the retry data for the next attempt.\n *\n * @param {RetryData} retryData The retry data.\n * @param {object} err The operation\"s error, if any.\n */\nfunction updateRetryData(policy: SystemErrorRetryPolicy, retryData?: RetryData, err?: RetryError): RetryData {\n if (!retryData) {\n retryData = {\n retryCount: 0,\n retryInterval: 0\n };\n }\n\n if (err) {\n if (retryData.error) {\n err.innerError = retryData.error;\n }\n\n retryData.error = err;\n }\n\n // Adjust retry count\n retryData.retryCount++;\n\n // Adjust retry interval\n let incrementDelta = Math.pow(2, retryData.retryCount) - 1;\n const boundedRandDelta = policy.retryInterval * 0.8 +\n Math.floor(Math.random() * (policy.retryInterval * 1.2 - policy.retryInterval * 0.8));\n incrementDelta *= boundedRandDelta;\n\n retryData.retryInterval = Math.min(policy.minRetryInterval + incrementDelta, policy.maxRetryInterval);\n\n return retryData;\n}\n\nfunction retry(policy: SystemErrorRetryPolicy, request: WebResource, operationResponse: HttpOperationResponse, retryData?: RetryData, err?: RetryError): Promise {\n retryData = updateRetryData(policy, retryData, err);\n if (err && err.code && shouldRetry(policy, retryData) &&\n (err.code === \"ETIMEDOUT\" || err.code === \"ESOCKETTIMEDOUT\" || err.code === \"ECONNREFUSED\" ||\n err.code === \"ECONNRESET\" || err.code === \"ENOENT\")) {\n // If previous operation ended with an error and the policy allows a retry, do that\n return utils.delay(retryData.retryInterval)\n .then(() => policy._nextPolicy.sendRequest(request.clone()))\n .then(res => retry(policy, request, res, retryData, err))\n .catch(err => retry(policy, request, operationResponse, retryData, err));\n } else {\n if (err != undefined) {\n // If the operation failed in the end, return all errors instead of just the last one\n err = retryData.error;\n return Promise.reject(err);\n }\n return Promise.resolve(operationResponse);\n }\n}","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\n/**\n * The format that will be used to join an array of values together for a query parameter value.\n */\nexport enum QueryCollectionFormat {\n Csv = \",\",\n Ssv = \" \",\n Tsv = \"\\t\",\n Pipes = \"|\",\n Multi = \"Multi\",\n}\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { BaseRequestPolicy, RequestPolicy, RequestPolicyFactory, RequestPolicyOptions } from \"./requestPolicy\";\nimport { HttpOperationResponse } from \"../httpOperationResponse\";\nimport { ProxySettings } from \"../serviceClient\";\nimport { WebResource } from \"../webResource\";\nimport { Constants } from \"../util/constants\";\nimport { URLBuilder } from \"../url\";\n\nfunction loadEnvironmentProxyValue(): string | undefined {\n if (!process) {\n return undefined;\n }\n\n if (process.env[Constants.HTTPS_PROXY]) {\n return process.env[Constants.HTTPS_PROXY];\n } else if (process.env[Constants.HTTPS_PROXY.toLowerCase()]) {\n return process.env[Constants.HTTPS_PROXY.toLowerCase()];\n } else if (process.env[Constants.HTTP_PROXY]) {\n return process.env[Constants.HTTP_PROXY];\n } else if (process.env[Constants.HTTP_PROXY.toLowerCase()]) {\n return process.env[Constants.HTTP_PROXY.toLowerCase()];\n }\n\n return undefined;\n}\n\nexport function getDefaultProxySettings(proxyUrl?: string): ProxySettings | undefined {\n if (!proxyUrl) {\n proxyUrl = loadEnvironmentProxyValue();\n if (!proxyUrl) {\n return undefined;\n }\n }\n\n const parsedUrl = URLBuilder.parse(proxyUrl);\n return {\n host: parsedUrl.getScheme() + \"://\" + parsedUrl.getHost(),\n port: Number.parseInt(parsedUrl.getPort() || \"80\")\n };\n}\n\n\nexport function proxyPolicy(proxySettings?: ProxySettings): RequestPolicyFactory {\n return {\n create: (nextPolicy: RequestPolicy, options: RequestPolicyOptions) => {\n return new ProxyPolicy(nextPolicy, options, proxySettings!);\n }\n };\n}\n\nexport class ProxyPolicy extends BaseRequestPolicy {\n proxySettings: ProxySettings;\n\n constructor(nextPolicy: RequestPolicy, options: RequestPolicyOptions, proxySettings: ProxySettings) {\n super(nextPolicy, options);\n this.proxySettings = proxySettings;\n }\n\n public sendRequest(request: WebResource): Promise {\n if (!request.proxySettings) {\n request.proxySettings = this.proxySettings;\n }\n return this._nextPolicy.sendRequest(request);\n }\n}\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { BaseRequestPolicy, RequestPolicy, RequestPolicyOptions, RequestPolicyFactory } from \"./requestPolicy\";\nimport { WebResource } from \"../webResource\";\nimport { HttpOperationResponse } from \"../httpOperationResponse\";\nimport { Constants } from \"../util/constants\";\nimport { delay } from \"../util/utils\";\n\ntype ResponseHandler = (httpRequest: WebResource, response: HttpOperationResponse) => Promise;\nconst StatusCodes = Constants.HttpConstants.StatusCodes;\n\nexport function throttlingRetryPolicy(): RequestPolicyFactory {\n return {\n create: (nextPolicy: RequestPolicy, options: RequestPolicyOptions) => {\n return new ThrottlingRetryPolicy(nextPolicy, options);\n }\n };\n}\n\n/**\n * To learn more, please refer to\n * https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-request-limits,\n * https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits and\n * https://docs.microsoft.com/en-us/azure/virtual-machines/troubleshooting/troubleshooting-throttling-errors\n */\nexport class ThrottlingRetryPolicy extends BaseRequestPolicy {\n private _handleResponse: ResponseHandler;\n\n constructor(nextPolicy: RequestPolicy, options: RequestPolicyOptions, _handleResponse?: ResponseHandler) {\n super(nextPolicy, options);\n this._handleResponse = _handleResponse || this._defaultResponseHandler;\n }\n\n public async sendRequest(httpRequest: WebResource): Promise {\n return this._nextPolicy.sendRequest(httpRequest.clone()).then(response => {\n if (response.status !== StatusCodes.TooManyRequests) {\n return response;\n } else {\n return this._handleResponse(httpRequest, response);\n }\n });\n }\n\n private async _defaultResponseHandler(httpRequest: WebResource, httpResponse: HttpOperationResponse): Promise {\n const retryAfterHeader: string | undefined = httpResponse.headers.get(Constants.HeaderConstants.RETRY_AFTER);\n\n if (retryAfterHeader) {\n const delayInMs: number | undefined = ThrottlingRetryPolicy.parseRetryAfterHeader(retryAfterHeader);\n if (delayInMs) {\n return delay(delayInMs).then((_: any) => this._nextPolicy.sendRequest(httpRequest));\n }\n }\n\n return httpResponse;\n }\n\n public static parseRetryAfterHeader(headerValue: string): number | undefined {\n const retryAfterInSeconds = Number(headerValue);\n if (Number.isNaN(retryAfterInSeconds)) {\n return ThrottlingRetryPolicy.parseDateRetryAfterHeader(headerValue);\n } else {\n return retryAfterInSeconds * 1000;\n }\n }\n\n public static parseDateRetryAfterHeader(headerValue: string): number | undefined {\n try {\n const now: number = Date.now();\n const date: number = Date.parse(headerValue);\n const diff = date - now;\n\n return Number.isNaN(diff) ? undefined : diff;\n } catch (error) {\n return undefined;\n }\n }\n}\n","// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { ServiceClientCredentials } from \"./credentials/serviceClientCredentials\";\nimport { DefaultHttpClient } from \"./defaultHttpClient\";\nimport { HttpClient } from \"./httpClient\";\nimport { HttpOperationResponse, RestResponse } from \"./httpOperationResponse\";\nimport { HttpPipelineLogger } from \"./httpPipelineLogger\";\nimport { OperationArguments } from \"./operationArguments\";\nimport { getPathStringFromParameter, getPathStringFromParameterPath, OperationParameter, ParameterPath } from \"./operationParameter\";\nimport { isStreamOperation, OperationSpec } from \"./operationSpec\";\nimport { deserializationPolicy, DeserializationContentTypes } from \"./policies/deserializationPolicy\";\nimport { exponentialRetryPolicy } from \"./policies/exponentialRetryPolicy\";\nimport { generateClientRequestIdPolicy } from \"./policies/generateClientRequestIdPolicy\";\nimport { userAgentPolicy, getDefaultUserAgentHeaderName, getDefaultUserAgentValue } from \"./policies/userAgentPolicy\";\nimport { redirectPolicy } from \"./policies/redirectPolicy\";\nimport { RequestPolicy, RequestPolicyFactory, RequestPolicyOptions } from \"./policies/requestPolicy\";\nimport { rpRegistrationPolicy } from \"./policies/rpRegistrationPolicy\";\nimport { signingPolicy } from \"./policies/signingPolicy\";\nimport { systemErrorRetryPolicy } from \"./policies/systemErrorRetryPolicy\";\nimport { QueryCollectionFormat } from \"./queryCollectionFormat\";\nimport { CompositeMapper, DictionaryMapper, Mapper, MapperType, Serializer } from \"./serializer\";\nimport { URLBuilder } from \"./url\";\nimport * as utils from \"./util/utils\";\nimport { stringifyXML } from \"./util/xml\";\nimport { RequestOptionsBase, RequestPrepareOptions, WebResource } from \"./webResource\";\nimport { OperationResponse } from \"./operationResponse\";\nimport { ServiceCallback } from \"./util/utils\";\nimport { proxyPolicy, getDefaultProxySettings } from \"./policies/proxyPolicy\";\nimport { throttlingRetryPolicy } from \"./policies/throttlingRetryPolicy\";\n\n\n/**\n * HTTP proxy settings (Node.js only)\n */\nexport interface ProxySettings {\n host: string;\n port: number;\n username?: string;\n password?: string;\n}\n\n/**\n * Options to be provided while creating the client.\n */\nexport interface ServiceClientOptions {\n /**\n * An array of factories which get called to create the RequestPolicy pipeline used to send a HTTP\n * request on the wire, or a function that takes in the defaultRequestPolicyFactories and returns\n * the requestPolicyFactories that will be used.\n */\n requestPolicyFactories?: RequestPolicyFactory[] | ((defaultRequestPolicyFactories: RequestPolicyFactory[]) => (void | RequestPolicyFactory[]));\n /**\n * The HttpClient that will be used to send HTTP requests.\n */\n httpClient?: HttpClient;\n /**\n * The HttpPipelineLogger that can be used to debug RequestPolicies within the HTTP pipeline.\n */\n httpPipelineLogger?: HttpPipelineLogger;\n /**\n * If set to true, turn off the default retry policy.\n */\n noRetryPolicy?: boolean;\n /**\n * Gets or sets the retry timeout in seconds for AutomaticRPRegistration. Default value is 30.\n */\n rpRegistrationRetryTimeout?: number;\n /**\n * Whether or not to generate a client request ID header for each HTTP request.\n */\n generateClientRequestIdHeader?: boolean;\n /**\n * Whether to include credentials in CORS requests in the browser.\n * See https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials for more information.\n */\n withCredentials?: boolean;\n /**\n * If specified, a GenerateRequestIdPolicy will be added to the HTTP pipeline that will add a\n * header to all outgoing requests with this header name and a random UUID as the request ID.\n */\n clientRequestIdHeaderName?: string;\n /**\n * The content-types that will be associated with JSON or XML serialization.\n */\n deserializationContentTypes?: DeserializationContentTypes;\n /**\n * The header name to use for the telemetry header while sending the request. If this is not\n * specified, then \"User-Agent\" will be used when running on Node.js and \"x-ms-command-name\" will\n * be used when running in a browser.\n */\n userAgentHeaderName?: string | ((defaultUserAgentHeaderName: string) => string);\n /**\n * The string to be set to the telemetry header while sending the request, or a function that\n * takes in the default user-agent string and returns the user-agent string that will be used.\n */\n userAgent?: string | ((defaultUserAgent: string) => string);\n /**\n * Proxy settings which will be used for every HTTP request (Node.js only).\n */\n proxySettings?: ProxySettings;\n}\n\n/**\n * @class\n * Initializes a new instance of the ServiceClient.\n */\nexport class ServiceClient {\n /**\n * If specified, this is the base URI that requests will be made against for this ServiceClient.\n * If it is not specified, then all OperationSpecs must contain a baseUrl property.\n */\n protected baseUri?: string;\n\n /**\n * The default request content type for the service.\n * Used if no requestContentType is present on an OperationSpec.\n */\n protected requestContentType?: string;\n\n\n /**\n * The HTTP client that will be used to send requests.\n */\n private readonly _httpClient: HttpClient;\n private readonly _requestPolicyOptions: RequestPolicyOptions;\n\n private readonly _requestPolicyFactories: RequestPolicyFactory[];\n private readonly _withCredentials: boolean;\n\n /**\n * The ServiceClient constructor\n * @constructor\n * @param {ServiceClientCredentials} [credentials] The credentials object used for authentication.\n * @param {ServiceClientOptions} [options] The service client options that govern the behavior of the client.\n */\n constructor(credentials?: ServiceClientCredentials, options?: ServiceClientOptions) {\n if (!options) {\n options = {};\n }\n\n if (credentials && !credentials.signRequest) {\n throw new Error(\"credentials argument needs to implement signRequest method\");\n }\n\n this._withCredentials = options.withCredentials || false;\n this._httpClient = options.httpClient || new DefaultHttpClient();\n this._requestPolicyOptions = new RequestPolicyOptions(options.httpPipelineLogger);\n\n let requestPolicyFactories: RequestPolicyFactory[];\n if (Array.isArray(options.requestPolicyFactories)) {\n requestPolicyFactories = options.requestPolicyFactories;\n } else {\n requestPolicyFactories = createDefaultRequestPolicyFactories(credentials, options);\n if (options.requestPolicyFactories) {\n const newRequestPolicyFactories: void | RequestPolicyFactory[] = options.requestPolicyFactories(requestPolicyFactories);\n if (newRequestPolicyFactories) {\n requestPolicyFactories = newRequestPolicyFactories;\n }\n }\n }\n this._requestPolicyFactories = requestPolicyFactories;\n }\n\n /**\n * Send the provided httpRequest.\n */\n sendRequest(options: RequestPrepareOptions | WebResource): Promise {\n if (options === null || options === undefined || typeof options !== \"object\") {\n throw new Error(\"options cannot be null or undefined and it must be of type object.\");\n }\n\n let httpRequest: WebResource;\n try {\n if (options instanceof WebResource) {\n options.validateRequestProperties();\n httpRequest = options;\n } else {\n httpRequest = new WebResource();\n httpRequest = httpRequest.prepare(options);\n }\n } catch (error) {\n return Promise.reject(error);\n }\n\n let httpPipeline: RequestPolicy = this._httpClient;\n if (this._requestPolicyFactories && this._requestPolicyFactories.length > 0) {\n for (let i = this._requestPolicyFactories.length - 1; i >= 0; --i) {\n httpPipeline = this._requestPolicyFactories[i].create(httpPipeline, this._requestPolicyOptions);\n }\n }\n return httpPipeline.sendRequest(httpRequest);\n }\n\n /**\n * Send an HTTP request that is populated using the provided OperationSpec.\n * @param {OperationArguments} operationArguments The arguments that the HTTP request's templated values will be populated from.\n * @param {OperationSpec} operationSpec The OperationSpec to use to populate the httpRequest.\n * @param {ServiceCallback} callback The callback to call when the response is received.\n */\n sendOperationRequest(operationArguments: OperationArguments, operationSpec: OperationSpec, callback?: ServiceCallback): Promise {\n if (typeof operationArguments.options === \"function\") {\n callback = operationArguments.options;\n operationArguments.options = undefined;\n }\n\n const httpRequest = new WebResource();\n\n let result: Promise;\n try {\n const baseUri: string | undefined = operationSpec.baseUrl || this.baseUri;\n if (!baseUri) {\n throw new Error(\"If operationSpec.baseUrl is not specified, then the ServiceClient must have a baseUri string property that contains the base URL to use.\");\n }\n\n httpRequest.method = operationSpec.httpMethod;\n httpRequest.operationSpec = operationSpec;\n\n const requestUrl: URLBuilder = URLBuilder.parse(baseUri);\n if (operationSpec.path) {\n requestUrl.appendPath(operationSpec.path);\n }\n if (operationSpec.urlParameters && operationSpec.urlParameters.length > 0) {\n for (const urlParameter of operationSpec.urlParameters) {\n let urlParameterValue: string = getOperationArgumentValueFromParameter(this, operationArguments, urlParameter, operationSpec.serializer);\n urlParameterValue = operationSpec.serializer.serialize(urlParameter.mapper, urlParameterValue, getPathStringFromParameter(urlParameter));\n if (!urlParameter.skipEncoding) {\n urlParameterValue = encodeURIComponent(urlParameterValue);\n }\n requestUrl.replaceAll(`{${urlParameter.mapper.serializedName || getPathStringFromParameter(urlParameter)}}`, urlParameterValue);\n }\n }\n if (operationSpec.queryParameters && operationSpec.queryParameters.length > 0) {\n for (const queryParameter of operationSpec.queryParameters) {\n let queryParameterValue: any = getOperationArgumentValueFromParameter(this, operationArguments, queryParameter, operationSpec.serializer);\n if (queryParameterValue != undefined) {\n queryParameterValue = operationSpec.serializer.serialize(queryParameter.mapper, queryParameterValue, getPathStringFromParameter(queryParameter));\n if (queryParameter.collectionFormat != undefined) {\n if (queryParameter.collectionFormat === QueryCollectionFormat.Multi) {\n if (queryParameterValue.length === 0) {\n queryParameterValue = \"\";\n } else {\n for (const index in queryParameterValue) {\n const item = queryParameterValue[index];\n queryParameterValue[index] = item == undefined ? \"\" : item.toString();\n }\n }\n } else {\n queryParameterValue = queryParameterValue.join(queryParameter.collectionFormat);\n }\n }\n if (!queryParameter.skipEncoding) {\n if (Array.isArray(queryParameterValue)) {\n for (const index in queryParameterValue) {\n queryParameterValue[index] = encodeURIComponent(queryParameterValue[index]);\n }\n }\n else {\n queryParameterValue = encodeURIComponent(queryParameterValue);\n }\n }\n requestUrl.setQueryParameter(queryParameter.mapper.serializedName || getPathStringFromParameter(queryParameter), queryParameterValue);\n }\n }\n }\n httpRequest.url = requestUrl.toString();\n\n const contentType = operationSpec.contentType || this.requestContentType;\n if (contentType) {\n httpRequest.headers.set(\"Content-Type\", contentType);\n }\n\n if (operationSpec.headerParameters) {\n for (const headerParameter of operationSpec.headerParameters) {\n let headerValue: any = getOperationArgumentValueFromParameter(this, operationArguments, headerParameter, operationSpec.serializer);\n if (headerValue != undefined) {\n headerValue = operationSpec.serializer.serialize(headerParameter.mapper, headerValue, getPathStringFromParameter(headerParameter));\n const headerCollectionPrefix = (headerParameter.mapper as DictionaryMapper).headerCollectionPrefix;\n if (headerCollectionPrefix) {\n for (const key of Object.keys(headerValue)) {\n httpRequest.headers.set(headerCollectionPrefix + key, headerValue[key]);\n }\n } else {\n httpRequest.headers.set(headerParameter.mapper.serializedName || getPathStringFromParameter(headerParameter), headerValue);\n }\n }\n }\n }\n\n const options: RequestOptionsBase | undefined = operationArguments.options;\n if (options) {\n if (options.customHeaders) {\n for (const customHeaderName in options.customHeaders) {\n httpRequest.headers.set(customHeaderName, options.customHeaders[customHeaderName]);\n }\n }\n\n if (options.abortSignal) {\n httpRequest.abortSignal = options.abortSignal;\n }\n\n if (options.timeout) {\n httpRequest.timeout = options.timeout;\n }\n\n if (options.onUploadProgress) {\n httpRequest.onUploadProgress = options.onUploadProgress;\n }\n\n if (options.onDownloadProgress) {\n httpRequest.onDownloadProgress = options.onDownloadProgress;\n }\n }\n\n httpRequest.withCredentials = this._withCredentials;\n\n serializeRequestBody(this, httpRequest, operationArguments, operationSpec);\n\n if (httpRequest.streamResponseBody == undefined) {\n httpRequest.streamResponseBody = isStreamOperation(operationSpec);\n }\n\n result = this.sendRequest(httpRequest)\n .then(res => flattenResponse(res, operationSpec.responses[res.status]));\n } catch (error) {\n result = Promise.reject(error);\n }\n\n const cb = callback;\n if (cb) {\n result\n // tslint:disable-next-line:no-null-keyword\n .then(res => cb(null, res._response.parsedBody, res._response.request, res._response))\n .catch(err => cb(err));\n }\n\n return result;\n }\n}\n\nexport function serializeRequestBody(serviceClient: ServiceClient, httpRequest: WebResource, operationArguments: OperationArguments, operationSpec: OperationSpec): void {\n if (operationSpec.requestBody && operationSpec.requestBody.mapper) {\n httpRequest.body = getOperationArgumentValueFromParameter(serviceClient, operationArguments, operationSpec.requestBody, operationSpec.serializer);\n\n const bodyMapper = operationSpec.requestBody.mapper;\n const { required, xmlName, xmlElementName, serializedName } = bodyMapper;\n const typeName = bodyMapper.type.name;\n try {\n if (httpRequest.body != undefined || required) {\n const requestBodyParameterPathString: string = getPathStringFromParameter(operationSpec.requestBody);\n httpRequest.body = operationSpec.serializer.serialize(bodyMapper, httpRequest.body, requestBodyParameterPathString);\n const isStream = typeName === MapperType.Stream;\n if (operationSpec.isXML) {\n if (typeName === MapperType.Sequence) {\n httpRequest.body = stringifyXML(utils.prepareXMLRootList(httpRequest.body, xmlElementName || xmlName || serializedName!), { rootName: xmlName || serializedName });\n }\n else if (!isStream) {\n httpRequest.body = stringifyXML(httpRequest.body, { rootName: xmlName || serializedName });\n }\n } else if (!isStream) {\n httpRequest.body = JSON.stringify(httpRequest.body);\n }\n }\n } catch (error) {\n throw new Error(`Error \"${error.message}\" occurred in serializing the payload - ${JSON.stringify(serializedName, undefined, \" \")}.`);\n }\n } else if (operationSpec.formDataParameters && operationSpec.formDataParameters.length > 0) {\n httpRequest.formData = {};\n for (const formDataParameter of operationSpec.formDataParameters) {\n const formDataParameterValue: any = getOperationArgumentValueFromParameter(serviceClient, operationArguments, formDataParameter, operationSpec.serializer);\n if (formDataParameterValue != undefined) {\n const formDataParameterPropertyName: string = formDataParameter.mapper.serializedName || getPathStringFromParameter(formDataParameter);\n httpRequest.formData[formDataParameterPropertyName] = operationSpec.serializer.serialize(formDataParameter.mapper, formDataParameterValue, getPathStringFromParameter(formDataParameter));\n }\n }\n }\n}\n\nfunction isRequestPolicyFactory(instance: any): instance is RequestPolicyFactory {\n return typeof instance.create === \"function\";\n}\n\nfunction getValueOrFunctionResult(value: undefined | string | ((defaultValue: string) => string), defaultValueCreator: (() => string)): string {\n let result: string;\n if (typeof value === \"string\") {\n result = value;\n } else {\n result = defaultValueCreator();\n if (typeof value === \"function\") {\n result = value(result);\n }\n }\n return result;\n}\n\nfunction createDefaultRequestPolicyFactories(credentials: ServiceClientCredentials | RequestPolicyFactory | undefined, options: ServiceClientOptions): RequestPolicyFactory[] {\n const factories: RequestPolicyFactory[] = [];\n\n if (options.generateClientRequestIdHeader) {\n factories.push(generateClientRequestIdPolicy(options.clientRequestIdHeaderName));\n }\n\n if (credentials) {\n if (isRequestPolicyFactory(credentials)) {\n factories.push(credentials);\n } else {\n factories.push(signingPolicy(credentials));\n }\n }\n\n const userAgentHeaderName: string = getValueOrFunctionResult(options.userAgentHeaderName, getDefaultUserAgentHeaderName);\n const userAgentHeaderValue: string = getValueOrFunctionResult(options.userAgent, getDefaultUserAgentValue);\n if (userAgentHeaderName && userAgentHeaderValue) {\n factories.push(userAgentPolicy({ key: userAgentHeaderName, value: userAgentHeaderValue }));\n }\n factories.push(redirectPolicy());\n factories.push(rpRegistrationPolicy(options.rpRegistrationRetryTimeout));\n\n if (!options.noRetryPolicy) {\n factories.push(exponentialRetryPolicy());\n factories.push(systemErrorRetryPolicy());\n factories.push(throttlingRetryPolicy());\n }\n\n factories.push(deserializationPolicy(options.deserializationContentTypes));\n\n const proxySettings = options.proxySettings || getDefaultProxySettings();\n if (proxySettings) {\n factories.push(proxyPolicy(proxySettings));\n }\n\n return factories;\n}\n\nexport type PropertyParent = { [propertyName: string]: any };\n\n/**\n * Get the property parent for the property at the provided path when starting with the provided\n * parent object.\n */\nexport function getPropertyParent(parent: PropertyParent, propertyPath: string[]): PropertyParent {\n if (parent && propertyPath) {\n const propertyPathLength: number = propertyPath.length;\n for (let i = 0; i < propertyPathLength - 1; ++i) {\n const propertyName: string = propertyPath[i];\n if (!parent[propertyName]) {\n parent[propertyName] = {};\n }\n parent = parent[propertyName];\n }\n }\n return parent;\n}\n\nfunction getOperationArgumentValueFromParameter(serviceClient: ServiceClient, operationArguments: OperationArguments, parameter: OperationParameter, serializer: Serializer): any {\n return getOperationArgumentValueFromParameterPath(serviceClient, operationArguments, parameter.parameterPath, parameter.mapper, serializer);\n}\n\nexport function getOperationArgumentValueFromParameterPath(serviceClient: ServiceClient, operationArguments: OperationArguments, parameterPath: ParameterPath, parameterMapper: Mapper, serializer: Serializer): any {\n let value: any;\n if (typeof parameterPath === \"string\") {\n parameterPath = [parameterPath];\n }\n if (Array.isArray(parameterPath)) {\n if (parameterPath.length > 0) {\n if (parameterMapper.isConstant) {\n value = parameterMapper.defaultValue;\n } else {\n let propertySearchResult: PropertySearchResult = getPropertyFromParameterPath(operationArguments, parameterPath);\n if (!propertySearchResult.propertyFound) {\n propertySearchResult = getPropertyFromParameterPath(serviceClient, parameterPath);\n }\n\n let useDefaultValue = false;\n if (!propertySearchResult.propertyFound) {\n useDefaultValue = parameterMapper.required || (parameterPath[0] === \"options\" && parameterPath.length === 2);\n }\n value = useDefaultValue ? parameterMapper.defaultValue : propertySearchResult.propertyValue;\n }\n\n // Serialize just for validation purposes.\n const parameterPathString: string = getPathStringFromParameterPath(parameterPath, parameterMapper);\n serializer.serialize(parameterMapper, value, parameterPathString);\n }\n } else {\n if (parameterMapper.required) {\n value = {};\n }\n\n for (const propertyName in parameterPath) {\n const propertyMapper: Mapper = (parameterMapper as CompositeMapper).type.modelProperties![propertyName];\n const propertyPath: ParameterPath = parameterPath[propertyName];\n const propertyValue: any = getOperationArgumentValueFromParameterPath(serviceClient, operationArguments, propertyPath, propertyMapper, serializer);\n // Serialize just for validation purposes.\n const propertyPathString: string = getPathStringFromParameterPath(propertyPath, propertyMapper);\n serializer.serialize(propertyMapper, propertyValue, propertyPathString);\n if (propertyValue !== undefined) {\n if (!value) {\n value = {};\n }\n value[propertyName] = propertyValue;\n }\n }\n }\n return value;\n}\n\ninterface PropertySearchResult {\n propertyValue?: any;\n propertyFound: boolean;\n}\n\nfunction getPropertyFromParameterPath(parent: { [parameterName: string]: any }, parameterPath: string[]): PropertySearchResult {\n const result: PropertySearchResult = { propertyFound: false };\n let i = 0;\n for (; i < parameterPath.length; ++i) {\n const parameterPathPart: string = parameterPath[i];\n // Make sure to check inherited properties too, so don't use hasOwnProperty().\n if (parent != undefined && parameterPathPart in parent) {\n parent = parent[parameterPathPart];\n } else {\n break;\n }\n }\n if (i === parameterPath.length) {\n result.propertyValue = parent;\n result.propertyFound = true;\n }\n return result;\n}\n\nexport function flattenResponse(_response: HttpOperationResponse, responseSpec: OperationResponse | undefined): RestResponse {\n const parsedHeaders = _response.parsedHeaders;\n const bodyMapper = responseSpec && responseSpec.bodyMapper;\n\n const addOperationResponse = (obj: {}) =>\n Object.defineProperty(obj, \"_response\", {\n value: _response\n });\n\n if (bodyMapper) {\n const typeName = bodyMapper.type.name;\n if (typeName === \"Stream\") {\n return addOperationResponse({\n ...parsedHeaders,\n blobBody: _response.blobBody,\n readableStreamBody: _response.readableStreamBody\n });\n }\n\n const modelProperties = typeName === \"Composite\" && (bodyMapper as CompositeMapper).type.modelProperties || {};\n const isPageableResponse = Object.keys(modelProperties).some(k => modelProperties[k].serializedName === \"\");\n if (typeName === \"Sequence\" || isPageableResponse) {\n const arrayResponse = [...(_response.parsedBody || [])] as RestResponse & any[];\n\n for (const key of Object.keys(modelProperties)) {\n if (modelProperties[key].serializedName) {\n arrayResponse[key] = _response.parsedBody[key];\n }\n }\n\n if (parsedHeaders) {\n for (const key of Object.keys(parsedHeaders)) {\n arrayResponse[key] = parsedHeaders[key];\n }\n }\n addOperationResponse(arrayResponse);\n return arrayResponse;\n }\n\n if (typeName === \"Composite\" || typeName === \"Dictionary\") {\n return addOperationResponse({\n ...parsedHeaders,\n ..._response.parsedBody\n });\n }\n }\n\n if (bodyMapper || _response.request.method === \"HEAD\" || utils.isPrimitiveType(_response.parsedBody)) {\n // primitive body types and HEAD booleans\n return addOperationResponse({\n ...parsedHeaders,\n body: _response.parsedBody\n });\n }\n\n return addOperationResponse({\n ...parsedHeaders,\n ..._response.parsedBody\n });\n}\n","import { AbortSignalLike, isNode } from \"@azure/ms-rest-js\";\n\n/**\n * An aborter instance implements AbortSignal interface, can abort HTTP requests.\n *\n * - Call Aborter.none to create a new Aborter instance without timeout.\n * - Call Aborter.timeout() to create a new Aborter instance with timeout.\n *\n * For an existing instance aborter:\n * - Call aborter.withTimeout() to create and return a child Aborter instance with timeout.\n * - Call aborter.withValue(key, value) to create and return a child Aborter instance with key/value pair.\n * - Call aborter.abort() to abort current instance and all children instances.\n * - Call aborter.getValue(key) to search and get value with corresponding key from current aborter to all parents.\n *\n * @example\n * // Abort without timeout\n * await blockBlobURL.upload(Aborter.none, buf, buf.length);\n *\n * @example\n * // Abort container create in 1000ms\n * await blockBlobURL.upload(Aborter.timeout(1000), buf, buf.length);\n *\n * @example\n * // Share aborter cross multiple operations in 30s\n * // Upload the same data to 2 different data centers at the same time, abort another when any of them is finished\n * const aborter = Aborter.timeout(30 * 1000);\n * blockBlobURL1.upload(aborter, buf, buf.length).then(aborter.abort);\n * blockBlobURL2.upload(aborter, buf, buf.length).then(aborter.abort);\n *\n * @example\n * // Cascaded aborting\n * // All operations can't take more than 30 seconds\n * const aborter = Aborter.timeout(30 * 1000);\n *\n * // Following 2 operations can't take more than 25 seconds\n * await blockBlobURL.upload(aborter.withTimeout(25 * 1000), buf, buf.length);\n * await blockBlobURL.upload(aborter.withTimeout(25 * 1000), buf, buf.length);\n *\n * @export\n * @class Aborter\n * @implements {AbortSignalLike}\n */\n\nexport class Aborter implements AbortSignalLike {\n /**\n * Status of whether aborted or not.\n *\n * @readonly\n * @type {boolean}\n * @memberof Aborter\n */\n public get aborted(): boolean {\n return this._aborted;\n }\n\n /**\n * Creates a new Aborter instance without timeout.\n *\n * @readonly\n * @static\n * @type {Aborter}\n * @memberof Aborter\n */\n public static get none(): Aborter {\n return new Aborter(undefined, 0);\n }\n\n /**\n * Creates a new Aborter instance with timeout in milliseconds.\n * Set parameter timeout to 0 will not create a timer.\n *\n * @static\n * @param {number} {timeout} in milliseconds\n * @returns {Aborter}\n * @memberof Aborter\n */\n public static timeout(timeout: number): Aborter {\n return new Aborter(undefined, timeout);\n }\n\n /**\n * onabort event listener.\n *\n * @memberof Aborter\n */\n public onabort: ((this: AbortSignalLike, ev: any) => any) | null = null;\n\n // tslint:disable-next-line:variable-name\n private _aborted: boolean = false;\n private timer?: any;\n private readonly parent?: Aborter;\n private readonly children: Aborter[] = []; // When child object calls dispose(), remove child from here\n private readonly abortEventListeners: ((this: AbortSignalLike, ev?: any) => any)[] = [];\n // Pipeline proxies need to use \"abortSignal as Aborter\" in order to access non AbortSignalLike methods\n // immutable primitive types\n private readonly key?: string;\n private readonly value?: string | number | boolean | null;\n // private disposed: boolean = false;\n\n /**\n * Private constructor for internal usage, creates an instance of Aborter.\n *\n * @param {Aborter} [parent] Optional. Parent aborter.\n * @param {number} [timeout=0] Optional. Timeout before abort in millisecond, 0 means no timeout.\n * @param {string} [key] Optional. Immutable key in string.\n * @param {(string | number | boolean | null)} [value] Optional. Immutable value.\n * @memberof Aborter\n */\n private constructor(\n parent?: Aborter,\n timeout: number = 0,\n key?: string,\n value?: string | number | boolean | null\n ) {\n this.parent = parent;\n this.key = key;\n this.value = value;\n\n if (timeout > 0) {\n this.timer = setTimeout(() => {\n this.abort.call(this);\n }, timeout);\n\n // When called, the active Timeout object will not require the Node.js event loop\n // to remain active. If there is no other activity keeping the event loop running,\n // the process may exit before the Timeout object's callback is invoked.\n if (this.timer && isNode) {\n this.timer!.unref();\n }\n }\n }\n\n /**\n * Create and return a new Aborter instance, which will be appended as a child node of current Aborter.\n * Current Aborter instance becomes father node of the new instance. When current or father Aborter node\n * triggers timeout event, all children nodes abort event will be triggered too.\n *\n * When timeout parameter (in millisecond) is larger than 0, the abort event will be triggered when timeout.\n * Otherwise, call abort() method to manually abort.\n *\n * @param {number} {timeout} Timeout in millisecond.\n * @returns {Aborter} The new Aborter instance created.\n * @memberof Aborter\n */\n public withTimeout(timeout: number): Aborter {\n const childCancelContext = new Aborter(this, timeout);\n this.children.push(childCancelContext);\n return childCancelContext;\n }\n\n /**\n * Create and return a new Aborter instance, which will be appended as a child node of current Aborter.\n * Current Aborter instance becomes father node of the new instance. When current or father Aborter node\n * triggers timeout event, all children nodes abort event will be triggered too.\n *\n * Immutable key value pair will be set into the new created Aborter instance.\n * Call getValue() to find out latest value with corresponding key in the chain of\n * [current node] -> [parent node] and [grand parent node]....\n *\n * @param {string} key\n * @param {(string | number | boolean | null)} [value]\n * @returns {Aborter}\n * @memberof Aborter\n */\n public withValue(key: string, value?: string | number | boolean | null): Aborter {\n const childCancelContext = new Aborter(this, 0, key, value);\n this.children.push(childCancelContext);\n return childCancelContext;\n }\n\n /**\n * Find out latest value with corresponding key in the chain of\n * [current node] -> [parent node] -> [grand parent node] -> ... -> [root node].\n *\n * If key is not found, undefined will be returned.\n *\n * @param {string} key\n * @returns {(string | number | boolean | null | undefined)}\n * @memberof Aborter\n */\n public getValue(key: string): string | number | boolean | null | undefined {\n for (let parent: Aborter | undefined = this; parent; parent = parent.parent) {\n if (parent.key === key) {\n return parent.value;\n }\n }\n return undefined;\n }\n\n /**\n * Trigger abort event immediately, the onabort and all abort event listeners will be triggered.\n * Will try to trigger abort event for all children Aborter nodes.\n *\n * - If there is a timeout, the timer will be cancelled.\n * - If aborted is true, nothing will happen.\n *\n * @returns\n * @memberof Aborter\n */\n public abort() {\n if (this.aborted) {\n return;\n }\n this.cancelTimer();\n\n if (this.onabort) {\n this.onabort.call(this, { type: \"abort\" } as any);\n }\n\n this.abortEventListeners.forEach((listener) => {\n listener.call(this, { type: \"abort\" } as any);\n });\n\n this.children.forEach((child) => child.cancelByParent());\n\n this._aborted = true;\n }\n\n // public dispose() {\n // if (this.disposed || this.aborted) {\n // return;\n // }\n\n // this.cancelTimer();\n\n // // (parent)A <- B <- C(child), if B disposes, when A abort, C will not abort\n // if (this.parent) {\n // const index = this.parent.children.indexOf(this);\n // if (index > -1) {\n // this.parent.children.splice(index, 1);\n // }\n // }\n\n // this.disposed = true;\n // }\n\n /**\n * Added new \"abort\" event listener, only support \"abort\" event.\n *\n * @param {\"abort\"} _type Only support \"abort\" event\n * @param {(this: AbortSignalLike, ev: any) => any} listener\n * @memberof Aborter\n */\n public addEventListener(\n // tslint:disable-next-line:variable-name\n _type: \"abort\",\n listener: (this: AbortSignalLike, ev: any) => any\n ): void {\n this.abortEventListeners.push(listener);\n }\n\n /**\n * Remove \"abort\" event listener, only support \"abort\" event.\n *\n * @param {\"abort\"} _type Only support \"abort\" event\n * @param {(this: AbortSignalLike, ev: any) => any} listener\n * @memberof Aborter\n */\n public removeEventListener(\n // tslint:disable-next-line:variable-name\n _type: \"abort\",\n listener: (this: AbortSignalLike, ev: any) => any\n ): void {\n const index = this.abortEventListeners.indexOf(listener);\n if (index > -1) {\n this.abortEventListeners.splice(index, 1);\n }\n }\n\n public dispatchEvent(): boolean {\n throw new Error(\"Method not implemented.\");\n }\n\n private cancelByParent() {\n // if (!this.disposed) {\n this.abort();\n // }\n }\n\n private cancelTimer() {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n }\n}\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *\n * Code generated by Microsoft (R) AutoRest Code Generator.\n * Changes may cause incorrect behavior and will be lost if the code is regenerated.\n */\n\nimport * as msRest from \"@azure/ms-rest-js\";\n\n\nexport const KeyInfo: msRest.CompositeMapper = {\n serializedName: \"KeyInfo\",\n type: {\n name: \"Composite\",\n className: \"KeyInfo\",\n modelProperties: {\n start: {\n xmlName: \"Start\",\n required: true,\n serializedName: \"Start\",\n type: {\n name: \"String\"\n }\n },\n expiry: {\n xmlName: \"Expiry\",\n required: true,\n serializedName: \"Expiry\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const UserDelegationKey: msRest.CompositeMapper = {\n serializedName: \"UserDelegationKey\",\n type: {\n name: \"Composite\",\n className: \"UserDelegationKey\",\n modelProperties: {\n signedOid: {\n xmlName: \"SignedOid\",\n required: true,\n serializedName: \"SignedOid\",\n type: {\n name: \"String\"\n }\n },\n signedTid: {\n xmlName: \"SignedTid\",\n required: true,\n serializedName: \"SignedTid\",\n type: {\n name: \"String\"\n }\n },\n signedStart: {\n xmlName: \"SignedStart\",\n required: true,\n serializedName: \"SignedStart\",\n type: {\n name: \"String\"\n }\n },\n signedExpiry: {\n xmlName: \"SignedExpiry\",\n required: true,\n serializedName: \"SignedExpiry\",\n type: {\n name: \"String\"\n }\n },\n signedService: {\n xmlName: \"SignedService\",\n required: true,\n serializedName: \"SignedService\",\n type: {\n name: \"String\"\n }\n },\n signedVersion: {\n xmlName: \"SignedVersion\",\n required: true,\n serializedName: \"SignedVersion\",\n type: {\n name: \"String\"\n }\n },\n value: {\n xmlName: \"Value\",\n required: true,\n serializedName: \"Value\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const StorageError: msRest.CompositeMapper = {\n serializedName: \"StorageError\",\n type: {\n name: \"Composite\",\n className: \"StorageError\",\n modelProperties: {\n message: {\n xmlName: \"Message\",\n serializedName: \"Message\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const DataLakeStorageErrorError: msRest.CompositeMapper = {\n serializedName: \"DataLakeStorageError_error\",\n type: {\n name: \"Composite\",\n className: \"DataLakeStorageErrorError\",\n modelProperties: {\n code: {\n xmlName: \"Code\",\n serializedName: \"Code\",\n type: {\n name: \"String\"\n }\n },\n message: {\n xmlName: \"Message\",\n serializedName: \"Message\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const DataLakeStorageError: msRest.CompositeMapper = {\n serializedName: \"DataLakeStorageError\",\n type: {\n name: \"Composite\",\n className: \"DataLakeStorageError\",\n modelProperties: {\n error: {\n xmlName: \"error\",\n serializedName: \"error\",\n type: {\n name: \"Composite\",\n className: \"DataLakeStorageErrorError\"\n }\n }\n }\n }\n};\n\nexport const AccessPolicy: msRest.CompositeMapper = {\n serializedName: \"AccessPolicy\",\n type: {\n name: \"Composite\",\n className: \"AccessPolicy\",\n modelProperties: {\n start: {\n xmlName: \"Start\",\n required: true,\n serializedName: \"Start\",\n type: {\n name: \"String\"\n }\n },\n expiry: {\n xmlName: \"Expiry\",\n required: true,\n serializedName: \"Expiry\",\n type: {\n name: \"String\"\n }\n },\n permission: {\n xmlName: \"Permission\",\n required: true,\n serializedName: \"Permission\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobProperties: msRest.CompositeMapper = {\n xmlName: \"Properties\",\n serializedName: \"BlobProperties\",\n type: {\n name: \"Composite\",\n className: \"BlobProperties\",\n modelProperties: {\n creationTime: {\n xmlName: \"Creation-Time\",\n serializedName: \"Creation-Time\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n lastModified: {\n xmlName: \"Last-Modified\",\n required: true,\n serializedName: \"Last-Modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n etag: {\n xmlName: \"Etag\",\n required: true,\n serializedName: \"Etag\",\n type: {\n name: \"String\"\n }\n },\n contentLength: {\n xmlName: \"Content-Length\",\n serializedName: \"Content-Length\",\n type: {\n name: \"Number\"\n }\n },\n contentType: {\n xmlName: \"Content-Type\",\n serializedName: \"Content-Type\",\n type: {\n name: \"String\"\n }\n },\n contentEncoding: {\n xmlName: \"Content-Encoding\",\n serializedName: \"Content-Encoding\",\n type: {\n name: \"String\"\n }\n },\n contentLanguage: {\n xmlName: \"Content-Language\",\n serializedName: \"Content-Language\",\n type: {\n name: \"String\"\n }\n },\n contentMD5: {\n xmlName: \"Content-MD5\",\n serializedName: \"Content-MD5\",\n type: {\n name: \"ByteArray\"\n }\n },\n contentDisposition: {\n xmlName: \"Content-Disposition\",\n serializedName: \"Content-Disposition\",\n type: {\n name: \"String\"\n }\n },\n cacheControl: {\n xmlName: \"Cache-Control\",\n serializedName: \"Cache-Control\",\n type: {\n name: \"String\"\n }\n },\n blobSequenceNumber: {\n xmlName: \"x-ms-blob-sequence-number\",\n serializedName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n },\n blobType: {\n xmlName: \"BlobType\",\n serializedName: \"BlobType\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"BlockBlob\",\n \"PageBlob\",\n \"AppendBlob\"\n ]\n }\n },\n leaseStatus: {\n xmlName: \"LeaseStatus\",\n serializedName: \"LeaseStatus\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"locked\",\n \"unlocked\"\n ]\n }\n },\n leaseState: {\n xmlName: \"LeaseState\",\n serializedName: \"LeaseState\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"available\",\n \"leased\",\n \"expired\",\n \"breaking\",\n \"broken\"\n ]\n }\n },\n leaseDuration: {\n xmlName: \"LeaseDuration\",\n serializedName: \"LeaseDuration\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"infinite\",\n \"fixed\"\n ]\n }\n },\n copyId: {\n xmlName: \"CopyId\",\n serializedName: \"CopyId\",\n type: {\n name: \"String\"\n }\n },\n copyStatus: {\n xmlName: \"CopyStatus\",\n serializedName: \"CopyStatus\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"pending\",\n \"success\",\n \"aborted\",\n \"failed\"\n ]\n }\n },\n copySource: {\n xmlName: \"CopySource\",\n serializedName: \"CopySource\",\n type: {\n name: \"String\"\n }\n },\n copyProgress: {\n xmlName: \"CopyProgress\",\n serializedName: \"CopyProgress\",\n type: {\n name: \"String\"\n }\n },\n copyCompletionTime: {\n xmlName: \"CopyCompletionTime\",\n serializedName: \"CopyCompletionTime\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n copyStatusDescription: {\n xmlName: \"CopyStatusDescription\",\n serializedName: \"CopyStatusDescription\",\n type: {\n name: \"String\"\n }\n },\n serverEncrypted: {\n xmlName: \"ServerEncrypted\",\n serializedName: \"ServerEncrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n incrementalCopy: {\n xmlName: \"IncrementalCopy\",\n serializedName: \"IncrementalCopy\",\n type: {\n name: \"Boolean\"\n }\n },\n destinationSnapshot: {\n xmlName: \"DestinationSnapshot\",\n serializedName: \"DestinationSnapshot\",\n type: {\n name: \"String\"\n }\n },\n deletedTime: {\n xmlName: \"DeletedTime\",\n serializedName: \"DeletedTime\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n remainingRetentionDays: {\n xmlName: \"RemainingRetentionDays\",\n serializedName: \"RemainingRetentionDays\",\n type: {\n name: \"Number\"\n }\n },\n accessTier: {\n xmlName: \"AccessTier\",\n serializedName: \"AccessTier\",\n type: {\n name: \"String\"\n }\n },\n accessTierInferred: {\n xmlName: \"AccessTierInferred\",\n serializedName: \"AccessTierInferred\",\n type: {\n name: \"Boolean\"\n }\n },\n archiveStatus: {\n xmlName: \"ArchiveStatus\",\n serializedName: \"ArchiveStatus\",\n type: {\n name: \"String\"\n }\n },\n customerProvidedKeySha256: {\n xmlName: \"CustomerProvidedKeySha256\",\n serializedName: \"CustomerProvidedKeySha256\",\n type: {\n name: \"String\"\n }\n },\n accessTierChangeTime: {\n xmlName: \"AccessTierChangeTime\",\n serializedName: \"AccessTierChangeTime\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\n\nexport const BlobMetadata: msRest.CompositeMapper = {\n xmlName: \"Metadata\",\n serializedName: \"BlobMetadata\",\n type: {\n name: \"Composite\",\n className: \"BlobMetadata\",\n modelProperties: {\n encrypted: {\n xmlIsAttribute: true,\n xmlName: \"Encrypted\",\n serializedName: \"Encrypted\",\n type: {\n name: \"String\"\n }\n }\n },\n additionalProperties: {\n type: {\n name: \"String\"\n }\n }\n }\n};\n\nexport const BlobItem: msRest.CompositeMapper = {\n xmlName: \"Blob\",\n serializedName: \"BlobItem\",\n type: {\n name: \"Composite\",\n className: \"BlobItem\",\n modelProperties: {\n name: {\n xmlName: \"Name\",\n required: true,\n serializedName: \"Name\",\n type: {\n name: \"String\"\n }\n },\n deleted: {\n xmlName: \"Deleted\",\n required: true,\n serializedName: \"Deleted\",\n type: {\n name: \"Boolean\"\n }\n },\n snapshot: {\n xmlName: \"Snapshot\",\n required: true,\n serializedName: \"Snapshot\",\n type: {\n name: \"String\"\n }\n },\n properties: {\n xmlName: \"Properties\",\n required: true,\n serializedName: \"Properties\",\n type: {\n name: \"Composite\",\n className: \"BlobProperties\"\n }\n },\n metadata: {\n xmlName: \"Metadata\",\n serializedName: \"Metadata\",\n type: {\n name: \"Composite\",\n className: \"BlobMetadata\",\n additionalProperties: {\n type: {\n name: \"String\"\n }\n }\n }\n }\n }\n }\n};\n\nexport const BlobFlatListSegment: msRest.CompositeMapper = {\n xmlName: \"Blobs\",\n serializedName: \"BlobFlatListSegment\",\n type: {\n name: \"Composite\",\n className: \"BlobFlatListSegment\",\n modelProperties: {\n blobItems: {\n xmlName: \"BlobItems\",\n xmlElementName: \"Blob\",\n required: true,\n serializedName: \"BlobItems\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"BlobItem\"\n }\n }\n }\n }\n }\n }\n};\n\nexport const ListBlobsFlatSegmentResponse: msRest.CompositeMapper = {\n xmlName: \"EnumerationResults\",\n serializedName: \"ListBlobsFlatSegmentResponse\",\n type: {\n name: \"Composite\",\n className: \"ListBlobsFlatSegmentResponse\",\n modelProperties: {\n serviceEndpoint: {\n xmlIsAttribute: true,\n xmlName: \"ServiceEndpoint\",\n required: true,\n serializedName: \"ServiceEndpoint\",\n type: {\n name: \"String\"\n }\n },\n containerName: {\n xmlIsAttribute: true,\n xmlName: \"ContainerName\",\n required: true,\n serializedName: \"ContainerName\",\n type: {\n name: \"String\"\n }\n },\n prefix: {\n xmlName: \"Prefix\",\n serializedName: \"Prefix\",\n type: {\n name: \"String\"\n }\n },\n marker: {\n xmlName: \"Marker\",\n serializedName: \"Marker\",\n type: {\n name: \"String\"\n }\n },\n maxResults: {\n xmlName: \"MaxResults\",\n serializedName: \"MaxResults\",\n type: {\n name: \"Number\"\n }\n },\n delimiter: {\n xmlName: \"Delimiter\",\n serializedName: \"Delimiter\",\n type: {\n name: \"String\"\n }\n },\n segment: {\n xmlName: \"Blobs\",\n required: true,\n serializedName: \"Segment\",\n type: {\n name: \"Composite\",\n className: \"BlobFlatListSegment\"\n }\n },\n nextMarker: {\n xmlName: \"NextMarker\",\n serializedName: \"NextMarker\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobPrefix: msRest.CompositeMapper = {\n serializedName: \"BlobPrefix\",\n type: {\n name: \"Composite\",\n className: \"BlobPrefix\",\n modelProperties: {\n name: {\n xmlName: \"Name\",\n required: true,\n serializedName: \"Name\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobHierarchyListSegment: msRest.CompositeMapper = {\n xmlName: \"Blobs\",\n serializedName: \"BlobHierarchyListSegment\",\n type: {\n name: \"Composite\",\n className: \"BlobHierarchyListSegment\",\n modelProperties: {\n blobPrefixes: {\n xmlName: \"BlobPrefixes\",\n xmlElementName: \"BlobPrefix\",\n serializedName: \"BlobPrefixes\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"BlobPrefix\"\n }\n }\n }\n },\n blobItems: {\n xmlName: \"BlobItems\",\n xmlElementName: \"Blob\",\n required: true,\n serializedName: \"BlobItems\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"BlobItem\"\n }\n }\n }\n }\n }\n }\n};\n\nexport const ListBlobsHierarchySegmentResponse: msRest.CompositeMapper = {\n xmlName: \"EnumerationResults\",\n serializedName: \"ListBlobsHierarchySegmentResponse\",\n type: {\n name: \"Composite\",\n className: \"ListBlobsHierarchySegmentResponse\",\n modelProperties: {\n serviceEndpoint: {\n xmlIsAttribute: true,\n xmlName: \"ServiceEndpoint\",\n required: true,\n serializedName: \"ServiceEndpoint\",\n type: {\n name: \"String\"\n }\n },\n containerName: {\n xmlIsAttribute: true,\n xmlName: \"ContainerName\",\n required: true,\n serializedName: \"ContainerName\",\n type: {\n name: \"String\"\n }\n },\n prefix: {\n xmlName: \"Prefix\",\n serializedName: \"Prefix\",\n type: {\n name: \"String\"\n }\n },\n marker: {\n xmlName: \"Marker\",\n serializedName: \"Marker\",\n type: {\n name: \"String\"\n }\n },\n maxResults: {\n xmlName: \"MaxResults\",\n serializedName: \"MaxResults\",\n type: {\n name: \"Number\"\n }\n },\n delimiter: {\n xmlName: \"Delimiter\",\n serializedName: \"Delimiter\",\n type: {\n name: \"String\"\n }\n },\n segment: {\n xmlName: \"Blobs\",\n required: true,\n serializedName: \"Segment\",\n type: {\n name: \"Composite\",\n className: \"BlobHierarchyListSegment\"\n }\n },\n nextMarker: {\n xmlName: \"NextMarker\",\n serializedName: \"NextMarker\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const Block: msRest.CompositeMapper = {\n serializedName: \"Block\",\n type: {\n name: \"Composite\",\n className: \"Block\",\n modelProperties: {\n name: {\n xmlName: \"Name\",\n required: true,\n serializedName: \"Name\",\n type: {\n name: \"String\"\n }\n },\n size: {\n xmlName: \"Size\",\n required: true,\n serializedName: \"Size\",\n type: {\n name: \"Number\"\n }\n }\n }\n }\n};\n\nexport const BlockList: msRest.CompositeMapper = {\n serializedName: \"BlockList\",\n type: {\n name: \"Composite\",\n className: \"BlockList\",\n modelProperties: {\n committedBlocks: {\n xmlIsWrapped: true,\n xmlName: \"CommittedBlocks\",\n xmlElementName: \"Block\",\n serializedName: \"CommittedBlocks\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"Block\"\n }\n }\n }\n },\n uncommittedBlocks: {\n xmlIsWrapped: true,\n xmlName: \"UncommittedBlocks\",\n xmlElementName: \"Block\",\n serializedName: \"UncommittedBlocks\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"Block\"\n }\n }\n }\n }\n }\n }\n};\n\nexport const BlockLookupList: msRest.CompositeMapper = {\n xmlName: \"BlockList\",\n serializedName: \"BlockLookupList\",\n type: {\n name: \"Composite\",\n className: \"BlockLookupList\",\n modelProperties: {\n committed: {\n xmlName: \"Committed\",\n xmlElementName: \"Committed\",\n serializedName: \"Committed\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"String\"\n }\n }\n }\n },\n uncommitted: {\n xmlName: \"Uncommitted\",\n xmlElementName: \"Uncommitted\",\n serializedName: \"Uncommitted\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"String\"\n }\n }\n }\n },\n latest: {\n xmlName: \"Latest\",\n xmlElementName: \"Latest\",\n serializedName: \"Latest\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"String\"\n }\n }\n }\n }\n }\n }\n};\n\nexport const ContainerProperties: msRest.CompositeMapper = {\n serializedName: \"ContainerProperties\",\n type: {\n name: \"Composite\",\n className: \"ContainerProperties\",\n modelProperties: {\n lastModified: {\n xmlName: \"Last-Modified\",\n required: true,\n serializedName: \"Last-Modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n etag: {\n xmlName: \"Etag\",\n required: true,\n serializedName: \"Etag\",\n type: {\n name: \"String\"\n }\n },\n leaseStatus: {\n xmlName: \"LeaseStatus\",\n serializedName: \"LeaseStatus\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"locked\",\n \"unlocked\"\n ]\n }\n },\n leaseState: {\n xmlName: \"LeaseState\",\n serializedName: \"LeaseState\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"available\",\n \"leased\",\n \"expired\",\n \"breaking\",\n \"broken\"\n ]\n }\n },\n leaseDuration: {\n xmlName: \"LeaseDuration\",\n serializedName: \"LeaseDuration\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"infinite\",\n \"fixed\"\n ]\n }\n },\n publicAccess: {\n xmlName: \"PublicAccess\",\n serializedName: \"PublicAccess\",\n type: {\n name: \"String\"\n }\n },\n hasImmutabilityPolicy: {\n xmlName: \"HasImmutabilityPolicy\",\n serializedName: \"HasImmutabilityPolicy\",\n type: {\n name: \"Boolean\"\n }\n },\n hasLegalHold: {\n xmlName: \"HasLegalHold\",\n serializedName: \"HasLegalHold\",\n type: {\n name: \"Boolean\"\n }\n }\n }\n }\n};\n\nexport const ContainerItem: msRest.CompositeMapper = {\n xmlName: \"Container\",\n serializedName: \"ContainerItem\",\n type: {\n name: \"Composite\",\n className: \"ContainerItem\",\n modelProperties: {\n name: {\n xmlName: \"Name\",\n required: true,\n serializedName: \"Name\",\n type: {\n name: \"String\"\n }\n },\n properties: {\n xmlName: \"Properties\",\n required: true,\n serializedName: \"Properties\",\n type: {\n name: \"Composite\",\n className: \"ContainerProperties\"\n }\n },\n metadata: {\n xmlName: \"Metadata\",\n serializedName: \"Metadata\",\n type: {\n name: \"Dictionary\",\n value: {\n type: {\n name: \"String\"\n }\n }\n }\n }\n }\n }\n};\n\nexport const ListContainersSegmentResponse: msRest.CompositeMapper = {\n xmlName: \"EnumerationResults\",\n serializedName: \"ListContainersSegmentResponse\",\n type: {\n name: \"Composite\",\n className: \"ListContainersSegmentResponse\",\n modelProperties: {\n serviceEndpoint: {\n xmlIsAttribute: true,\n xmlName: \"ServiceEndpoint\",\n required: true,\n serializedName: \"ServiceEndpoint\",\n type: {\n name: \"String\"\n }\n },\n prefix: {\n xmlName: \"Prefix\",\n serializedName: \"Prefix\",\n type: {\n name: \"String\"\n }\n },\n marker: {\n xmlName: \"Marker\",\n serializedName: \"Marker\",\n type: {\n name: \"String\"\n }\n },\n maxResults: {\n xmlName: \"MaxResults\",\n serializedName: \"MaxResults\",\n type: {\n name: \"Number\"\n }\n },\n containerItems: {\n xmlIsWrapped: true,\n xmlName: \"Containers\",\n xmlElementName: \"Container\",\n required: true,\n serializedName: \"ContainerItems\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"ContainerItem\"\n }\n }\n }\n },\n nextMarker: {\n xmlName: \"NextMarker\",\n serializedName: \"NextMarker\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const CorsRule: msRest.CompositeMapper = {\n serializedName: \"CorsRule\",\n type: {\n name: \"Composite\",\n className: \"CorsRule\",\n modelProperties: {\n allowedOrigins: {\n xmlName: \"AllowedOrigins\",\n required: true,\n serializedName: \"AllowedOrigins\",\n type: {\n name: \"String\"\n }\n },\n allowedMethods: {\n xmlName: \"AllowedMethods\",\n required: true,\n serializedName: \"AllowedMethods\",\n type: {\n name: \"String\"\n }\n },\n allowedHeaders: {\n xmlName: \"AllowedHeaders\",\n required: true,\n serializedName: \"AllowedHeaders\",\n type: {\n name: \"String\"\n }\n },\n exposedHeaders: {\n xmlName: \"ExposedHeaders\",\n required: true,\n serializedName: \"ExposedHeaders\",\n type: {\n name: \"String\"\n }\n },\n maxAgeInSeconds: {\n xmlName: \"MaxAgeInSeconds\",\n required: true,\n serializedName: \"MaxAgeInSeconds\",\n constraints: {\n InclusiveMinimum: 0\n },\n type: {\n name: \"Number\"\n }\n }\n }\n }\n};\n\nexport const GeoReplication: msRest.CompositeMapper = {\n serializedName: \"GeoReplication\",\n type: {\n name: \"Composite\",\n className: \"GeoReplication\",\n modelProperties: {\n status: {\n xmlName: \"Status\",\n required: true,\n serializedName: \"Status\",\n type: {\n name: \"String\"\n }\n },\n lastSyncTime: {\n xmlName: \"LastSyncTime\",\n required: true,\n serializedName: \"LastSyncTime\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\n\nexport const RetentionPolicy: msRest.CompositeMapper = {\n serializedName: \"RetentionPolicy\",\n type: {\n name: \"Composite\",\n className: \"RetentionPolicy\",\n modelProperties: {\n enabled: {\n xmlName: \"Enabled\",\n required: true,\n serializedName: \"Enabled\",\n type: {\n name: \"Boolean\"\n }\n },\n days: {\n xmlName: \"Days\",\n serializedName: \"Days\",\n constraints: {\n InclusiveMinimum: 1\n },\n type: {\n name: \"Number\"\n }\n }\n }\n }\n};\n\nexport const Logging: msRest.CompositeMapper = {\n serializedName: \"Logging\",\n type: {\n name: \"Composite\",\n className: \"Logging\",\n modelProperties: {\n version: {\n xmlName: \"Version\",\n required: true,\n serializedName: \"Version\",\n type: {\n name: \"String\"\n }\n },\n deleteProperty: {\n xmlName: \"Delete\",\n required: true,\n serializedName: \"Delete\",\n type: {\n name: \"Boolean\"\n }\n },\n read: {\n xmlName: \"Read\",\n required: true,\n serializedName: \"Read\",\n type: {\n name: \"Boolean\"\n }\n },\n write: {\n xmlName: \"Write\",\n required: true,\n serializedName: \"Write\",\n type: {\n name: \"Boolean\"\n }\n },\n retentionPolicy: {\n xmlName: \"RetentionPolicy\",\n required: true,\n serializedName: \"RetentionPolicy\",\n type: {\n name: \"Composite\",\n className: \"RetentionPolicy\"\n }\n }\n }\n }\n};\n\nexport const Metrics: msRest.CompositeMapper = {\n serializedName: \"Metrics\",\n type: {\n name: \"Composite\",\n className: \"Metrics\",\n modelProperties: {\n version: {\n xmlName: \"Version\",\n serializedName: \"Version\",\n type: {\n name: \"String\"\n }\n },\n enabled: {\n xmlName: \"Enabled\",\n required: true,\n serializedName: \"Enabled\",\n type: {\n name: \"Boolean\"\n }\n },\n includeAPIs: {\n xmlName: \"IncludeAPIs\",\n serializedName: \"IncludeAPIs\",\n type: {\n name: \"Boolean\"\n }\n },\n retentionPolicy: {\n xmlName: \"RetentionPolicy\",\n serializedName: \"RetentionPolicy\",\n type: {\n name: \"Composite\",\n className: \"RetentionPolicy\"\n }\n }\n }\n }\n};\n\nexport const PageRange: msRest.CompositeMapper = {\n serializedName: \"PageRange\",\n type: {\n name: \"Composite\",\n className: \"PageRange\",\n modelProperties: {\n start: {\n xmlName: \"Start\",\n required: true,\n serializedName: \"Start\",\n type: {\n name: \"Number\"\n }\n },\n end: {\n xmlName: \"End\",\n required: true,\n serializedName: \"End\",\n type: {\n name: \"Number\"\n }\n }\n }\n }\n};\n\nexport const ClearRange: msRest.CompositeMapper = {\n serializedName: \"ClearRange\",\n type: {\n name: \"Composite\",\n className: \"ClearRange\",\n modelProperties: {\n start: {\n xmlName: \"Start\",\n required: true,\n serializedName: \"Start\",\n type: {\n name: \"Number\"\n }\n },\n end: {\n xmlName: \"End\",\n required: true,\n serializedName: \"End\",\n type: {\n name: \"Number\"\n }\n }\n }\n }\n};\n\nexport const PageList: msRest.CompositeMapper = {\n serializedName: \"PageList\",\n type: {\n name: \"Composite\",\n className: \"PageList\",\n modelProperties: {\n pageRange: {\n xmlName: \"PageRange\",\n xmlElementName: \"PageRange\",\n serializedName: \"PageRange\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"PageRange\"\n }\n }\n }\n },\n clearRange: {\n xmlName: \"ClearRange\",\n xmlElementName: \"ClearRange\",\n serializedName: \"ClearRange\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"ClearRange\"\n }\n }\n }\n }\n }\n }\n};\n\nexport const SignedIdentifier: msRest.CompositeMapper = {\n serializedName: \"SignedIdentifier\",\n type: {\n name: \"Composite\",\n className: \"SignedIdentifier\",\n modelProperties: {\n id: {\n xmlName: \"Id\",\n required: true,\n serializedName: \"Id\",\n type: {\n name: \"String\"\n }\n },\n accessPolicy: {\n xmlName: \"AccessPolicy\",\n required: true,\n serializedName: \"AccessPolicy\",\n type: {\n name: \"Composite\",\n className: \"AccessPolicy\"\n }\n }\n }\n }\n};\n\nexport const StaticWebsite: msRest.CompositeMapper = {\n serializedName: \"StaticWebsite\",\n type: {\n name: \"Composite\",\n className: \"StaticWebsite\",\n modelProperties: {\n enabled: {\n xmlName: \"Enabled\",\n required: true,\n serializedName: \"Enabled\",\n type: {\n name: \"Boolean\"\n }\n },\n indexDocument: {\n xmlName: \"IndexDocument\",\n serializedName: \"IndexDocument\",\n type: {\n name: \"String\"\n }\n },\n errorDocument404Path: {\n xmlName: \"ErrorDocument404Path\",\n serializedName: \"ErrorDocument404Path\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const StorageServiceProperties: msRest.CompositeMapper = {\n serializedName: \"StorageServiceProperties\",\n type: {\n name: \"Composite\",\n className: \"StorageServiceProperties\",\n modelProperties: {\n logging: {\n xmlName: \"Logging\",\n serializedName: \"Logging\",\n type: {\n name: \"Composite\",\n className: \"Logging\"\n }\n },\n hourMetrics: {\n xmlName: \"HourMetrics\",\n serializedName: \"HourMetrics\",\n type: {\n name: \"Composite\",\n className: \"Metrics\"\n }\n },\n minuteMetrics: {\n xmlName: \"MinuteMetrics\",\n serializedName: \"MinuteMetrics\",\n type: {\n name: \"Composite\",\n className: \"Metrics\"\n }\n },\n cors: {\n xmlIsWrapped: true,\n xmlName: \"Cors\",\n xmlElementName: \"CorsRule\",\n serializedName: \"Cors\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"CorsRule\"\n }\n }\n }\n },\n defaultServiceVersion: {\n xmlName: \"DefaultServiceVersion\",\n serializedName: \"DefaultServiceVersion\",\n type: {\n name: \"String\"\n }\n },\n deleteRetentionPolicy: {\n xmlName: \"DeleteRetentionPolicy\",\n serializedName: \"DeleteRetentionPolicy\",\n type: {\n name: \"Composite\",\n className: \"RetentionPolicy\"\n }\n },\n staticWebsite: {\n xmlName: \"StaticWebsite\",\n serializedName: \"StaticWebsite\",\n type: {\n name: \"Composite\",\n className: \"StaticWebsite\"\n }\n }\n }\n }\n};\n\nexport const StorageServiceStats: msRest.CompositeMapper = {\n serializedName: \"StorageServiceStats\",\n type: {\n name: \"Composite\",\n className: \"StorageServiceStats\",\n modelProperties: {\n geoReplication: {\n xmlName: \"GeoReplication\",\n serializedName: \"GeoReplication\",\n type: {\n name: \"Composite\",\n className: \"GeoReplication\"\n }\n }\n }\n }\n};\n\nexport const LeaseAccessConditions: msRest.CompositeMapper = {\n xmlName: \"lease-access-conditions\",\n type: {\n name: \"Composite\",\n className: \"LeaseAccessConditions\",\n modelProperties: {\n leaseId: {\n xmlName: \"leaseId\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ModifiedAccessConditions: msRest.CompositeMapper = {\n xmlName: \"modified-access-conditions\",\n type: {\n name: \"Composite\",\n className: \"ModifiedAccessConditions\",\n modelProperties: {\n ifModifiedSince: {\n xmlName: \"ifModifiedSince\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n ifUnmodifiedSince: {\n xmlName: \"ifUnmodifiedSince\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n ifMatch: {\n xmlName: \"ifMatch\",\n type: {\n name: \"String\"\n }\n },\n ifNoneMatch: {\n xmlName: \"ifNoneMatch\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const DirectoryHttpHeaders: msRest.CompositeMapper = {\n xmlName: \"directory-http-headers\",\n type: {\n name: \"Composite\",\n className: \"DirectoryHttpHeaders\",\n modelProperties: {\n cacheControl: {\n xmlName: \"cacheControl\",\n type: {\n name: \"String\"\n }\n },\n contentType: {\n xmlName: \"contentType\",\n type: {\n name: \"String\"\n }\n },\n contentEncoding: {\n xmlName: \"contentEncoding\",\n type: {\n name: \"String\"\n }\n },\n contentLanguage: {\n xmlName: \"contentLanguage\",\n type: {\n name: \"String\"\n }\n },\n contentDisposition: {\n xmlName: \"contentDisposition\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const SourceModifiedAccessConditions: msRest.CompositeMapper = {\n xmlName: \"source-modified-access-conditions\",\n type: {\n name: \"Composite\",\n className: \"SourceModifiedAccessConditions\",\n modelProperties: {\n sourceIfModifiedSince: {\n xmlName: \"sourceIfModifiedSince\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n sourceIfUnmodifiedSince: {\n xmlName: \"sourceIfUnmodifiedSince\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n sourceIfMatch: {\n xmlName: \"sourceIfMatch\",\n type: {\n name: \"String\"\n }\n },\n sourceIfNoneMatch: {\n xmlName: \"sourceIfNoneMatch\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const CpkInfo: msRest.CompositeMapper = {\n xmlName: \"cpk-info\",\n type: {\n name: \"Composite\",\n className: \"CpkInfo\",\n modelProperties: {\n encryptionKey: {\n xmlName: \"encryptionKey\",\n type: {\n name: \"String\"\n }\n },\n encryptionKeySha256: {\n xmlName: \"encryptionKeySha256\",\n type: {\n name: \"String\"\n }\n },\n encryptionAlgorithm: {\n xmlName: \"encryptionAlgorithm\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"AES256\"\n ]\n }\n }\n }\n }\n};\n\nexport const BlobHTTPHeaders: msRest.CompositeMapper = {\n xmlName: \"blob-HTTP-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobHTTPHeaders\",\n modelProperties: {\n blobCacheControl: {\n xmlName: \"blobCacheControl\",\n type: {\n name: \"String\"\n }\n },\n blobContentType: {\n xmlName: \"blobContentType\",\n type: {\n name: \"String\"\n }\n },\n blobContentMD5: {\n xmlName: \"blobContentMD5\",\n type: {\n name: \"ByteArray\"\n }\n },\n blobContentEncoding: {\n xmlName: \"blobContentEncoding\",\n type: {\n name: \"String\"\n }\n },\n blobContentLanguage: {\n xmlName: \"blobContentLanguage\",\n type: {\n name: \"String\"\n }\n },\n blobContentDisposition: {\n xmlName: \"blobContentDisposition\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const SequenceNumberAccessConditions: msRest.CompositeMapper = {\n xmlName: \"sequence-number-access-conditions\",\n type: {\n name: \"Composite\",\n className: \"SequenceNumberAccessConditions\",\n modelProperties: {\n ifSequenceNumberLessThanOrEqualTo: {\n xmlName: \"ifSequenceNumberLessThanOrEqualTo\",\n type: {\n name: \"Number\"\n }\n },\n ifSequenceNumberLessThan: {\n xmlName: \"ifSequenceNumberLessThan\",\n type: {\n name: \"Number\"\n }\n },\n ifSequenceNumberEqualTo: {\n xmlName: \"ifSequenceNumberEqualTo\",\n type: {\n name: \"Number\"\n }\n }\n }\n }\n};\n\nexport const AppendPositionAccessConditions: msRest.CompositeMapper = {\n xmlName: \"append-position-access-conditions\",\n type: {\n name: \"Composite\",\n className: \"AppendPositionAccessConditions\",\n modelProperties: {\n maxSize: {\n xmlName: \"maxSize\",\n type: {\n name: \"Number\"\n }\n },\n appendPosition: {\n xmlName: \"appendPosition\",\n type: {\n name: \"Number\"\n }\n }\n }\n }\n};\n\nexport const ServiceSetPropertiesHeaders: msRest.CompositeMapper = {\n serializedName: \"service-setproperties-headers\",\n type: {\n name: \"Composite\",\n className: \"ServiceSetPropertiesHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ServiceGetPropertiesHeaders: msRest.CompositeMapper = {\n serializedName: \"service-getproperties-headers\",\n type: {\n name: \"Composite\",\n className: \"ServiceGetPropertiesHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ServiceGetStatisticsHeaders: msRest.CompositeMapper = {\n serializedName: \"service-getstatistics-headers\",\n type: {\n name: \"Composite\",\n className: \"ServiceGetStatisticsHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ServiceListContainersSegmentHeaders: msRest.CompositeMapper = {\n serializedName: \"service-listcontainerssegment-headers\",\n type: {\n name: \"Composite\",\n className: \"ServiceListContainersSegmentHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ServiceGetUserDelegationKeyHeaders: msRest.CompositeMapper = {\n serializedName: \"service-getuserdelegationkey-headers\",\n type: {\n name: \"Composite\",\n className: \"ServiceGetUserDelegationKeyHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ServiceGetAccountInfoHeaders: msRest.CompositeMapper = {\n serializedName: \"service-getaccountinfo-headers\",\n type: {\n name: \"Composite\",\n className: \"ServiceGetAccountInfoHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n skuName: {\n serializedName: \"x-ms-sku-name\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"Standard_LRS\",\n \"Standard_GRS\",\n \"Standard_RAGRS\",\n \"Standard_ZRS\",\n \"Premium_LRS\"\n ]\n }\n },\n accountKind: {\n serializedName: \"x-ms-account-kind\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"Storage\",\n \"BlobStorage\",\n \"StorageV2\"\n ]\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ServiceSubmitBatchHeaders: msRest.CompositeMapper = {\n serializedName: \"service-submitbatch-headers\",\n type: {\n name: \"Composite\",\n className: \"ServiceSubmitBatchHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n contentType: {\n serializedName: \"content-type\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ContainerCreateHeaders: msRest.CompositeMapper = {\n serializedName: \"container-create-headers\",\n type: {\n name: \"Composite\",\n className: \"ContainerCreateHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ContainerGetPropertiesHeaders: msRest.CompositeMapper = {\n serializedName: \"container-getproperties-headers\",\n type: {\n name: \"Composite\",\n className: \"ContainerGetPropertiesHeaders\",\n modelProperties: {\n metadata: {\n serializedName: \"x-ms-meta\",\n type: {\n name: \"Dictionary\",\n value: {\n type: {\n name: \"String\"\n }\n }\n },\n headerCollectionPrefix: \"x-ms-meta-\"\n },\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n leaseDuration: {\n serializedName: \"x-ms-lease-duration\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"infinite\",\n \"fixed\"\n ]\n }\n },\n leaseState: {\n serializedName: \"x-ms-lease-state\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"available\",\n \"leased\",\n \"expired\",\n \"breaking\",\n \"broken\"\n ]\n }\n },\n leaseStatus: {\n serializedName: \"x-ms-lease-status\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"locked\",\n \"unlocked\"\n ]\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n blobPublicAccess: {\n serializedName: \"x-ms-blob-public-access\",\n type: {\n name: \"String\"\n }\n },\n hasImmutabilityPolicy: {\n serializedName: \"x-ms-has-immutability-policy\",\n type: {\n name: \"Boolean\"\n }\n },\n hasLegalHold: {\n serializedName: \"x-ms-has-legal-hold\",\n type: {\n name: \"Boolean\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ContainerDeleteHeaders: msRest.CompositeMapper = {\n serializedName: \"container-delete-headers\",\n type: {\n name: \"Composite\",\n className: \"ContainerDeleteHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ContainerSetMetadataHeaders: msRest.CompositeMapper = {\n serializedName: \"container-setmetadata-headers\",\n type: {\n name: \"Composite\",\n className: \"ContainerSetMetadataHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ContainerGetAccessPolicyHeaders: msRest.CompositeMapper = {\n serializedName: \"container-getaccesspolicy-headers\",\n type: {\n name: \"Composite\",\n className: \"ContainerGetAccessPolicyHeaders\",\n modelProperties: {\n blobPublicAccess: {\n serializedName: \"x-ms-blob-public-access\",\n type: {\n name: \"String\"\n }\n },\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ContainerSetAccessPolicyHeaders: msRest.CompositeMapper = {\n serializedName: \"container-setaccesspolicy-headers\",\n type: {\n name: \"Composite\",\n className: \"ContainerSetAccessPolicyHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ContainerAcquireLeaseHeaders: msRest.CompositeMapper = {\n serializedName: \"container-acquirelease-headers\",\n type: {\n name: \"Composite\",\n className: \"ContainerAcquireLeaseHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n leaseId: {\n serializedName: \"x-ms-lease-id\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ContainerReleaseLeaseHeaders: msRest.CompositeMapper = {\n serializedName: \"container-releaselease-headers\",\n type: {\n name: \"Composite\",\n className: \"ContainerReleaseLeaseHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ContainerRenewLeaseHeaders: msRest.CompositeMapper = {\n serializedName: \"container-renewlease-headers\",\n type: {\n name: \"Composite\",\n className: \"ContainerRenewLeaseHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n leaseId: {\n serializedName: \"x-ms-lease-id\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ContainerBreakLeaseHeaders: msRest.CompositeMapper = {\n serializedName: \"container-breaklease-headers\",\n type: {\n name: \"Composite\",\n className: \"ContainerBreakLeaseHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n leaseTime: {\n serializedName: \"x-ms-lease-time\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ContainerChangeLeaseHeaders: msRest.CompositeMapper = {\n serializedName: \"container-changelease-headers\",\n type: {\n name: \"Composite\",\n className: \"ContainerChangeLeaseHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n leaseId: {\n serializedName: \"x-ms-lease-id\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ContainerListBlobFlatSegmentHeaders: msRest.CompositeMapper = {\n serializedName: \"container-listblobflatsegment-headers\",\n type: {\n name: \"Composite\",\n className: \"ContainerListBlobFlatSegmentHeaders\",\n modelProperties: {\n contentType: {\n serializedName: \"content-type\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ContainerListBlobHierarchySegmentHeaders: msRest.CompositeMapper = {\n serializedName: \"container-listblobhierarchysegment-headers\",\n type: {\n name: \"Composite\",\n className: \"ContainerListBlobHierarchySegmentHeaders\",\n modelProperties: {\n contentType: {\n serializedName: \"content-type\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const ContainerGetAccountInfoHeaders: msRest.CompositeMapper = {\n serializedName: \"container-getaccountinfo-headers\",\n type: {\n name: \"Composite\",\n className: \"ContainerGetAccountInfoHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n skuName: {\n serializedName: \"x-ms-sku-name\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"Standard_LRS\",\n \"Standard_GRS\",\n \"Standard_RAGRS\",\n \"Standard_ZRS\",\n \"Premium_LRS\"\n ]\n }\n },\n accountKind: {\n serializedName: \"x-ms-account-kind\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"Storage\",\n \"BlobStorage\",\n \"StorageV2\"\n ]\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const DirectoryCreateHeaders: msRest.CompositeMapper = {\n serializedName: \"directory-create-headers\",\n type: {\n name: \"Composite\",\n className: \"DirectoryCreateHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n contentLength: {\n serializedName: \"content-length\",\n type: {\n name: \"Number\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\n\nexport const DirectoryRenameHeaders: msRest.CompositeMapper = {\n serializedName: \"directory-rename-headers\",\n type: {\n name: \"Composite\",\n className: \"DirectoryRenameHeaders\",\n modelProperties: {\n marker: {\n serializedName: \"x-ms-continuation\",\n type: {\n name: \"String\"\n }\n },\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n contentLength: {\n serializedName: \"content-length\",\n type: {\n name: \"Number\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\n\nexport const DirectoryDeleteHeaders: msRest.CompositeMapper = {\n serializedName: \"directory-delete-headers\",\n type: {\n name: \"Composite\",\n className: \"DirectoryDeleteHeaders\",\n modelProperties: {\n marker: {\n serializedName: \"x-ms-continuation\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\n\nexport const DirectorySetAccessControlHeaders: msRest.CompositeMapper = {\n serializedName: \"directory-setaccesscontrol-headers\",\n type: {\n name: \"Composite\",\n className: \"DirectorySetAccessControlHeaders\",\n modelProperties: {\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const DirectoryGetAccessControlHeaders: msRest.CompositeMapper = {\n serializedName: \"directory-getaccesscontrol-headers\",\n type: {\n name: \"Composite\",\n className: \"DirectoryGetAccessControlHeaders\",\n modelProperties: {\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n xMsOwner: {\n serializedName: \"x-ms-owner\",\n type: {\n name: \"String\"\n }\n },\n xMsGroup: {\n serializedName: \"x-ms-group\",\n type: {\n name: \"String\"\n }\n },\n xMsPermissions: {\n serializedName: \"x-ms-permissions\",\n type: {\n name: \"String\"\n }\n },\n xMsAcl: {\n serializedName: \"x-ms-acl\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobDownloadHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-download-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobDownloadHeaders\",\n modelProperties: {\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n metadata: {\n serializedName: \"x-ms-meta\",\n type: {\n name: \"Dictionary\",\n value: {\n type: {\n name: \"String\"\n }\n }\n },\n headerCollectionPrefix: \"x-ms-meta-\"\n },\n contentLength: {\n serializedName: \"content-length\",\n type: {\n name: \"Number\"\n }\n },\n contentType: {\n serializedName: \"content-type\",\n type: {\n name: \"String\"\n }\n },\n contentRange: {\n serializedName: \"content-range\",\n type: {\n name: \"String\"\n }\n },\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n contentEncoding: {\n serializedName: \"content-encoding\",\n type: {\n name: \"String\"\n }\n },\n cacheControl: {\n serializedName: \"cache-control\",\n type: {\n name: \"String\"\n }\n },\n contentDisposition: {\n serializedName: \"content-disposition\",\n type: {\n name: \"String\"\n }\n },\n contentLanguage: {\n serializedName: \"content-language\",\n type: {\n name: \"String\"\n }\n },\n blobSequenceNumber: {\n serializedName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n },\n blobType: {\n serializedName: \"x-ms-blob-type\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"BlockBlob\",\n \"PageBlob\",\n \"AppendBlob\"\n ]\n }\n },\n copyCompletionTime: {\n serializedName: \"x-ms-copy-completion-time\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n copyStatusDescription: {\n serializedName: \"x-ms-copy-status-description\",\n type: {\n name: \"String\"\n }\n },\n copyId: {\n serializedName: \"x-ms-copy-id\",\n type: {\n name: \"String\"\n }\n },\n copyProgress: {\n serializedName: \"x-ms-copy-progress\",\n type: {\n name: \"String\"\n }\n },\n copySource: {\n serializedName: \"x-ms-copy-source\",\n type: {\n name: \"String\"\n }\n },\n copyStatus: {\n serializedName: \"x-ms-copy-status\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"pending\",\n \"success\",\n \"aborted\",\n \"failed\"\n ]\n }\n },\n leaseDuration: {\n serializedName: \"x-ms-lease-duration\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"infinite\",\n \"fixed\"\n ]\n }\n },\n leaseState: {\n serializedName: \"x-ms-lease-state\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"available\",\n \"leased\",\n \"expired\",\n \"breaking\",\n \"broken\"\n ]\n }\n },\n leaseStatus: {\n serializedName: \"x-ms-lease-status\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"locked\",\n \"unlocked\"\n ]\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n acceptRanges: {\n serializedName: \"accept-ranges\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n blobCommittedBlockCount: {\n serializedName: \"x-ms-blob-committed-block-count\",\n type: {\n name: \"Number\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n blobContentMD5: {\n serializedName: \"x-ms-blob-content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n contentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobGetPropertiesHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-getproperties-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobGetPropertiesHeaders\",\n modelProperties: {\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n creationTime: {\n serializedName: \"x-ms-creation-time\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n metadata: {\n serializedName: \"x-ms-meta\",\n type: {\n name: \"Dictionary\",\n value: {\n type: {\n name: \"String\"\n }\n }\n },\n headerCollectionPrefix: \"x-ms-meta-\"\n },\n blobType: {\n serializedName: \"x-ms-blob-type\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"BlockBlob\",\n \"PageBlob\",\n \"AppendBlob\"\n ]\n }\n },\n copyCompletionTime: {\n serializedName: \"x-ms-copy-completion-time\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n copyStatusDescription: {\n serializedName: \"x-ms-copy-status-description\",\n type: {\n name: \"String\"\n }\n },\n copyId: {\n serializedName: \"x-ms-copy-id\",\n type: {\n name: \"String\"\n }\n },\n copyProgress: {\n serializedName: \"x-ms-copy-progress\",\n type: {\n name: \"String\"\n }\n },\n copySource: {\n serializedName: \"x-ms-copy-source\",\n type: {\n name: \"String\"\n }\n },\n copyStatus: {\n serializedName: \"x-ms-copy-status\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"pending\",\n \"success\",\n \"aborted\",\n \"failed\"\n ]\n }\n },\n isIncrementalCopy: {\n serializedName: \"x-ms-incremental-copy\",\n type: {\n name: \"Boolean\"\n }\n },\n destinationSnapshot: {\n serializedName: \"x-ms-copy-destination-snapshot\",\n type: {\n name: \"String\"\n }\n },\n leaseDuration: {\n serializedName: \"x-ms-lease-duration\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"infinite\",\n \"fixed\"\n ]\n }\n },\n leaseState: {\n serializedName: \"x-ms-lease-state\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"available\",\n \"leased\",\n \"expired\",\n \"breaking\",\n \"broken\"\n ]\n }\n },\n leaseStatus: {\n serializedName: \"x-ms-lease-status\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"locked\",\n \"unlocked\"\n ]\n }\n },\n contentLength: {\n serializedName: \"content-length\",\n type: {\n name: \"Number\"\n }\n },\n contentType: {\n serializedName: \"content-type\",\n type: {\n name: \"String\"\n }\n },\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n contentEncoding: {\n serializedName: \"content-encoding\",\n type: {\n name: \"String\"\n }\n },\n contentDisposition: {\n serializedName: \"content-disposition\",\n type: {\n name: \"String\"\n }\n },\n contentLanguage: {\n serializedName: \"content-language\",\n type: {\n name: \"String\"\n }\n },\n cacheControl: {\n serializedName: \"cache-control\",\n type: {\n name: \"String\"\n }\n },\n blobSequenceNumber: {\n serializedName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n acceptRanges: {\n serializedName: \"accept-ranges\",\n type: {\n name: \"String\"\n }\n },\n blobCommittedBlockCount: {\n serializedName: \"x-ms-blob-committed-block-count\",\n type: {\n name: \"Number\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n accessTier: {\n serializedName: \"x-ms-access-tier\",\n type: {\n name: \"String\"\n }\n },\n accessTierInferred: {\n serializedName: \"x-ms-access-tier-inferred\",\n type: {\n name: \"Boolean\"\n }\n },\n archiveStatus: {\n serializedName: \"x-ms-archive-status\",\n type: {\n name: \"String\"\n }\n },\n accessTierChangeTime: {\n serializedName: \"x-ms-access-tier-change-time\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobDeleteHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-delete-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobDeleteHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobSetAccessControlHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-setaccesscontrol-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobSetAccessControlHeaders\",\n modelProperties: {\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobGetAccessControlHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-getaccesscontrol-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobGetAccessControlHeaders\",\n modelProperties: {\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n xMsOwner: {\n serializedName: \"x-ms-owner\",\n type: {\n name: \"String\"\n }\n },\n xMsGroup: {\n serializedName: \"x-ms-group\",\n type: {\n name: \"String\"\n }\n },\n xMsPermissions: {\n serializedName: \"x-ms-permissions\",\n type: {\n name: \"String\"\n }\n },\n xMsAcl: {\n serializedName: \"x-ms-acl\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobRenameHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-rename-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobRenameHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n contentLength: {\n serializedName: \"content-length\",\n type: {\n name: \"Number\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n }\n }\n};\n\nexport const PageBlobCreateHeaders: msRest.CompositeMapper = {\n serializedName: \"pageblob-create-headers\",\n type: {\n name: \"Composite\",\n className: \"PageBlobCreateHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const AppendBlobCreateHeaders: msRest.CompositeMapper = {\n serializedName: \"appendblob-create-headers\",\n type: {\n name: \"Composite\",\n className: \"AppendBlobCreateHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlockBlobUploadHeaders: msRest.CompositeMapper = {\n serializedName: \"blockblob-upload-headers\",\n type: {\n name: \"Composite\",\n className: \"BlockBlobUploadHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobUndeleteHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-undelete-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobUndeleteHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobSetHTTPHeadersHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-sethttpheaders-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobSetHTTPHeadersHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n blobSequenceNumber: {\n serializedName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobSetMetadataHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-setmetadata-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobSetMetadataHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobAcquireLeaseHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-acquirelease-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobAcquireLeaseHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n leaseId: {\n serializedName: \"x-ms-lease-id\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobReleaseLeaseHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-releaselease-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobReleaseLeaseHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobRenewLeaseHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-renewlease-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobRenewLeaseHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n leaseId: {\n serializedName: \"x-ms-lease-id\",\n type: {\n name: \"String\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobChangeLeaseHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-changelease-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobChangeLeaseHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n leaseId: {\n serializedName: \"x-ms-lease-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobBreakLeaseHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-breaklease-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobBreakLeaseHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n leaseTime: {\n serializedName: \"x-ms-lease-time\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobCreateSnapshotHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-createsnapshot-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobCreateSnapshotHeaders\",\n modelProperties: {\n snapshot: {\n serializedName: \"x-ms-snapshot\",\n type: {\n name: \"String\"\n }\n },\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobStartCopyFromURLHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-startcopyfromurl-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobStartCopyFromURLHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n copyId: {\n serializedName: \"x-ms-copy-id\",\n type: {\n name: \"String\"\n }\n },\n copyStatus: {\n serializedName: \"x-ms-copy-status\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"pending\",\n \"success\",\n \"aborted\",\n \"failed\"\n ]\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobCopyFromURLHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-copyfromurl-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobCopyFromURLHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n copyId: {\n serializedName: \"x-ms-copy-id\",\n type: {\n name: \"String\"\n }\n },\n copyStatus: {\n serializedName: \"x-ms-copy-status\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"success\"\n ]\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobAbortCopyFromURLHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-abortcopyfromurl-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobAbortCopyFromURLHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobSetTierHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-settier-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobSetTierHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlobGetAccountInfoHeaders: msRest.CompositeMapper = {\n serializedName: \"blob-getaccountinfo-headers\",\n type: {\n name: \"Composite\",\n className: \"BlobGetAccountInfoHeaders\",\n modelProperties: {\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n skuName: {\n serializedName: \"x-ms-sku-name\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"Standard_LRS\",\n \"Standard_GRS\",\n \"Standard_RAGRS\",\n \"Standard_ZRS\",\n \"Premium_LRS\"\n ]\n }\n },\n accountKind: {\n serializedName: \"x-ms-account-kind\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"Storage\",\n \"BlobStorage\",\n \"StorageV2\"\n ]\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlockBlobStageBlockHeaders: msRest.CompositeMapper = {\n serializedName: \"blockblob-stageblock-headers\",\n type: {\n name: \"Composite\",\n className: \"BlockBlobStageBlockHeaders\",\n modelProperties: {\n contentMD5: {\n serializedName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n xMsContentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlockBlobStageBlockFromURLHeaders: msRest.CompositeMapper = {\n serializedName: \"blockblob-stageblockfromurl-headers\",\n type: {\n name: \"Composite\",\n className: \"BlockBlobStageBlockFromURLHeaders\",\n modelProperties: {\n contentMD5: {\n serializedName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n xMsContentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlockBlobCommitBlockListHeaders: msRest.CompositeMapper = {\n serializedName: \"blockblob-commitblocklist-headers\",\n type: {\n name: \"Composite\",\n className: \"BlockBlobCommitBlockListHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n xMsContentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const BlockBlobGetBlockListHeaders: msRest.CompositeMapper = {\n serializedName: \"blockblob-getblocklist-headers\",\n type: {\n name: \"Composite\",\n className: \"BlockBlobGetBlockListHeaders\",\n modelProperties: {\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n contentType: {\n serializedName: \"content-type\",\n type: {\n name: \"String\"\n }\n },\n blobContentLength: {\n serializedName: \"x-ms-blob-content-length\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const PageBlobUploadPagesHeaders: msRest.CompositeMapper = {\n serializedName: \"pageblob-uploadpages-headers\",\n type: {\n name: \"Composite\",\n className: \"PageBlobUploadPagesHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n xMsContentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n },\n blobSequenceNumber: {\n serializedName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const PageBlobClearPagesHeaders: msRest.CompositeMapper = {\n serializedName: \"pageblob-clearpages-headers\",\n type: {\n name: \"Composite\",\n className: \"PageBlobClearPagesHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n xMsContentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n },\n blobSequenceNumber: {\n serializedName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const PageBlobUploadPagesFromURLHeaders: msRest.CompositeMapper = {\n serializedName: \"pageblob-uploadpagesfromurl-headers\",\n type: {\n name: \"Composite\",\n className: \"PageBlobUploadPagesFromURLHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n xMsContentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n },\n blobSequenceNumber: {\n serializedName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const PageBlobGetPageRangesHeaders: msRest.CompositeMapper = {\n serializedName: \"pageblob-getpageranges-headers\",\n type: {\n name: \"Composite\",\n className: \"PageBlobGetPageRangesHeaders\",\n modelProperties: {\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n blobContentLength: {\n serializedName: \"x-ms-blob-content-length\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const PageBlobGetPageRangesDiffHeaders: msRest.CompositeMapper = {\n serializedName: \"pageblob-getpagerangesdiff-headers\",\n type: {\n name: \"Composite\",\n className: \"PageBlobGetPageRangesDiffHeaders\",\n modelProperties: {\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n blobContentLength: {\n serializedName: \"x-ms-blob-content-length\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const PageBlobResizeHeaders: msRest.CompositeMapper = {\n serializedName: \"pageblob-resize-headers\",\n type: {\n name: \"Composite\",\n className: \"PageBlobResizeHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n blobSequenceNumber: {\n serializedName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const PageBlobUpdateSequenceNumberHeaders: msRest.CompositeMapper = {\n serializedName: \"pageblob-updatesequencenumber-headers\",\n type: {\n name: \"Composite\",\n className: \"PageBlobUpdateSequenceNumberHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n blobSequenceNumber: {\n serializedName: \"x-ms-blob-sequence-number\",\n type: {\n name: \"Number\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const PageBlobCopyIncrementalHeaders: msRest.CompositeMapper = {\n serializedName: \"pageblob-copyincremental-headers\",\n type: {\n name: \"Composite\",\n className: \"PageBlobCopyIncrementalHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n copyId: {\n serializedName: \"x-ms-copy-id\",\n type: {\n name: \"String\"\n }\n },\n copyStatus: {\n serializedName: \"x-ms-copy-status\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"pending\",\n \"success\",\n \"aborted\",\n \"failed\"\n ]\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const AppendBlobAppendBlockHeaders: msRest.CompositeMapper = {\n serializedName: \"appendblob-appendblock-headers\",\n type: {\n name: \"Composite\",\n className: \"AppendBlobAppendBlockHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n xMsContentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n },\n clientRequestId: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n blobAppendOffset: {\n serializedName: \"x-ms-blob-append-offset\",\n type: {\n name: \"String\"\n }\n },\n blobCommittedBlockCount: {\n serializedName: \"x-ms-blob-committed-block-count\",\n type: {\n name: \"Number\"\n }\n },\n isServerEncrypted: {\n serializedName: \"x-ms-request-server-encrypted\",\n type: {\n name: \"Boolean\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n\nexport const AppendBlobAppendBlockFromUrlHeaders: msRest.CompositeMapper = {\n serializedName: \"appendblob-appendblockfromurl-headers\",\n type: {\n name: \"Composite\",\n className: \"AppendBlobAppendBlockFromUrlHeaders\",\n modelProperties: {\n eTag: {\n serializedName: \"etag\",\n type: {\n name: \"String\"\n }\n },\n lastModified: {\n serializedName: \"last-modified\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n contentMD5: {\n serializedName: \"content-md5\",\n type: {\n name: \"ByteArray\"\n }\n },\n xMsContentCrc64: {\n serializedName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n },\n requestId: {\n serializedName: \"x-ms-request-id\",\n type: {\n name: \"String\"\n }\n },\n version: {\n serializedName: \"x-ms-version\",\n type: {\n name: \"String\"\n }\n },\n date: {\n serializedName: \"date\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n },\n blobAppendOffset: {\n serializedName: \"x-ms-blob-append-offset\",\n type: {\n name: \"String\"\n }\n },\n blobCommittedBlockCount: {\n serializedName: \"x-ms-blob-committed-block-count\",\n type: {\n name: \"Number\"\n }\n },\n encryptionKeySha256: {\n serializedName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n },\n errorCode: {\n serializedName: \"x-ms-error-code\",\n type: {\n name: \"String\"\n }\n }\n }\n }\n};\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for\n * license information.\n *\n * Code generated by Microsoft (R) AutoRest Code Generator.\n * Changes may cause incorrect behavior and will be lost if the code is\n * regenerated.\n */\n\nimport * as msRest from \"@azure/ms-rest-js\";\n\nexport const access: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"access\"\n ],\n mapper: {\n serializedName: \"x-ms-blob-public-access\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const action0: msRest.OperationParameter = {\n parameterPath: \"action\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"x-ms-lease-action\",\n defaultValue: 'acquire',\n type: {\n name: \"String\"\n }\n }\n};\nexport const action1: msRest.OperationParameter = {\n parameterPath: \"action\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"x-ms-lease-action\",\n defaultValue: 'release',\n type: {\n name: \"String\"\n }\n }\n};\nexport const action2: msRest.OperationParameter = {\n parameterPath: \"action\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"x-ms-lease-action\",\n defaultValue: 'renew',\n type: {\n name: \"String\"\n }\n }\n};\nexport const action3: msRest.OperationParameter = {\n parameterPath: \"action\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"x-ms-lease-action\",\n defaultValue: 'break',\n type: {\n name: \"String\"\n }\n }\n};\nexport const action4: msRest.OperationParameter = {\n parameterPath: \"action\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"x-ms-lease-action\",\n defaultValue: 'change',\n type: {\n name: \"String\"\n }\n }\n};\nexport const action5: msRest.OperationQueryParameter = {\n parameterPath: \"action\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"action\",\n defaultValue: 'setAccessControl',\n type: {\n name: \"String\"\n }\n }\n};\nexport const action6: msRest.OperationQueryParameter = {\n parameterPath: \"action\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"action\",\n defaultValue: 'getAccessControl',\n type: {\n name: \"String\"\n }\n }\n};\nexport const appendPosition: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"appendPositionAccessConditions\",\n \"appendPosition\"\n ],\n mapper: {\n serializedName: \"x-ms-blob-condition-appendpos\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const blobCacheControl: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"blobHTTPHeaders\",\n \"blobCacheControl\"\n ],\n mapper: {\n serializedName: \"x-ms-blob-cache-control\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const blobContentDisposition: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"blobHTTPHeaders\",\n \"blobContentDisposition\"\n ],\n mapper: {\n serializedName: \"x-ms-blob-content-disposition\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const blobContentEncoding: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"blobHTTPHeaders\",\n \"blobContentEncoding\"\n ],\n mapper: {\n serializedName: \"x-ms-blob-content-encoding\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const blobContentLanguage: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"blobHTTPHeaders\",\n \"blobContentLanguage\"\n ],\n mapper: {\n serializedName: \"x-ms-blob-content-language\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const blobContentLength: msRest.OperationParameter = {\n parameterPath: \"blobContentLength\",\n mapper: {\n required: true,\n serializedName: \"x-ms-blob-content-length\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const blobContentMD5: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"blobHTTPHeaders\",\n \"blobContentMD5\"\n ],\n mapper: {\n serializedName: \"x-ms-blob-content-md5\",\n type: {\n name: \"ByteArray\"\n }\n }\n};\nexport const blobContentType: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"blobHTTPHeaders\",\n \"blobContentType\"\n ],\n mapper: {\n serializedName: \"x-ms-blob-content-type\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const blobSequenceNumber: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"blobSequenceNumber\"\n ],\n mapper: {\n serializedName: \"x-ms-blob-sequence-number\",\n defaultValue: 0,\n type: {\n name: \"Number\"\n }\n }\n};\nexport const blobType0: msRest.OperationParameter = {\n parameterPath: \"blobType\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"x-ms-blob-type\",\n defaultValue: 'PageBlob',\n type: {\n name: \"String\"\n }\n }\n};\nexport const blobType1: msRest.OperationParameter = {\n parameterPath: \"blobType\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"x-ms-blob-type\",\n defaultValue: 'AppendBlob',\n type: {\n name: \"String\"\n }\n }\n};\nexport const blobType2: msRest.OperationParameter = {\n parameterPath: \"blobType\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"x-ms-blob-type\",\n defaultValue: 'BlockBlob',\n type: {\n name: \"String\"\n }\n }\n};\nexport const blockId: msRest.OperationQueryParameter = {\n parameterPath: \"blockId\",\n mapper: {\n required: true,\n serializedName: \"blockid\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const breakPeriod: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"breakPeriod\"\n ],\n mapper: {\n serializedName: \"x-ms-lease-break-period\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const cacheControl: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"directoryHttpHeaders\",\n \"cacheControl\"\n ],\n mapper: {\n serializedName: \"x-ms-cache-control\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp0: msRest.OperationQueryParameter = {\n parameterPath: \"comp\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"comp\",\n defaultValue: 'properties',\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp1: msRest.OperationQueryParameter = {\n parameterPath: \"comp\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"comp\",\n defaultValue: 'stats',\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp10: msRest.OperationQueryParameter = {\n parameterPath: \"comp\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"comp\",\n defaultValue: 'copy',\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp11: msRest.OperationQueryParameter = {\n parameterPath: \"comp\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"comp\",\n defaultValue: 'tier',\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp12: msRest.OperationQueryParameter = {\n parameterPath: \"comp\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"comp\",\n defaultValue: 'page',\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp13: msRest.OperationQueryParameter = {\n parameterPath: \"comp\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"comp\",\n defaultValue: 'pagelist',\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp14: msRest.OperationQueryParameter = {\n parameterPath: \"comp\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"comp\",\n defaultValue: 'incrementalcopy',\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp15: msRest.OperationQueryParameter = {\n parameterPath: \"comp\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"comp\",\n defaultValue: 'appendblock',\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp16: msRest.OperationQueryParameter = {\n parameterPath: \"comp\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"comp\",\n defaultValue: 'block',\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp17: msRest.OperationQueryParameter = {\n parameterPath: \"comp\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"comp\",\n defaultValue: 'blocklist',\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp2: msRest.OperationQueryParameter = {\n parameterPath: \"comp\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"comp\",\n defaultValue: 'list',\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp3: msRest.OperationQueryParameter = {\n parameterPath: \"comp\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"comp\",\n defaultValue: 'userdelegationkey',\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp4: msRest.OperationQueryParameter = {\n parameterPath: \"comp\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"comp\",\n defaultValue: 'batch',\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp5: msRest.OperationQueryParameter = {\n parameterPath: \"comp\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"comp\",\n defaultValue: 'metadata',\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp6: msRest.OperationQueryParameter = {\n parameterPath: \"comp\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"comp\",\n defaultValue: 'acl',\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp7: msRest.OperationQueryParameter = {\n parameterPath: \"comp\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"comp\",\n defaultValue: 'lease',\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp8: msRest.OperationQueryParameter = {\n parameterPath: \"comp\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"comp\",\n defaultValue: 'undelete',\n type: {\n name: \"String\"\n }\n }\n};\nexport const comp9: msRest.OperationQueryParameter = {\n parameterPath: \"comp\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"comp\",\n defaultValue: 'snapshot',\n type: {\n name: \"String\"\n }\n }\n};\nexport const contentDisposition: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"directoryHttpHeaders\",\n \"contentDisposition\"\n ],\n mapper: {\n serializedName: \"x-ms-content-disposition\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const contentEncoding: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"directoryHttpHeaders\",\n \"contentEncoding\"\n ],\n mapper: {\n serializedName: \"x-ms-content-encoding\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const contentLanguage: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"directoryHttpHeaders\",\n \"contentLanguage\"\n ],\n mapper: {\n serializedName: \"x-ms-content-language\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const contentLength: msRest.OperationParameter = {\n parameterPath: \"contentLength\",\n mapper: {\n required: true,\n serializedName: \"Content-Length\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const contentType: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"directoryHttpHeaders\",\n \"contentType\"\n ],\n mapper: {\n serializedName: \"x-ms-content-type\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const copyActionAbortConstant: msRest.OperationParameter = {\n parameterPath: \"copyActionAbortConstant\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"x-ms-copy-action\",\n defaultValue: 'abort',\n type: {\n name: \"String\"\n }\n }\n};\nexport const copyId: msRest.OperationQueryParameter = {\n parameterPath: \"copyId\",\n mapper: {\n required: true,\n serializedName: \"copyid\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const copySource: msRest.OperationParameter = {\n parameterPath: \"copySource\",\n mapper: {\n required: true,\n serializedName: \"x-ms-copy-source\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const deleteSnapshots: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"deleteSnapshots\"\n ],\n mapper: {\n serializedName: \"x-ms-delete-snapshots\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"include\",\n \"only\"\n ]\n }\n }\n};\nexport const delimiter: msRest.OperationQueryParameter = {\n parameterPath: \"delimiter\",\n mapper: {\n required: true,\n serializedName: \"delimiter\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const directoryProperties: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"directoryProperties\"\n ],\n mapper: {\n serializedName: \"x-ms-properties\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const duration: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"duration\"\n ],\n mapper: {\n serializedName: \"x-ms-lease-duration\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const encryptionAlgorithm: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"cpkInfo\",\n \"encryptionAlgorithm\"\n ],\n mapper: {\n serializedName: \"x-ms-encryption-algorithm\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"AES256\"\n ]\n }\n }\n};\nexport const encryptionKey: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"cpkInfo\",\n \"encryptionKey\"\n ],\n mapper: {\n serializedName: \"x-ms-encryption-key\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const encryptionKeySha256: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"cpkInfo\",\n \"encryptionKeySha256\"\n ],\n mapper: {\n serializedName: \"x-ms-encryption-key-sha256\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const group: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"group\"\n ],\n mapper: {\n serializedName: \"x-ms-group\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const ifMatch: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"modifiedAccessConditions\",\n \"ifMatch\"\n ],\n mapper: {\n serializedName: \"If-Match\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const ifModifiedSince: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"modifiedAccessConditions\",\n \"ifModifiedSince\"\n ],\n mapper: {\n serializedName: \"If-Modified-Since\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n};\nexport const ifNoneMatch: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"modifiedAccessConditions\",\n \"ifNoneMatch\"\n ],\n mapper: {\n serializedName: \"If-None-Match\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const ifSequenceNumberEqualTo: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"sequenceNumberAccessConditions\",\n \"ifSequenceNumberEqualTo\"\n ],\n mapper: {\n serializedName: \"x-ms-if-sequence-number-eq\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const ifSequenceNumberLessThan: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"sequenceNumberAccessConditions\",\n \"ifSequenceNumberLessThan\"\n ],\n mapper: {\n serializedName: \"x-ms-if-sequence-number-lt\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const ifSequenceNumberLessThanOrEqualTo: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"sequenceNumberAccessConditions\",\n \"ifSequenceNumberLessThanOrEqualTo\"\n ],\n mapper: {\n serializedName: \"x-ms-if-sequence-number-le\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const ifUnmodifiedSince: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"modifiedAccessConditions\",\n \"ifUnmodifiedSince\"\n ],\n mapper: {\n serializedName: \"If-Unmodified-Since\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n};\nexport const include0: msRest.OperationQueryParameter = {\n parameterPath: [\n \"options\",\n \"include\"\n ],\n mapper: {\n serializedName: \"include\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"metadata\"\n ]\n }\n }\n};\nexport const include1: msRest.OperationQueryParameter = {\n parameterPath: [\n \"options\",\n \"include\"\n ],\n mapper: {\n serializedName: \"include\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Enum\",\n allowedValues: [\n \"copy\",\n \"deleted\",\n \"metadata\",\n \"snapshots\",\n \"uncommittedblobs\"\n ]\n }\n }\n }\n },\n collectionFormat: msRest.QueryCollectionFormat.Csv\n};\nexport const leaseId0: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"leaseAccessConditions\",\n \"leaseId\"\n ],\n mapper: {\n serializedName: \"x-ms-lease-id\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const leaseId1: msRest.OperationParameter = {\n parameterPath: \"leaseId\",\n mapper: {\n required: true,\n serializedName: \"x-ms-lease-id\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const listType: msRest.OperationQueryParameter = {\n parameterPath: \"listType\",\n mapper: {\n required: true,\n serializedName: \"blocklisttype\",\n defaultValue: 'committed',\n type: {\n name: \"Enum\",\n allowedValues: [\n \"committed\",\n \"uncommitted\",\n \"all\"\n ]\n }\n }\n};\nexport const marker0: msRest.OperationQueryParameter = {\n parameterPath: [\n \"options\",\n \"marker\"\n ],\n mapper: {\n serializedName: \"marker\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const marker1: msRest.OperationQueryParameter = {\n parameterPath: [\n \"options\",\n \"marker\"\n ],\n mapper: {\n serializedName: \"continuation\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const maxresults: msRest.OperationQueryParameter = {\n parameterPath: [\n \"options\",\n \"maxresults\"\n ],\n mapper: {\n serializedName: \"maxresults\",\n constraints: {\n InclusiveMinimum: 1\n },\n type: {\n name: \"Number\"\n }\n }\n};\nexport const maxSize: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"appendPositionAccessConditions\",\n \"maxSize\"\n ],\n mapper: {\n serializedName: \"x-ms-blob-condition-maxsize\",\n type: {\n name: \"Number\"\n }\n }\n};\nexport const metadata: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"metadata\"\n ],\n mapper: {\n serializedName: \"x-ms-meta\",\n type: {\n name: \"Dictionary\",\n value: {\n type: {\n name: \"String\"\n }\n }\n },\n headerCollectionPrefix: \"x-ms-meta-\"\n }\n};\nexport const multipartContentType: msRest.OperationParameter = {\n parameterPath: \"multipartContentType\",\n mapper: {\n required: true,\n serializedName: \"Content-Type\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const owner: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"owner\"\n ],\n mapper: {\n serializedName: \"x-ms-owner\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const pageWrite0: msRest.OperationParameter = {\n parameterPath: \"pageWrite\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"x-ms-page-write\",\n defaultValue: 'update',\n type: {\n name: \"String\"\n }\n }\n};\nexport const pageWrite1: msRest.OperationParameter = {\n parameterPath: \"pageWrite\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"x-ms-page-write\",\n defaultValue: 'clear',\n type: {\n name: \"String\"\n }\n }\n};\nexport const pathRenameMode: msRest.OperationQueryParameter = {\n parameterPath: \"pathRenameMode\",\n mapper: {\n serializedName: \"mode\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"legacy\",\n \"posix\"\n ]\n }\n }\n};\nexport const posixAcl: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"posixAcl\"\n ],\n mapper: {\n serializedName: \"x-ms-acl\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const posixPermissions: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"posixPermissions\"\n ],\n mapper: {\n serializedName: \"x-ms-permissions\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const posixUmask: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"posixUmask\"\n ],\n mapper: {\n serializedName: \"x-ms-umask\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const prefix: msRest.OperationQueryParameter = {\n parameterPath: [\n \"options\",\n \"prefix\"\n ],\n mapper: {\n serializedName: \"prefix\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const prevsnapshot: msRest.OperationQueryParameter = {\n parameterPath: [\n \"options\",\n \"prevsnapshot\"\n ],\n mapper: {\n serializedName: \"prevsnapshot\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const proposedLeaseId0: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"proposedLeaseId\"\n ],\n mapper: {\n serializedName: \"x-ms-proposed-lease-id\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const proposedLeaseId1: msRest.OperationParameter = {\n parameterPath: \"proposedLeaseId\",\n mapper: {\n required: true,\n serializedName: \"x-ms-proposed-lease-id\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const range0: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"range\"\n ],\n mapper: {\n serializedName: \"x-ms-range\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const range1: msRest.OperationParameter = {\n parameterPath: \"range\",\n mapper: {\n required: true,\n serializedName: \"x-ms-range\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const rangeGetContentCRC64: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"rangeGetContentCRC64\"\n ],\n mapper: {\n serializedName: \"x-ms-range-get-content-crc64\",\n type: {\n name: \"Boolean\"\n }\n }\n};\nexport const rangeGetContentMD5: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"rangeGetContentMD5\"\n ],\n mapper: {\n serializedName: \"x-ms-range-get-content-md5\",\n type: {\n name: \"Boolean\"\n }\n }\n};\nexport const recursiveDirectoryDelete: msRest.OperationQueryParameter = {\n parameterPath: \"recursiveDirectoryDelete\",\n mapper: {\n required: true,\n serializedName: \"recursive\",\n type: {\n name: \"Boolean\"\n }\n }\n};\nexport const rehydratePriority: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"rehydratePriority\"\n ],\n mapper: {\n serializedName: \"x-ms-rehydrate-priority\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const renameSource: msRest.OperationParameter = {\n parameterPath: \"renameSource\",\n mapper: {\n required: true,\n serializedName: \"x-ms-rename-source\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const requestId: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"requestId\"\n ],\n mapper: {\n serializedName: \"x-ms-client-request-id\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const resource: msRest.OperationQueryParameter = {\n parameterPath: \"resource\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"resource\",\n defaultValue: 'directory',\n type: {\n name: \"String\"\n }\n }\n};\nexport const restype0: msRest.OperationQueryParameter = {\n parameterPath: \"restype\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"restype\",\n defaultValue: 'service',\n type: {\n name: \"String\"\n }\n }\n};\nexport const restype1: msRest.OperationQueryParameter = {\n parameterPath: \"restype\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"restype\",\n defaultValue: 'account',\n type: {\n name: \"String\"\n }\n }\n};\nexport const restype2: msRest.OperationQueryParameter = {\n parameterPath: \"restype\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"restype\",\n defaultValue: 'container',\n type: {\n name: \"String\"\n }\n }\n};\nexport const sequenceNumberAction: msRest.OperationParameter = {\n parameterPath: \"sequenceNumberAction\",\n mapper: {\n required: true,\n serializedName: \"x-ms-sequence-number-action\",\n type: {\n name: \"Enum\",\n allowedValues: [\n \"max\",\n \"update\",\n \"increment\"\n ]\n }\n }\n};\nexport const snapshot: msRest.OperationQueryParameter = {\n parameterPath: [\n \"options\",\n \"snapshot\"\n ],\n mapper: {\n serializedName: \"snapshot\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const sourceContentCrc64: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"sourceContentCrc64\"\n ],\n mapper: {\n serializedName: \"x-ms-source-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n }\n};\nexport const sourceContentMD5: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"sourceContentMD5\"\n ],\n mapper: {\n serializedName: \"x-ms-source-content-md5\",\n type: {\n name: \"ByteArray\"\n }\n }\n};\nexport const sourceIfMatch: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"sourceModifiedAccessConditions\",\n \"sourceIfMatch\"\n ],\n mapper: {\n serializedName: \"x-ms-source-if-match\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const sourceIfModifiedSince: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"sourceModifiedAccessConditions\",\n \"sourceIfModifiedSince\"\n ],\n mapper: {\n serializedName: \"x-ms-source-if-modified-since\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n};\nexport const sourceIfNoneMatch: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"sourceModifiedAccessConditions\",\n \"sourceIfNoneMatch\"\n ],\n mapper: {\n serializedName: \"x-ms-source-if-none-match\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const sourceIfUnmodifiedSince: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"sourceModifiedAccessConditions\",\n \"sourceIfUnmodifiedSince\"\n ],\n mapper: {\n serializedName: \"x-ms-source-if-unmodified-since\",\n type: {\n name: \"DateTimeRfc1123\"\n }\n }\n};\nexport const sourceLeaseId: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"sourceLeaseId\"\n ],\n mapper: {\n serializedName: \"x-ms-source-lease-id\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const sourceRange0: msRest.OperationParameter = {\n parameterPath: \"sourceRange\",\n mapper: {\n required: true,\n serializedName: \"x-ms-source-range\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const sourceRange1: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"sourceRange\"\n ],\n mapper: {\n serializedName: \"x-ms-source-range\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const sourceUrl: msRest.OperationParameter = {\n parameterPath: \"sourceUrl\",\n mapper: {\n required: true,\n serializedName: \"x-ms-copy-source\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const tier0: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"tier\"\n ],\n mapper: {\n serializedName: \"x-ms-access-tier\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const tier1: msRest.OperationParameter = {\n parameterPath: \"tier\",\n mapper: {\n required: true,\n serializedName: \"x-ms-access-tier\",\n type: {\n name: \"String\"\n }\n }\n};\nexport const timeout: msRest.OperationQueryParameter = {\n parameterPath: [\n \"options\",\n \"timeout\"\n ],\n mapper: {\n serializedName: \"timeout\",\n constraints: {\n InclusiveMinimum: 0\n },\n type: {\n name: \"Number\"\n }\n }\n};\nexport const transactionalContentCrc64: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"transactionalContentCrc64\"\n ],\n mapper: {\n serializedName: \"x-ms-content-crc64\",\n type: {\n name: \"ByteArray\"\n }\n }\n};\nexport const transactionalContentMD5: msRest.OperationParameter = {\n parameterPath: [\n \"options\",\n \"transactionalContentMD5\"\n ],\n mapper: {\n serializedName: \"Content-MD5\",\n type: {\n name: \"ByteArray\"\n }\n }\n};\nexport const upn: msRest.OperationQueryParameter = {\n parameterPath: [\n \"options\",\n \"upn\"\n ],\n mapper: {\n serializedName: \"upn\",\n type: {\n name: \"Boolean\"\n }\n }\n};\nexport const url: msRest.OperationURLParameter = {\n parameterPath: \"url\",\n mapper: {\n required: true,\n serializedName: \"url\",\n defaultValue: '',\n type: {\n name: \"String\"\n }\n },\n skipEncoding: true\n};\nexport const version: msRest.OperationParameter = {\n parameterPath: \"version\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"x-ms-version\",\n defaultValue: '2019-02-02',\n type: {\n name: \"String\"\n }\n }\n};\nexport const xMsRequiresSync: msRest.OperationParameter = {\n parameterPath: \"xMsRequiresSync\",\n mapper: {\n required: true,\n isConstant: true,\n serializedName: \"x-ms-requires-sync\",\n defaultValue: 'true',\n type: {\n name: \"String\"\n }\n }\n};\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for\n * license information.\n *\n * Code generated by Microsoft (R) AutoRest Code Generator.\n * Changes may cause incorrect behavior and will be lost if the code is\n * regenerated.\n */\n\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Models from \"../models\";\nimport * as Mappers from \"../models/serviceMappers\";\nimport * as Parameters from \"../models/parameters\";\nimport { StorageClientContext } from \"../storageClientContext\";\n\n/** Class representing a Service. */\nexport class Service {\n private readonly client: StorageClientContext;\n\n /**\n * Create a Service.\n * @param {StorageClientContext} client Reference to the service client.\n */\n constructor(client: StorageClientContext) {\n this.client = client;\n }\n\n /**\n * Sets properties for a storage account's Blob service endpoint, including properties for Storage\n * Analytics and CORS (Cross-Origin Resource Sharing) rules\n * @param storageServiceProperties The StorageService properties.\n * @param [options] The optional parameters\n * @returns Promise\n */\n setProperties(storageServiceProperties: Models.StorageServiceProperties, options?: Models.ServiceSetPropertiesOptionalParams): Promise;\n /**\n * @param storageServiceProperties The StorageService properties.\n * @param callback The callback\n */\n setProperties(storageServiceProperties: Models.StorageServiceProperties, callback: msRest.ServiceCallback): void;\n /**\n * @param storageServiceProperties The StorageService properties.\n * @param options The optional parameters\n * @param callback The callback\n */\n setProperties(storageServiceProperties: Models.StorageServiceProperties, options: Models.ServiceSetPropertiesOptionalParams, callback: msRest.ServiceCallback): void;\n setProperties(storageServiceProperties: Models.StorageServiceProperties, options?: Models.ServiceSetPropertiesOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n storageServiceProperties,\n options\n },\n setPropertiesOperationSpec,\n callback) as Promise;\n }\n\n /**\n * gets the properties of a storage account's Blob service, including properties for Storage\n * Analytics and CORS (Cross-Origin Resource Sharing) rules.\n * @param [options] The optional parameters\n * @returns Promise\n */\n getProperties(options?: Models.ServiceGetPropertiesOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n getProperties(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n getProperties(options: Models.ServiceGetPropertiesOptionalParams, callback: msRest.ServiceCallback): void;\n getProperties(options?: Models.ServiceGetPropertiesOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n getPropertiesOperationSpec,\n callback) as Promise;\n }\n\n /**\n * Retrieves statistics related to replication for the Blob service. It is only available on the\n * secondary location endpoint when read-access geo-redundant replication is enabled for the\n * storage account.\n * @param [options] The optional parameters\n * @returns Promise\n */\n getStatistics(options?: Models.ServiceGetStatisticsOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n getStatistics(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n getStatistics(options: Models.ServiceGetStatisticsOptionalParams, callback: msRest.ServiceCallback): void;\n getStatistics(options?: Models.ServiceGetStatisticsOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n getStatisticsOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The List Containers Segment operation returns a list of the containers under the specified\n * account\n * @param [options] The optional parameters\n * @returns Promise\n */\n listContainersSegment(options?: Models.ServiceListContainersSegmentOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n listContainersSegment(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n listContainersSegment(options: Models.ServiceListContainersSegmentOptionalParams, callback: msRest.ServiceCallback): void;\n listContainersSegment(options?: Models.ServiceListContainersSegmentOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n listContainersSegmentOperationSpec,\n callback) as Promise;\n }\n\n /**\n * Retrieves a user delegation key for the Blob service. This is only a valid operation when using\n * bearer token authentication.\n * @param keyInfo\n * @param [options] The optional parameters\n * @returns Promise\n */\n getUserDelegationKey(keyInfo: Models.KeyInfo, options?: Models.ServiceGetUserDelegationKeyOptionalParams): Promise;\n /**\n * @param keyInfo\n * @param callback The callback\n */\n getUserDelegationKey(keyInfo: Models.KeyInfo, callback: msRest.ServiceCallback): void;\n /**\n * @param keyInfo\n * @param options The optional parameters\n * @param callback The callback\n */\n getUserDelegationKey(keyInfo: Models.KeyInfo, options: Models.ServiceGetUserDelegationKeyOptionalParams, callback: msRest.ServiceCallback): void;\n getUserDelegationKey(keyInfo: Models.KeyInfo, options?: Models.ServiceGetUserDelegationKeyOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n keyInfo,\n options\n },\n getUserDelegationKeyOperationSpec,\n callback) as Promise;\n }\n\n /**\n * Returns the sku name and account kind\n * @param [options] The optional parameters\n * @returns Promise\n */\n getAccountInfo(options?: msRest.RequestOptionsBase): Promise;\n /**\n * @param callback The callback\n */\n getAccountInfo(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n getAccountInfo(options: msRest.RequestOptionsBase, callback: msRest.ServiceCallback): void;\n getAccountInfo(options?: msRest.RequestOptionsBase | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n getAccountInfoOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Batch operation allows multiple API calls to be embedded into a single HTTP request.\n * @param body Initial data\n * @param contentLength The length of the request.\n * @param multipartContentType Required. The value of this header must be multipart/mixed with a\n * batch boundary. Example header value: multipart/mixed; boundary=batch_\n * @param [options] The optional parameters\n * @returns Promise\n */\n submitBatch(body: msRest.HttpRequestBody, contentLength: number, multipartContentType: string, options?: Models.ServiceSubmitBatchOptionalParams): Promise;\n /**\n * @param body Initial data\n * @param contentLength The length of the request.\n * @param multipartContentType Required. The value of this header must be multipart/mixed with a\n * batch boundary. Example header value: multipart/mixed; boundary=batch_\n * @param callback The callback\n */\n submitBatch(body: msRest.HttpRequestBody, contentLength: number, multipartContentType: string, callback: msRest.ServiceCallback): void;\n /**\n * @param body Initial data\n * @param contentLength The length of the request.\n * @param multipartContentType Required. The value of this header must be multipart/mixed with a\n * batch boundary. Example header value: multipart/mixed; boundary=batch_\n * @param options The optional parameters\n * @param callback The callback\n */\n submitBatch(body: msRest.HttpRequestBody, contentLength: number, multipartContentType: string, options: Models.ServiceSubmitBatchOptionalParams, callback: msRest.ServiceCallback): void;\n submitBatch(body: msRest.HttpRequestBody, contentLength: number, multipartContentType: string, options?: Models.ServiceSubmitBatchOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n body,\n contentLength,\n multipartContentType,\n options\n },\n submitBatchOperationSpec,\n callback) as Promise;\n }\n}\n\n// Operation Specifications\nconst serializer = new msRest.Serializer(Mappers, true);\nconst setPropertiesOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.restype0,\n Parameters.comp0\n ],\n headerParameters: [\n Parameters.version,\n Parameters.requestId\n ],\n requestBody: {\n parameterPath: \"storageServiceProperties\",\n mapper: {\n ...Mappers.StorageServiceProperties,\n required: true\n }\n },\n contentType: \"application/xml; charset=utf-8\",\n responses: {\n 202: {\n headersMapper: Mappers.ServiceSetPropertiesHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst getPropertiesOperationSpec: msRest.OperationSpec = {\n httpMethod: \"GET\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.restype0,\n Parameters.comp0\n ],\n headerParameters: [\n Parameters.version,\n Parameters.requestId\n ],\n responses: {\n 200: {\n bodyMapper: Mappers.StorageServiceProperties,\n headersMapper: Mappers.ServiceGetPropertiesHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst getStatisticsOperationSpec: msRest.OperationSpec = {\n httpMethod: \"GET\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.restype0,\n Parameters.comp1\n ],\n headerParameters: [\n Parameters.version,\n Parameters.requestId\n ],\n responses: {\n 200: {\n bodyMapper: Mappers.StorageServiceStats,\n headersMapper: Mappers.ServiceGetStatisticsHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst listContainersSegmentOperationSpec: msRest.OperationSpec = {\n httpMethod: \"GET\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.prefix,\n Parameters.marker0,\n Parameters.maxresults,\n Parameters.include0,\n Parameters.timeout,\n Parameters.comp2\n ],\n headerParameters: [\n Parameters.version,\n Parameters.requestId\n ],\n responses: {\n 200: {\n bodyMapper: Mappers.ListContainersSegmentResponse,\n headersMapper: Mappers.ServiceListContainersSegmentHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst getUserDelegationKeyOperationSpec: msRest.OperationSpec = {\n httpMethod: \"POST\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.restype0,\n Parameters.comp3\n ],\n headerParameters: [\n Parameters.version,\n Parameters.requestId\n ],\n requestBody: {\n parameterPath: \"keyInfo\",\n mapper: {\n ...Mappers.KeyInfo,\n required: true\n }\n },\n contentType: \"application/xml; charset=utf-8\",\n responses: {\n 200: {\n bodyMapper: Mappers.UserDelegationKey,\n headersMapper: Mappers.ServiceGetUserDelegationKeyHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst getAccountInfoOperationSpec: msRest.OperationSpec = {\n httpMethod: \"GET\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.restype1,\n Parameters.comp0\n ],\n headerParameters: [\n Parameters.version\n ],\n responses: {\n 200: {\n headersMapper: Mappers.ServiceGetAccountInfoHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst submitBatchOperationSpec: msRest.OperationSpec = {\n httpMethod: \"POST\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp4\n ],\n headerParameters: [\n Parameters.contentLength,\n Parameters.multipartContentType,\n Parameters.version,\n Parameters.requestId\n ],\n requestBody: {\n parameterPath: \"body\",\n mapper: {\n required: true,\n serializedName: \"body\",\n type: {\n name: \"Stream\"\n }\n }\n },\n contentType: \"application/xml; charset=utf-8\",\n responses: {\n 202: {\n bodyMapper: {\n serializedName: \"parsedResponse\",\n type: {\n name: \"Stream\"\n }\n },\n headersMapper: Mappers.ServiceSubmitBatchHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for\n * license information.\n *\n * Code generated by Microsoft (R) AutoRest Code Generator.\n * Changes may cause incorrect behavior and will be lost if the code is\n * regenerated.\n */\n\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Models from \"../models\";\nimport * as Mappers from \"../models/containerMappers\";\nimport * as Parameters from \"../models/parameters\";\nimport { StorageClientContext } from \"../storageClientContext\";\n\n/** Class representing a Container. */\nexport class Container {\n private readonly client: StorageClientContext;\n\n /**\n * Create a Container.\n * @param {StorageClientContext} client Reference to the service client.\n */\n constructor(client: StorageClientContext) {\n this.client = client;\n }\n\n /**\n * creates a new container under the specified account. If the container with the same name already\n * exists, the operation fails\n * @param [options] The optional parameters\n * @returns Promise\n */\n create(options?: Models.ContainerCreateOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n create(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n create(options: Models.ContainerCreateOptionalParams, callback: msRest.ServiceCallback): void;\n create(options?: Models.ContainerCreateOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n createOperationSpec,\n callback) as Promise;\n }\n\n /**\n * returns all user-defined metadata and system properties for the specified container. The data\n * returned does not include the container's list of blobs\n * @param [options] The optional parameters\n * @returns Promise\n */\n getProperties(options?: Models.ContainerGetPropertiesOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n getProperties(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n getProperties(options: Models.ContainerGetPropertiesOptionalParams, callback: msRest.ServiceCallback): void;\n getProperties(options?: Models.ContainerGetPropertiesOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n getPropertiesOperationSpec,\n callback) as Promise;\n }\n\n /**\n * operation marks the specified container for deletion. The container and any blobs contained\n * within it are later deleted during garbage collection\n * @param [options] The optional parameters\n * @returns Promise\n */\n deleteMethod(options?: Models.ContainerDeleteMethodOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n deleteMethod(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n deleteMethod(options: Models.ContainerDeleteMethodOptionalParams, callback: msRest.ServiceCallback): void;\n deleteMethod(options?: Models.ContainerDeleteMethodOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n deleteMethodOperationSpec,\n callback) as Promise;\n }\n\n /**\n * operation sets one or more user-defined name-value pairs for the specified container.\n * @param [options] The optional parameters\n * @returns Promise\n */\n setMetadata(options?: Models.ContainerSetMetadataOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n setMetadata(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n setMetadata(options: Models.ContainerSetMetadataOptionalParams, callback: msRest.ServiceCallback): void;\n setMetadata(options?: Models.ContainerSetMetadataOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n setMetadataOperationSpec,\n callback) as Promise;\n }\n\n /**\n * gets the permissions for the specified container. The permissions indicate whether container\n * data may be accessed publicly.\n * @param [options] The optional parameters\n * @returns Promise\n */\n getAccessPolicy(options?: Models.ContainerGetAccessPolicyOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n getAccessPolicy(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n getAccessPolicy(options: Models.ContainerGetAccessPolicyOptionalParams, callback: msRest.ServiceCallback): void;\n getAccessPolicy(options?: Models.ContainerGetAccessPolicyOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n getAccessPolicyOperationSpec,\n callback) as Promise;\n }\n\n /**\n * sets the permissions for the specified container. The permissions indicate whether blobs in a\n * container may be accessed publicly.\n * @param [options] The optional parameters\n * @returns Promise\n */\n setAccessPolicy(options?: Models.ContainerSetAccessPolicyOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n setAccessPolicy(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n setAccessPolicy(options: Models.ContainerSetAccessPolicyOptionalParams, callback: msRest.ServiceCallback): void;\n setAccessPolicy(options?: Models.ContainerSetAccessPolicyOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n setAccessPolicyOperationSpec,\n callback) as Promise;\n }\n\n /**\n * [Update] establishes and manages a lock on a container for delete operations. The lock duration\n * can be 15 to 60 seconds, or can be infinite\n * @param [options] The optional parameters\n * @returns Promise\n */\n acquireLease(options?: Models.ContainerAcquireLeaseOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n acquireLease(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n acquireLease(options: Models.ContainerAcquireLeaseOptionalParams, callback: msRest.ServiceCallback): void;\n acquireLease(options?: Models.ContainerAcquireLeaseOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n acquireLeaseOperationSpec,\n callback) as Promise;\n }\n\n /**\n * [Update] establishes and manages a lock on a container for delete operations. The lock duration\n * can be 15 to 60 seconds, or can be infinite\n * @param leaseId Specifies the current lease ID on the resource.\n * @param [options] The optional parameters\n * @returns Promise\n */\n releaseLease(leaseId: string, options?: Models.ContainerReleaseLeaseOptionalParams): Promise;\n /**\n * @param leaseId Specifies the current lease ID on the resource.\n * @param callback The callback\n */\n releaseLease(leaseId: string, callback: msRest.ServiceCallback): void;\n /**\n * @param leaseId Specifies the current lease ID on the resource.\n * @param options The optional parameters\n * @param callback The callback\n */\n releaseLease(leaseId: string, options: Models.ContainerReleaseLeaseOptionalParams, callback: msRest.ServiceCallback): void;\n releaseLease(leaseId: string, options?: Models.ContainerReleaseLeaseOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n leaseId,\n options\n },\n releaseLeaseOperationSpec,\n callback) as Promise;\n }\n\n /**\n * [Update] establishes and manages a lock on a container for delete operations. The lock duration\n * can be 15 to 60 seconds, or can be infinite\n * @param leaseId Specifies the current lease ID on the resource.\n * @param [options] The optional parameters\n * @returns Promise\n */\n renewLease(leaseId: string, options?: Models.ContainerRenewLeaseOptionalParams): Promise;\n /**\n * @param leaseId Specifies the current lease ID on the resource.\n * @param callback The callback\n */\n renewLease(leaseId: string, callback: msRest.ServiceCallback): void;\n /**\n * @param leaseId Specifies the current lease ID on the resource.\n * @param options The optional parameters\n * @param callback The callback\n */\n renewLease(leaseId: string, options: Models.ContainerRenewLeaseOptionalParams, callback: msRest.ServiceCallback): void;\n renewLease(leaseId: string, options?: Models.ContainerRenewLeaseOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n leaseId,\n options\n },\n renewLeaseOperationSpec,\n callback) as Promise;\n }\n\n /**\n * [Update] establishes and manages a lock on a container for delete operations. The lock duration\n * can be 15 to 60 seconds, or can be infinite\n * @param [options] The optional parameters\n * @returns Promise\n */\n breakLease(options?: Models.ContainerBreakLeaseOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n breakLease(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n breakLease(options: Models.ContainerBreakLeaseOptionalParams, callback: msRest.ServiceCallback): void;\n breakLease(options?: Models.ContainerBreakLeaseOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n breakLeaseOperationSpec,\n callback) as Promise;\n }\n\n /**\n * [Update] establishes and manages a lock on a container for delete operations. The lock duration\n * can be 15 to 60 seconds, or can be infinite\n * @param leaseId Specifies the current lease ID on the resource.\n * @param proposedLeaseId Proposed lease ID, in a GUID string format. The Blob service returns 400\n * (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor\n * (String) for a list of valid GUID string formats.\n * @param [options] The optional parameters\n * @returns Promise\n */\n changeLease(leaseId: string, proposedLeaseId: string, options?: Models.ContainerChangeLeaseOptionalParams): Promise;\n /**\n * @param leaseId Specifies the current lease ID on the resource.\n * @param proposedLeaseId Proposed lease ID, in a GUID string format. The Blob service returns 400\n * (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor\n * (String) for a list of valid GUID string formats.\n * @param callback The callback\n */\n changeLease(leaseId: string, proposedLeaseId: string, callback: msRest.ServiceCallback): void;\n /**\n * @param leaseId Specifies the current lease ID on the resource.\n * @param proposedLeaseId Proposed lease ID, in a GUID string format. The Blob service returns 400\n * (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor\n * (String) for a list of valid GUID string formats.\n * @param options The optional parameters\n * @param callback The callback\n */\n changeLease(leaseId: string, proposedLeaseId: string, options: Models.ContainerChangeLeaseOptionalParams, callback: msRest.ServiceCallback): void;\n changeLease(leaseId: string, proposedLeaseId: string, options?: Models.ContainerChangeLeaseOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n leaseId,\n proposedLeaseId,\n options\n },\n changeLeaseOperationSpec,\n callback) as Promise;\n }\n\n /**\n * [Update] The List Blobs operation returns a list of the blobs under the specified container\n * @param [options] The optional parameters\n * @returns Promise\n */\n listBlobFlatSegment(options?: Models.ContainerListBlobFlatSegmentOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n listBlobFlatSegment(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n listBlobFlatSegment(options: Models.ContainerListBlobFlatSegmentOptionalParams, callback: msRest.ServiceCallback): void;\n listBlobFlatSegment(options?: Models.ContainerListBlobFlatSegmentOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n listBlobFlatSegmentOperationSpec,\n callback) as Promise;\n }\n\n /**\n * [Update] The List Blobs operation returns a list of the blobs under the specified container\n * @param delimiter When the request includes this parameter, the operation returns a BlobPrefix\n * element in the response body that acts as a placeholder for all blobs whose names begin with the\n * same substring up to the appearance of the delimiter character. The delimiter may be a single\n * character or a string.\n * @param [options] The optional parameters\n * @returns Promise\n */\n listBlobHierarchySegment(delimiter: string, options?: Models.ContainerListBlobHierarchySegmentOptionalParams): Promise;\n /**\n * @param delimiter When the request includes this parameter, the operation returns a BlobPrefix\n * element in the response body that acts as a placeholder for all blobs whose names begin with the\n * same substring up to the appearance of the delimiter character. The delimiter may be a single\n * character or a string.\n * @param callback The callback\n */\n listBlobHierarchySegment(delimiter: string, callback: msRest.ServiceCallback): void;\n /**\n * @param delimiter When the request includes this parameter, the operation returns a BlobPrefix\n * element in the response body that acts as a placeholder for all blobs whose names begin with the\n * same substring up to the appearance of the delimiter character. The delimiter may be a single\n * character or a string.\n * @param options The optional parameters\n * @param callback The callback\n */\n listBlobHierarchySegment(delimiter: string, options: Models.ContainerListBlobHierarchySegmentOptionalParams, callback: msRest.ServiceCallback): void;\n listBlobHierarchySegment(delimiter: string, options?: Models.ContainerListBlobHierarchySegmentOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n delimiter,\n options\n },\n listBlobHierarchySegmentOperationSpec,\n callback) as Promise;\n }\n\n /**\n * Returns the sku name and account kind\n * @param [options] The optional parameters\n * @returns Promise\n */\n getAccountInfo(options?: msRest.RequestOptionsBase): Promise;\n /**\n * @param callback The callback\n */\n getAccountInfo(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n getAccountInfo(options: msRest.RequestOptionsBase, callback: msRest.ServiceCallback): void;\n getAccountInfo(options?: msRest.RequestOptionsBase | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n getAccountInfoOperationSpec,\n callback) as Promise;\n }\n}\n\n// Operation Specifications\nconst serializer = new msRest.Serializer(Mappers, true);\nconst createOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.restype2\n ],\n headerParameters: [\n Parameters.metadata,\n Parameters.access,\n Parameters.version,\n Parameters.requestId\n ],\n responses: {\n 201: {\n headersMapper: Mappers.ContainerCreateHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst getPropertiesOperationSpec: msRest.OperationSpec = {\n httpMethod: \"GET\",\n path: \"{containerName}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.restype2\n ],\n headerParameters: [\n Parameters.version,\n Parameters.requestId,\n Parameters.leaseId0\n ],\n responses: {\n 200: {\n headersMapper: Mappers.ContainerGetPropertiesHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst deleteMethodOperationSpec: msRest.OperationSpec = {\n httpMethod: \"DELETE\",\n path: \"{containerName}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.restype2\n ],\n headerParameters: [\n Parameters.version,\n Parameters.requestId,\n Parameters.leaseId0,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince\n ],\n responses: {\n 202: {\n headersMapper: Mappers.ContainerDeleteHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst setMetadataOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.restype2,\n Parameters.comp5\n ],\n headerParameters: [\n Parameters.metadata,\n Parameters.version,\n Parameters.requestId,\n Parameters.leaseId0,\n Parameters.ifModifiedSince\n ],\n responses: {\n 200: {\n headersMapper: Mappers.ContainerSetMetadataHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst getAccessPolicyOperationSpec: msRest.OperationSpec = {\n httpMethod: \"GET\",\n path: \"{containerName}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.restype2,\n Parameters.comp6\n ],\n headerParameters: [\n Parameters.version,\n Parameters.requestId,\n Parameters.leaseId0\n ],\n responses: {\n 200: {\n bodyMapper: {\n xmlElementName: \"SignedIdentifier\",\n serializedName: \"parsedResponse\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"SignedIdentifier\"\n }\n }\n }\n },\n headersMapper: Mappers.ContainerGetAccessPolicyHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst setAccessPolicyOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.restype2,\n Parameters.comp6\n ],\n headerParameters: [\n Parameters.access,\n Parameters.version,\n Parameters.requestId,\n Parameters.leaseId0,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince\n ],\n requestBody: {\n parameterPath: [\n \"options\",\n \"containerAcl\"\n ],\n mapper: {\n xmlName: \"SignedIdentifiers\",\n xmlElementName: \"SignedIdentifier\",\n serializedName: \"containerAcl\",\n type: {\n name: \"Sequence\",\n element: {\n type: {\n name: \"Composite\",\n className: \"SignedIdentifier\"\n }\n }\n }\n }\n },\n contentType: \"application/xml; charset=utf-8\",\n responses: {\n 200: {\n headersMapper: Mappers.ContainerSetAccessPolicyHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst acquireLeaseOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp7,\n Parameters.restype2\n ],\n headerParameters: [\n Parameters.duration,\n Parameters.proposedLeaseId0,\n Parameters.version,\n Parameters.requestId,\n Parameters.action0,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince\n ],\n responses: {\n 201: {\n headersMapper: Mappers.ContainerAcquireLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst releaseLeaseOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp7,\n Parameters.restype2\n ],\n headerParameters: [\n Parameters.leaseId1,\n Parameters.version,\n Parameters.requestId,\n Parameters.action1,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince\n ],\n responses: {\n 200: {\n headersMapper: Mappers.ContainerReleaseLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst renewLeaseOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp7,\n Parameters.restype2\n ],\n headerParameters: [\n Parameters.leaseId1,\n Parameters.version,\n Parameters.requestId,\n Parameters.action2,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince\n ],\n responses: {\n 200: {\n headersMapper: Mappers.ContainerRenewLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst breakLeaseOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp7,\n Parameters.restype2\n ],\n headerParameters: [\n Parameters.breakPeriod,\n Parameters.version,\n Parameters.requestId,\n Parameters.action3,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince\n ],\n responses: {\n 202: {\n headersMapper: Mappers.ContainerBreakLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst changeLeaseOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp7,\n Parameters.restype2\n ],\n headerParameters: [\n Parameters.leaseId1,\n Parameters.proposedLeaseId1,\n Parameters.version,\n Parameters.requestId,\n Parameters.action4,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince\n ],\n responses: {\n 200: {\n headersMapper: Mappers.ContainerChangeLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst listBlobFlatSegmentOperationSpec: msRest.OperationSpec = {\n httpMethod: \"GET\",\n path: \"{containerName}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.prefix,\n Parameters.marker0,\n Parameters.maxresults,\n Parameters.include1,\n Parameters.timeout,\n Parameters.restype2,\n Parameters.comp2\n ],\n headerParameters: [\n Parameters.version,\n Parameters.requestId\n ],\n responses: {\n 200: {\n bodyMapper: Mappers.ListBlobsFlatSegmentResponse,\n headersMapper: Mappers.ContainerListBlobFlatSegmentHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst listBlobHierarchySegmentOperationSpec: msRest.OperationSpec = {\n httpMethod: \"GET\",\n path: \"{containerName}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.prefix,\n Parameters.delimiter,\n Parameters.marker0,\n Parameters.maxresults,\n Parameters.include1,\n Parameters.timeout,\n Parameters.restype2,\n Parameters.comp2\n ],\n headerParameters: [\n Parameters.version,\n Parameters.requestId\n ],\n responses: {\n 200: {\n bodyMapper: Mappers.ListBlobsHierarchySegmentResponse,\n headersMapper: Mappers.ContainerListBlobHierarchySegmentHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst getAccountInfoOperationSpec: msRest.OperationSpec = {\n httpMethod: \"GET\",\n path: \"{containerName}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.restype1,\n Parameters.comp0\n ],\n headerParameters: [\n Parameters.version\n ],\n responses: {\n 200: {\n headersMapper: Mappers.ContainerGetAccountInfoHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for\n * license information.\n *\n * Code generated by Microsoft (R) AutoRest Code Generator.\n * Changes may cause incorrect behavior and will be lost if the code is\n * regenerated.\n */\n\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Models from \"../models\";\nimport * as Mappers from \"../models/blobMappers\";\nimport * as Parameters from \"../models/parameters\";\nimport { StorageClientContext } from \"../storageClientContext\";\n\n/** Class representing a Blob. */\nexport class Blob {\n private readonly client: StorageClientContext;\n\n /**\n * Create a Blob.\n * @param {StorageClientContext} client Reference to the service client.\n */\n constructor(client: StorageClientContext) {\n this.client = client;\n }\n\n /**\n * The Download operation reads or downloads a blob from the system, including its metadata and\n * properties. You can also call Download to read a snapshot.\n * @param [options] The optional parameters\n * @returns Promise\n */\n download(options?: Models.BlobDownloadOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n download(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n download(options: Models.BlobDownloadOptionalParams, callback: msRest.ServiceCallback): void;\n download(options?: Models.BlobDownloadOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n downloadOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Get Properties operation returns all user-defined metadata, standard HTTP properties, and\n * system properties for the blob. It does not return the content of the blob.\n * @param [options] The optional parameters\n * @returns Promise\n */\n getProperties(options?: Models.BlobGetPropertiesOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n getProperties(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n getProperties(options: Models.BlobGetPropertiesOptionalParams, callback: msRest.ServiceCallback): void;\n getProperties(options?: Models.BlobGetPropertiesOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n getPropertiesOperationSpec,\n callback) as Promise;\n }\n\n /**\n * If the storage account's soft delete feature is disabled then, when a blob is deleted, it is\n * permanently removed from the storage account. If the storage account's soft delete feature is\n * enabled, then, when a blob is deleted, it is marked for deletion and becomes inaccessible\n * immediately. However, the blob service retains the blob or snapshot for the number of days\n * specified by the DeleteRetentionPolicy section of [Storage service properties]\n * (Set-Blob-Service-Properties.md). After the specified number of days has passed, the blob's data\n * is permanently removed from the storage account. Note that you continue to be charged for the\n * soft-deleted blob's storage until it is permanently removed. Use the List Blobs API and specify\n * the \"include=deleted\" query parameter to discover which blobs and snapshots have been soft\n * deleted. You can then use the Undelete Blob API to restore a soft-deleted blob. All other\n * operations on a soft-deleted blob or snapshot causes the service to return an HTTP status code\n * of 404 (ResourceNotFound).\n * @param [options] The optional parameters\n * @returns Promise\n */\n deleteMethod(options?: Models.BlobDeleteMethodOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n deleteMethod(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n deleteMethod(options: Models.BlobDeleteMethodOptionalParams, callback: msRest.ServiceCallback): void;\n deleteMethod(options?: Models.BlobDeleteMethodOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n deleteMethodOperationSpec,\n callback) as Promise;\n }\n\n /**\n * Set the owner, group, permissions, or access control list for a blob.\n * @param [options] The optional parameters\n * @returns Promise\n */\n setAccessControl(options?: Models.BlobSetAccessControlOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n setAccessControl(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n setAccessControl(options: Models.BlobSetAccessControlOptionalParams, callback: msRest.ServiceCallback): void;\n setAccessControl(options?: Models.BlobSetAccessControlOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n setAccessControlOperationSpec,\n callback) as Promise;\n }\n\n /**\n * Get the owner, group, permissions, or access control list for a blob.\n * @param [options] The optional parameters\n * @returns Promise\n */\n getAccessControl(options?: Models.BlobGetAccessControlOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n getAccessControl(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n getAccessControl(options: Models.BlobGetAccessControlOptionalParams, callback: msRest.ServiceCallback): void;\n getAccessControl(options?: Models.BlobGetAccessControlOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n getAccessControlOperationSpec,\n callback) as Promise;\n }\n\n /**\n * Rename a blob/file. By default, the destination is overwritten and if the destination already\n * exists and has a lease the lease is broken. This operation supports conditional HTTP requests.\n * For more information, see [Specifying Conditional Headers for Blob Service\n * Operations](https://docs.microsoft.com/en-us/rest/api/storageservices/specifying-conditional-headers-for-blob-service-operations).\n * To fail if the destination already exists, use a conditional request with If-None-Match: \"*\".\n * @param renameSource The file or directory to be renamed. The value must have the following\n * format: \"/{filesysystem}/{path}\". If \"x-ms-properties\" is specified, the properties will\n * overwrite the existing properties; otherwise, the existing properties will be preserved.\n * @param [options] The optional parameters\n * @returns Promise\n */\n rename(renameSource: string, options?: Models.BlobRenameOptionalParams): Promise;\n /**\n * @param renameSource The file or directory to be renamed. The value must have the following\n * format: \"/{filesysystem}/{path}\". If \"x-ms-properties\" is specified, the properties will\n * overwrite the existing properties; otherwise, the existing properties will be preserved.\n * @param callback The callback\n */\n rename(renameSource: string, callback: msRest.ServiceCallback): void;\n /**\n * @param renameSource The file or directory to be renamed. The value must have the following\n * format: \"/{filesysystem}/{path}\". If \"x-ms-properties\" is specified, the properties will\n * overwrite the existing properties; otherwise, the existing properties will be preserved.\n * @param options The optional parameters\n * @param callback The callback\n */\n rename(renameSource: string, options: Models.BlobRenameOptionalParams, callback: msRest.ServiceCallback): void;\n rename(renameSource: string, options?: Models.BlobRenameOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n renameSource,\n options\n },\n renameOperationSpec,\n callback) as Promise;\n }\n\n /**\n * Undelete a blob that was previously soft deleted\n * @param [options] The optional parameters\n * @returns Promise\n */\n undelete(options?: Models.BlobUndeleteOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n undelete(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n undelete(options: Models.BlobUndeleteOptionalParams, callback: msRest.ServiceCallback): void;\n undelete(options?: Models.BlobUndeleteOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n undeleteOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Set HTTP Headers operation sets system properties on the blob\n * @param [options] The optional parameters\n * @returns Promise\n */\n setHTTPHeaders(options?: Models.BlobSetHTTPHeadersOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n setHTTPHeaders(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n setHTTPHeaders(options: Models.BlobSetHTTPHeadersOptionalParams, callback: msRest.ServiceCallback): void;\n setHTTPHeaders(options?: Models.BlobSetHTTPHeadersOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n setHTTPHeadersOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Set Blob Metadata operation sets user-defined metadata for the specified blob as one or more\n * name-value pairs\n * @param [options] The optional parameters\n * @returns Promise\n */\n setMetadata(options?: Models.BlobSetMetadataOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n setMetadata(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n setMetadata(options: Models.BlobSetMetadataOptionalParams, callback: msRest.ServiceCallback): void;\n setMetadata(options?: Models.BlobSetMetadataOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n setMetadataOperationSpec,\n callback) as Promise;\n }\n\n /**\n * [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete\n * operations\n * @param [options] The optional parameters\n * @returns Promise\n */\n acquireLease(options?: Models.BlobAcquireLeaseOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n acquireLease(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n acquireLease(options: Models.BlobAcquireLeaseOptionalParams, callback: msRest.ServiceCallback): void;\n acquireLease(options?: Models.BlobAcquireLeaseOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n acquireLeaseOperationSpec,\n callback) as Promise;\n }\n\n /**\n * [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete\n * operations\n * @param leaseId Specifies the current lease ID on the resource.\n * @param [options] The optional parameters\n * @returns Promise\n */\n releaseLease(leaseId: string, options?: Models.BlobReleaseLeaseOptionalParams): Promise;\n /**\n * @param leaseId Specifies the current lease ID on the resource.\n * @param callback The callback\n */\n releaseLease(leaseId: string, callback: msRest.ServiceCallback): void;\n /**\n * @param leaseId Specifies the current lease ID on the resource.\n * @param options The optional parameters\n * @param callback The callback\n */\n releaseLease(leaseId: string, options: Models.BlobReleaseLeaseOptionalParams, callback: msRest.ServiceCallback): void;\n releaseLease(leaseId: string, options?: Models.BlobReleaseLeaseOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n leaseId,\n options\n },\n releaseLeaseOperationSpec,\n callback) as Promise;\n }\n\n /**\n * [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete\n * operations\n * @param leaseId Specifies the current lease ID on the resource.\n * @param [options] The optional parameters\n * @returns Promise\n */\n renewLease(leaseId: string, options?: Models.BlobRenewLeaseOptionalParams): Promise;\n /**\n * @param leaseId Specifies the current lease ID on the resource.\n * @param callback The callback\n */\n renewLease(leaseId: string, callback: msRest.ServiceCallback): void;\n /**\n * @param leaseId Specifies the current lease ID on the resource.\n * @param options The optional parameters\n * @param callback The callback\n */\n renewLease(leaseId: string, options: Models.BlobRenewLeaseOptionalParams, callback: msRest.ServiceCallback): void;\n renewLease(leaseId: string, options?: Models.BlobRenewLeaseOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n leaseId,\n options\n },\n renewLeaseOperationSpec,\n callback) as Promise;\n }\n\n /**\n * [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete\n * operations\n * @param leaseId Specifies the current lease ID on the resource.\n * @param proposedLeaseId Proposed lease ID, in a GUID string format. The Blob service returns 400\n * (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor\n * (String) for a list of valid GUID string formats.\n * @param [options] The optional parameters\n * @returns Promise\n */\n changeLease(leaseId: string, proposedLeaseId: string, options?: Models.BlobChangeLeaseOptionalParams): Promise;\n /**\n * @param leaseId Specifies the current lease ID on the resource.\n * @param proposedLeaseId Proposed lease ID, in a GUID string format. The Blob service returns 400\n * (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor\n * (String) for a list of valid GUID string formats.\n * @param callback The callback\n */\n changeLease(leaseId: string, proposedLeaseId: string, callback: msRest.ServiceCallback): void;\n /**\n * @param leaseId Specifies the current lease ID on the resource.\n * @param proposedLeaseId Proposed lease ID, in a GUID string format. The Blob service returns 400\n * (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor\n * (String) for a list of valid GUID string formats.\n * @param options The optional parameters\n * @param callback The callback\n */\n changeLease(leaseId: string, proposedLeaseId: string, options: Models.BlobChangeLeaseOptionalParams, callback: msRest.ServiceCallback): void;\n changeLease(leaseId: string, proposedLeaseId: string, options?: Models.BlobChangeLeaseOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n leaseId,\n proposedLeaseId,\n options\n },\n changeLeaseOperationSpec,\n callback) as Promise;\n }\n\n /**\n * [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete\n * operations\n * @param [options] The optional parameters\n * @returns Promise\n */\n breakLease(options?: Models.BlobBreakLeaseOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n breakLease(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n breakLease(options: Models.BlobBreakLeaseOptionalParams, callback: msRest.ServiceCallback): void;\n breakLease(options?: Models.BlobBreakLeaseOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n breakLeaseOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Create Snapshot operation creates a read-only snapshot of a blob\n * @param [options] The optional parameters\n * @returns Promise\n */\n createSnapshot(options?: Models.BlobCreateSnapshotOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n createSnapshot(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n createSnapshot(options: Models.BlobCreateSnapshotOptionalParams, callback: msRest.ServiceCallback): void;\n createSnapshot(options?: Models.BlobCreateSnapshotOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n createSnapshotOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Start Copy From URL operation copies a blob or an internet resource to a new blob.\n * @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up\n * to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it\n * would appear in a request URI. The source blob must either be public or must be authenticated\n * via a shared access signature.\n * @param [options] The optional parameters\n * @returns Promise\n */\n startCopyFromURL(copySource: string, options?: Models.BlobStartCopyFromURLOptionalParams): Promise;\n /**\n * @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up\n * to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it\n * would appear in a request URI. The source blob must either be public or must be authenticated\n * via a shared access signature.\n * @param callback The callback\n */\n startCopyFromURL(copySource: string, callback: msRest.ServiceCallback): void;\n /**\n * @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up\n * to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it\n * would appear in a request URI. The source blob must either be public or must be authenticated\n * via a shared access signature.\n * @param options The optional parameters\n * @param callback The callback\n */\n startCopyFromURL(copySource: string, options: Models.BlobStartCopyFromURLOptionalParams, callback: msRest.ServiceCallback): void;\n startCopyFromURL(copySource: string, options?: Models.BlobStartCopyFromURLOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n copySource,\n options\n },\n startCopyFromURLOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Copy From URL operation copies a blob or an internet resource to a new blob. It will not\n * return a response until the copy is complete.\n * @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up\n * to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it\n * would appear in a request URI. The source blob must either be public or must be authenticated\n * via a shared access signature.\n * @param [options] The optional parameters\n * @returns Promise\n */\n copyFromURL(copySource: string, options?: Models.BlobCopyFromURLOptionalParams): Promise;\n /**\n * @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up\n * to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it\n * would appear in a request URI. The source blob must either be public or must be authenticated\n * via a shared access signature.\n * @param callback The callback\n */\n copyFromURL(copySource: string, callback: msRest.ServiceCallback): void;\n /**\n * @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up\n * to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it\n * would appear in a request URI. The source blob must either be public or must be authenticated\n * via a shared access signature.\n * @param options The optional parameters\n * @param callback The callback\n */\n copyFromURL(copySource: string, options: Models.BlobCopyFromURLOptionalParams, callback: msRest.ServiceCallback): void;\n copyFromURL(copySource: string, options?: Models.BlobCopyFromURLOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n copySource,\n options\n },\n copyFromURLOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Abort Copy From URL operation aborts a pending Copy From URL operation, and leaves a\n * destination blob with zero length and full metadata.\n * @param copyId The copy identifier provided in the x-ms-copy-id header of the original Copy Blob\n * operation.\n * @param [options] The optional parameters\n * @returns Promise\n */\n abortCopyFromURL(copyId: string, options?: Models.BlobAbortCopyFromURLOptionalParams): Promise;\n /**\n * @param copyId The copy identifier provided in the x-ms-copy-id header of the original Copy Blob\n * operation.\n * @param callback The callback\n */\n abortCopyFromURL(copyId: string, callback: msRest.ServiceCallback): void;\n /**\n * @param copyId The copy identifier provided in the x-ms-copy-id header of the original Copy Blob\n * operation.\n * @param options The optional parameters\n * @param callback The callback\n */\n abortCopyFromURL(copyId: string, options: Models.BlobAbortCopyFromURLOptionalParams, callback: msRest.ServiceCallback): void;\n abortCopyFromURL(copyId: string, options?: Models.BlobAbortCopyFromURLOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n copyId,\n options\n },\n abortCopyFromURLOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Set Tier operation sets the tier on a blob. The operation is allowed on a page blob in a\n * premium storage account and on a block blob in a blob storage account (locally redundant storage\n * only). A premium page blob's tier determines the allowed size, IOPS, and bandwidth of the blob.\n * A block blob's tier determines Hot/Cool/Archive storage type. This operation does not update the\n * blob's ETag.\n * @param tier Indicates the tier to be set on the blob. Possible values include: 'P4', 'P6',\n * 'P10', 'P15', 'P20', 'P30', 'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'\n * @param [options] The optional parameters\n * @returns Promise\n */\n setTier(tier: Models.AccessTier, options?: Models.BlobSetTierOptionalParams): Promise;\n /**\n * @param tier Indicates the tier to be set on the blob. Possible values include: 'P4', 'P6',\n * 'P10', 'P15', 'P20', 'P30', 'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'\n * @param callback The callback\n */\n setTier(tier: Models.AccessTier, callback: msRest.ServiceCallback): void;\n /**\n * @param tier Indicates the tier to be set on the blob. Possible values include: 'P4', 'P6',\n * 'P10', 'P15', 'P20', 'P30', 'P40', 'P50', 'P60', 'P70', 'P80', 'Hot', 'Cool', 'Archive'\n * @param options The optional parameters\n * @param callback The callback\n */\n setTier(tier: Models.AccessTier, options: Models.BlobSetTierOptionalParams, callback: msRest.ServiceCallback): void;\n setTier(tier: Models.AccessTier, options?: Models.BlobSetTierOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n tier,\n options\n },\n setTierOperationSpec,\n callback) as Promise;\n }\n\n /**\n * Returns the sku name and account kind\n * @param [options] The optional parameters\n * @returns Promise\n */\n getAccountInfo(options?: msRest.RequestOptionsBase): Promise;\n /**\n * @param callback The callback\n */\n getAccountInfo(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n getAccountInfo(options: msRest.RequestOptionsBase, callback: msRest.ServiceCallback): void;\n getAccountInfo(options?: msRest.RequestOptionsBase | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n getAccountInfoOperationSpec,\n callback) as Promise;\n }\n}\n\n// Operation Specifications\nconst serializer = new msRest.Serializer(Mappers, true);\nconst downloadOperationSpec: msRest.OperationSpec = {\n httpMethod: \"GET\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.snapshot,\n Parameters.timeout\n ],\n headerParameters: [\n Parameters.range0,\n Parameters.rangeGetContentMD5,\n Parameters.rangeGetContentCRC64,\n Parameters.version,\n Parameters.requestId,\n Parameters.leaseId0,\n Parameters.encryptionKey,\n Parameters.encryptionKeySha256,\n Parameters.encryptionAlgorithm,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n responses: {\n 200: {\n bodyMapper: {\n serializedName: \"parsedResponse\",\n type: {\n name: \"Stream\"\n }\n },\n headersMapper: Mappers.BlobDownloadHeaders\n },\n 206: {\n bodyMapper: {\n serializedName: \"parsedResponse\",\n type: {\n name: \"Stream\"\n }\n },\n headersMapper: Mappers.BlobDownloadHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst getPropertiesOperationSpec: msRest.OperationSpec = {\n httpMethod: \"HEAD\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.snapshot,\n Parameters.timeout\n ],\n headerParameters: [\n Parameters.version,\n Parameters.requestId,\n Parameters.leaseId0,\n Parameters.encryptionKey,\n Parameters.encryptionKeySha256,\n Parameters.encryptionAlgorithm,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n responses: {\n 200: {\n headersMapper: Mappers.BlobGetPropertiesHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst deleteMethodOperationSpec: msRest.OperationSpec = {\n httpMethod: \"DELETE\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.snapshot,\n Parameters.timeout\n ],\n headerParameters: [\n Parameters.deleteSnapshots,\n Parameters.version,\n Parameters.requestId,\n Parameters.leaseId0,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n responses: {\n 202: {\n headersMapper: Mappers.BlobDeleteHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst setAccessControlOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PATCH\",\n path: \"{filesystem}/{path}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.action5\n ],\n headerParameters: [\n Parameters.owner,\n Parameters.group,\n Parameters.posixPermissions,\n Parameters.posixAcl,\n Parameters.requestId,\n Parameters.version,\n Parameters.leaseId0,\n Parameters.ifMatch,\n Parameters.ifNoneMatch,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince\n ],\n responses: {\n 200: {\n headersMapper: Mappers.BlobSetAccessControlHeaders\n },\n default: {\n bodyMapper: Mappers.DataLakeStorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst getAccessControlOperationSpec: msRest.OperationSpec = {\n httpMethod: \"HEAD\",\n path: \"{filesystem}/{path}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.upn,\n Parameters.action6\n ],\n headerParameters: [\n Parameters.requestId,\n Parameters.version,\n Parameters.leaseId0,\n Parameters.ifMatch,\n Parameters.ifNoneMatch,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince\n ],\n responses: {\n 200: {\n headersMapper: Mappers.BlobGetAccessControlHeaders\n },\n default: {\n bodyMapper: Mappers.DataLakeStorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst renameOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{filesystem}/{path}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.pathRenameMode\n ],\n headerParameters: [\n Parameters.renameSource,\n Parameters.directoryProperties,\n Parameters.posixPermissions,\n Parameters.posixUmask,\n Parameters.sourceLeaseId,\n Parameters.version,\n Parameters.requestId,\n Parameters.cacheControl,\n Parameters.contentType,\n Parameters.contentEncoding,\n Parameters.contentLanguage,\n Parameters.contentDisposition,\n Parameters.leaseId0,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch,\n Parameters.sourceIfModifiedSince,\n Parameters.sourceIfUnmodifiedSince,\n Parameters.sourceIfMatch,\n Parameters.sourceIfNoneMatch\n ],\n responses: {\n 201: {\n headersMapper: Mappers.BlobRenameHeaders\n },\n default: {\n bodyMapper: Mappers.DataLakeStorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst undeleteOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp8\n ],\n headerParameters: [\n Parameters.version,\n Parameters.requestId\n ],\n responses: {\n 200: {\n headersMapper: Mappers.BlobUndeleteHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst setHTTPHeadersOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp0\n ],\n headerParameters: [\n Parameters.version,\n Parameters.requestId,\n Parameters.blobCacheControl,\n Parameters.blobContentType,\n Parameters.blobContentMD5,\n Parameters.blobContentEncoding,\n Parameters.blobContentLanguage,\n Parameters.blobContentDisposition,\n Parameters.leaseId0,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n responses: {\n 200: {\n headersMapper: Mappers.BlobSetHTTPHeadersHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst setMetadataOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp5\n ],\n headerParameters: [\n Parameters.metadata,\n Parameters.version,\n Parameters.requestId,\n Parameters.leaseId0,\n Parameters.encryptionKey,\n Parameters.encryptionKeySha256,\n Parameters.encryptionAlgorithm,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n responses: {\n 200: {\n headersMapper: Mappers.BlobSetMetadataHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst acquireLeaseOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp7\n ],\n headerParameters: [\n Parameters.duration,\n Parameters.proposedLeaseId0,\n Parameters.version,\n Parameters.requestId,\n Parameters.action0,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n responses: {\n 201: {\n headersMapper: Mappers.BlobAcquireLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst releaseLeaseOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp7\n ],\n headerParameters: [\n Parameters.leaseId1,\n Parameters.version,\n Parameters.requestId,\n Parameters.action1,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n responses: {\n 200: {\n headersMapper: Mappers.BlobReleaseLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst renewLeaseOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp7\n ],\n headerParameters: [\n Parameters.leaseId1,\n Parameters.version,\n Parameters.requestId,\n Parameters.action2,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n responses: {\n 200: {\n headersMapper: Mappers.BlobRenewLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst changeLeaseOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp7\n ],\n headerParameters: [\n Parameters.leaseId1,\n Parameters.proposedLeaseId1,\n Parameters.version,\n Parameters.requestId,\n Parameters.action4,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n responses: {\n 200: {\n headersMapper: Mappers.BlobChangeLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst breakLeaseOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp7\n ],\n headerParameters: [\n Parameters.breakPeriod,\n Parameters.version,\n Parameters.requestId,\n Parameters.action3,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n responses: {\n 202: {\n headersMapper: Mappers.BlobBreakLeaseHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst createSnapshotOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp9\n ],\n headerParameters: [\n Parameters.metadata,\n Parameters.version,\n Parameters.requestId,\n Parameters.encryptionKey,\n Parameters.encryptionKeySha256,\n Parameters.encryptionAlgorithm,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch,\n Parameters.leaseId0\n ],\n responses: {\n 201: {\n headersMapper: Mappers.BlobCreateSnapshotHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst startCopyFromURLOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout\n ],\n headerParameters: [\n Parameters.metadata,\n Parameters.tier0,\n Parameters.rehydratePriority,\n Parameters.copySource,\n Parameters.version,\n Parameters.requestId,\n Parameters.sourceIfModifiedSince,\n Parameters.sourceIfUnmodifiedSince,\n Parameters.sourceIfMatch,\n Parameters.sourceIfNoneMatch,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch,\n Parameters.leaseId0\n ],\n responses: {\n 202: {\n headersMapper: Mappers.BlobStartCopyFromURLHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst copyFromURLOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout\n ],\n headerParameters: [\n Parameters.metadata,\n Parameters.tier0,\n Parameters.copySource,\n Parameters.version,\n Parameters.requestId,\n Parameters.xMsRequiresSync,\n Parameters.sourceIfModifiedSince,\n Parameters.sourceIfUnmodifiedSince,\n Parameters.sourceIfMatch,\n Parameters.sourceIfNoneMatch,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch,\n Parameters.leaseId0\n ],\n responses: {\n 202: {\n headersMapper: Mappers.BlobCopyFromURLHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst abortCopyFromURLOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.copyId,\n Parameters.timeout,\n Parameters.comp10\n ],\n headerParameters: [\n Parameters.version,\n Parameters.requestId,\n Parameters.copyActionAbortConstant,\n Parameters.leaseId0\n ],\n responses: {\n 204: {\n headersMapper: Mappers.BlobAbortCopyFromURLHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst setTierOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp11\n ],\n headerParameters: [\n Parameters.tier1,\n Parameters.rehydratePriority,\n Parameters.version,\n Parameters.requestId,\n Parameters.leaseId0\n ],\n responses: {\n 200: {\n headersMapper: Mappers.BlobSetTierHeaders\n },\n 202: {\n headersMapper: Mappers.BlobSetTierHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst getAccountInfoOperationSpec: msRest.OperationSpec = {\n httpMethod: \"GET\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.restype1,\n Parameters.comp0\n ],\n headerParameters: [\n Parameters.version\n ],\n responses: {\n 200: {\n headersMapper: Mappers.BlobGetAccountInfoHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for\n * license information.\n *\n * Code generated by Microsoft (R) AutoRest Code Generator.\n * Changes may cause incorrect behavior and will be lost if the code is\n * regenerated.\n */\n\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Models from \"../models\";\nimport * as Mappers from \"../models/pageBlobMappers\";\nimport * as Parameters from \"../models/parameters\";\nimport { StorageClientContext } from \"../storageClientContext\";\n\n/** Class representing a PageBlob. */\nexport class PageBlob {\n private readonly client: StorageClientContext;\n\n /**\n * Create a PageBlob.\n * @param {StorageClientContext} client Reference to the service client.\n */\n constructor(client: StorageClientContext) {\n this.client = client;\n }\n\n /**\n * The Create operation creates a new page blob.\n * @param contentLength The length of the request.\n * @param blobContentLength This header specifies the maximum size for the page blob, up to 1 TB.\n * The page blob size must be aligned to a 512-byte boundary.\n * @param [options] The optional parameters\n * @returns Promise\n */\n create(contentLength: number, blobContentLength: number, options?: Models.PageBlobCreateOptionalParams): Promise;\n /**\n * @param contentLength The length of the request.\n * @param blobContentLength This header specifies the maximum size for the page blob, up to 1 TB.\n * The page blob size must be aligned to a 512-byte boundary.\n * @param callback The callback\n */\n create(contentLength: number, blobContentLength: number, callback: msRest.ServiceCallback): void;\n /**\n * @param contentLength The length of the request.\n * @param blobContentLength This header specifies the maximum size for the page blob, up to 1 TB.\n * The page blob size must be aligned to a 512-byte boundary.\n * @param options The optional parameters\n * @param callback The callback\n */\n create(contentLength: number, blobContentLength: number, options: Models.PageBlobCreateOptionalParams, callback: msRest.ServiceCallback): void;\n create(contentLength: number, blobContentLength: number, options?: Models.PageBlobCreateOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n contentLength,\n blobContentLength,\n options\n },\n createOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Upload Pages operation writes a range of pages to a page blob\n * @param body Initial data\n * @param contentLength The length of the request.\n * @param [options] The optional parameters\n * @returns Promise\n */\n uploadPages(body: msRest.HttpRequestBody, contentLength: number, options?: Models.PageBlobUploadPagesOptionalParams): Promise;\n /**\n * @param body Initial data\n * @param contentLength The length of the request.\n * @param callback The callback\n */\n uploadPages(body: msRest.HttpRequestBody, contentLength: number, callback: msRest.ServiceCallback): void;\n /**\n * @param body Initial data\n * @param contentLength The length of the request.\n * @param options The optional parameters\n * @param callback The callback\n */\n uploadPages(body: msRest.HttpRequestBody, contentLength: number, options: Models.PageBlobUploadPagesOptionalParams, callback: msRest.ServiceCallback): void;\n uploadPages(body: msRest.HttpRequestBody, contentLength: number, options?: Models.PageBlobUploadPagesOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n body,\n contentLength,\n options\n },\n uploadPagesOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Clear Pages operation clears a set of pages from a page blob\n * @param contentLength The length of the request.\n * @param [options] The optional parameters\n * @returns Promise\n */\n clearPages(contentLength: number, options?: Models.PageBlobClearPagesOptionalParams): Promise;\n /**\n * @param contentLength The length of the request.\n * @param callback The callback\n */\n clearPages(contentLength: number, callback: msRest.ServiceCallback): void;\n /**\n * @param contentLength The length of the request.\n * @param options The optional parameters\n * @param callback The callback\n */\n clearPages(contentLength: number, options: Models.PageBlobClearPagesOptionalParams, callback: msRest.ServiceCallback): void;\n clearPages(contentLength: number, options?: Models.PageBlobClearPagesOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n contentLength,\n options\n },\n clearPagesOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Upload Pages operation writes a range of pages to a page blob where the contents are read\n * from a URL\n * @param sourceUrl Specify a URL to the copy source.\n * @param sourceRange Bytes of source data in the specified range. The length of this range should\n * match the ContentLength header and x-ms-range/Range destination range header.\n * @param contentLength The length of the request.\n * @param range The range of bytes to which the source range would be written. The range should be\n * 512 aligned and range-end is required.\n * @param [options] The optional parameters\n * @returns Promise\n */\n uploadPagesFromURL(sourceUrl: string, sourceRange: string, contentLength: number, range: string, options?: Models.PageBlobUploadPagesFromURLOptionalParams): Promise;\n /**\n * @param sourceUrl Specify a URL to the copy source.\n * @param sourceRange Bytes of source data in the specified range. The length of this range should\n * match the ContentLength header and x-ms-range/Range destination range header.\n * @param contentLength The length of the request.\n * @param range The range of bytes to which the source range would be written. The range should be\n * 512 aligned and range-end is required.\n * @param callback The callback\n */\n uploadPagesFromURL(sourceUrl: string, sourceRange: string, contentLength: number, range: string, callback: msRest.ServiceCallback): void;\n /**\n * @param sourceUrl Specify a URL to the copy source.\n * @param sourceRange Bytes of source data in the specified range. The length of this range should\n * match the ContentLength header and x-ms-range/Range destination range header.\n * @param contentLength The length of the request.\n * @param range The range of bytes to which the source range would be written. The range should be\n * 512 aligned and range-end is required.\n * @param options The optional parameters\n * @param callback The callback\n */\n uploadPagesFromURL(sourceUrl: string, sourceRange: string, contentLength: number, range: string, options: Models.PageBlobUploadPagesFromURLOptionalParams, callback: msRest.ServiceCallback): void;\n uploadPagesFromURL(sourceUrl: string, sourceRange: string, contentLength: number, range: string, options?: Models.PageBlobUploadPagesFromURLOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n sourceUrl,\n sourceRange,\n contentLength,\n range,\n options\n },\n uploadPagesFromURLOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Get Page Ranges operation returns the list of valid page ranges for a page blob or snapshot\n * of a page blob\n * @param [options] The optional parameters\n * @returns Promise\n */\n getPageRanges(options?: Models.PageBlobGetPageRangesOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n getPageRanges(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n getPageRanges(options: Models.PageBlobGetPageRangesOptionalParams, callback: msRest.ServiceCallback): void;\n getPageRanges(options?: Models.PageBlobGetPageRangesOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n getPageRangesOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Get Page Ranges Diff operation returns the list of valid page ranges for a page blob that\n * were changed between target blob and previous snapshot.\n * @param [options] The optional parameters\n * @returns Promise\n */\n getPageRangesDiff(options?: Models.PageBlobGetPageRangesDiffOptionalParams): Promise;\n /**\n * @param callback The callback\n */\n getPageRangesDiff(callback: msRest.ServiceCallback): void;\n /**\n * @param options The optional parameters\n * @param callback The callback\n */\n getPageRangesDiff(options: Models.PageBlobGetPageRangesDiffOptionalParams, callback: msRest.ServiceCallback): void;\n getPageRangesDiff(options?: Models.PageBlobGetPageRangesDiffOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n options\n },\n getPageRangesDiffOperationSpec,\n callback) as Promise;\n }\n\n /**\n * Resize the Blob\n * @param blobContentLength This header specifies the maximum size for the page blob, up to 1 TB.\n * The page blob size must be aligned to a 512-byte boundary.\n * @param [options] The optional parameters\n * @returns Promise\n */\n resize(blobContentLength: number, options?: Models.PageBlobResizeOptionalParams): Promise;\n /**\n * @param blobContentLength This header specifies the maximum size for the page blob, up to 1 TB.\n * The page blob size must be aligned to a 512-byte boundary.\n * @param callback The callback\n */\n resize(blobContentLength: number, callback: msRest.ServiceCallback): void;\n /**\n * @param blobContentLength This header specifies the maximum size for the page blob, up to 1 TB.\n * The page blob size must be aligned to a 512-byte boundary.\n * @param options The optional parameters\n * @param callback The callback\n */\n resize(blobContentLength: number, options: Models.PageBlobResizeOptionalParams, callback: msRest.ServiceCallback): void;\n resize(blobContentLength: number, options?: Models.PageBlobResizeOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n blobContentLength,\n options\n },\n resizeOperationSpec,\n callback) as Promise;\n }\n\n /**\n * Update the sequence number of the blob\n * @param sequenceNumberAction Required if the x-ms-blob-sequence-number header is set for the\n * request. This property applies to page blobs only. This property indicates how the service\n * should modify the blob's sequence number. Possible values include: 'max', 'update', 'increment'\n * @param [options] The optional parameters\n * @returns Promise\n */\n updateSequenceNumber(sequenceNumberAction: Models.SequenceNumberActionType, options?: Models.PageBlobUpdateSequenceNumberOptionalParams): Promise;\n /**\n * @param sequenceNumberAction Required if the x-ms-blob-sequence-number header is set for the\n * request. This property applies to page blobs only. This property indicates how the service\n * should modify the blob's sequence number. Possible values include: 'max', 'update', 'increment'\n * @param callback The callback\n */\n updateSequenceNumber(sequenceNumberAction: Models.SequenceNumberActionType, callback: msRest.ServiceCallback): void;\n /**\n * @param sequenceNumberAction Required if the x-ms-blob-sequence-number header is set for the\n * request. This property applies to page blobs only. This property indicates how the service\n * should modify the blob's sequence number. Possible values include: 'max', 'update', 'increment'\n * @param options The optional parameters\n * @param callback The callback\n */\n updateSequenceNumber(sequenceNumberAction: Models.SequenceNumberActionType, options: Models.PageBlobUpdateSequenceNumberOptionalParams, callback: msRest.ServiceCallback): void;\n updateSequenceNumber(sequenceNumberAction: Models.SequenceNumberActionType, options?: Models.PageBlobUpdateSequenceNumberOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n sequenceNumberAction,\n options\n },\n updateSequenceNumberOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Copy Incremental operation copies a snapshot of the source page blob to a destination page\n * blob. The snapshot is copied such that only the differential changes between the previously\n * copied snapshot are transferred to the destination. The copied snapshots are complete copies of\n * the original snapshot and can be read or copied from as usual. This API is supported since REST\n * version 2016-05-31.\n * @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up\n * to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it\n * would appear in a request URI. The source blob must either be public or must be authenticated\n * via a shared access signature.\n * @param [options] The optional parameters\n * @returns Promise\n */\n copyIncremental(copySource: string, options?: Models.PageBlobCopyIncrementalOptionalParams): Promise;\n /**\n * @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up\n * to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it\n * would appear in a request URI. The source blob must either be public or must be authenticated\n * via a shared access signature.\n * @param callback The callback\n */\n copyIncremental(copySource: string, callback: msRest.ServiceCallback): void;\n /**\n * @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up\n * to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it\n * would appear in a request URI. The source blob must either be public or must be authenticated\n * via a shared access signature.\n * @param options The optional parameters\n * @param callback The callback\n */\n copyIncremental(copySource: string, options: Models.PageBlobCopyIncrementalOptionalParams, callback: msRest.ServiceCallback): void;\n copyIncremental(copySource: string, options?: Models.PageBlobCopyIncrementalOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n copySource,\n options\n },\n copyIncrementalOperationSpec,\n callback) as Promise;\n }\n}\n\n// Operation Specifications\nconst serializer = new msRest.Serializer(Mappers, true);\nconst createOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout\n ],\n headerParameters: [\n Parameters.contentLength,\n Parameters.metadata,\n Parameters.blobContentLength,\n Parameters.blobSequenceNumber,\n Parameters.version,\n Parameters.requestId,\n Parameters.tier0,\n Parameters.blobType0,\n Parameters.blobContentType,\n Parameters.blobContentEncoding,\n Parameters.blobContentLanguage,\n Parameters.blobContentMD5,\n Parameters.blobCacheControl,\n Parameters.blobContentDisposition,\n Parameters.leaseId0,\n Parameters.encryptionKey,\n Parameters.encryptionKeySha256,\n Parameters.encryptionAlgorithm,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n responses: {\n 201: {\n headersMapper: Mappers.PageBlobCreateHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst uploadPagesOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp12\n ],\n headerParameters: [\n Parameters.contentLength,\n Parameters.transactionalContentMD5,\n Parameters.transactionalContentCrc64,\n Parameters.range0,\n Parameters.version,\n Parameters.requestId,\n Parameters.pageWrite0,\n Parameters.leaseId0,\n Parameters.encryptionKey,\n Parameters.encryptionKeySha256,\n Parameters.encryptionAlgorithm,\n Parameters.ifSequenceNumberLessThanOrEqualTo,\n Parameters.ifSequenceNumberLessThan,\n Parameters.ifSequenceNumberEqualTo,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n requestBody: {\n parameterPath: \"body\",\n mapper: {\n required: true,\n serializedName: \"body\",\n type: {\n name: \"Stream\"\n }\n }\n },\n contentType: \"application/octet-stream\",\n responses: {\n 201: {\n headersMapper: Mappers.PageBlobUploadPagesHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst clearPagesOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp12\n ],\n headerParameters: [\n Parameters.contentLength,\n Parameters.range0,\n Parameters.version,\n Parameters.requestId,\n Parameters.pageWrite1,\n Parameters.leaseId0,\n Parameters.encryptionKey,\n Parameters.encryptionKeySha256,\n Parameters.encryptionAlgorithm,\n Parameters.ifSequenceNumberLessThanOrEqualTo,\n Parameters.ifSequenceNumberLessThan,\n Parameters.ifSequenceNumberEqualTo,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n responses: {\n 201: {\n headersMapper: Mappers.PageBlobClearPagesHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst uploadPagesFromURLOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp12\n ],\n headerParameters: [\n Parameters.sourceUrl,\n Parameters.sourceRange0,\n Parameters.sourceContentMD5,\n Parameters.sourceContentCrc64,\n Parameters.contentLength,\n Parameters.range1,\n Parameters.version,\n Parameters.requestId,\n Parameters.pageWrite0,\n Parameters.encryptionKey,\n Parameters.encryptionKeySha256,\n Parameters.encryptionAlgorithm,\n Parameters.leaseId0,\n Parameters.ifSequenceNumberLessThanOrEqualTo,\n Parameters.ifSequenceNumberLessThan,\n Parameters.ifSequenceNumberEqualTo,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch,\n Parameters.sourceIfModifiedSince,\n Parameters.sourceIfUnmodifiedSince,\n Parameters.sourceIfMatch,\n Parameters.sourceIfNoneMatch\n ],\n responses: {\n 201: {\n headersMapper: Mappers.PageBlobUploadPagesFromURLHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst getPageRangesOperationSpec: msRest.OperationSpec = {\n httpMethod: \"GET\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.snapshot,\n Parameters.timeout,\n Parameters.comp13\n ],\n headerParameters: [\n Parameters.range0,\n Parameters.version,\n Parameters.requestId,\n Parameters.leaseId0,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n responses: {\n 200: {\n bodyMapper: Mappers.PageList,\n headersMapper: Mappers.PageBlobGetPageRangesHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst getPageRangesDiffOperationSpec: msRest.OperationSpec = {\n httpMethod: \"GET\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.snapshot,\n Parameters.timeout,\n Parameters.prevsnapshot,\n Parameters.comp13\n ],\n headerParameters: [\n Parameters.range0,\n Parameters.version,\n Parameters.requestId,\n Parameters.leaseId0,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n responses: {\n 200: {\n bodyMapper: Mappers.PageList,\n headersMapper: Mappers.PageBlobGetPageRangesDiffHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst resizeOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp0\n ],\n headerParameters: [\n Parameters.blobContentLength,\n Parameters.version,\n Parameters.requestId,\n Parameters.leaseId0,\n Parameters.encryptionKey,\n Parameters.encryptionKeySha256,\n Parameters.encryptionAlgorithm,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n responses: {\n 200: {\n headersMapper: Mappers.PageBlobResizeHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst updateSequenceNumberOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp0\n ],\n headerParameters: [\n Parameters.sequenceNumberAction,\n Parameters.blobSequenceNumber,\n Parameters.version,\n Parameters.requestId,\n Parameters.leaseId0,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n responses: {\n 200: {\n headersMapper: Mappers.PageBlobUpdateSequenceNumberHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst copyIncrementalOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp14\n ],\n headerParameters: [\n Parameters.copySource,\n Parameters.version,\n Parameters.requestId,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n responses: {\n 202: {\n headersMapper: Mappers.PageBlobCopyIncrementalHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for\n * license information.\n *\n * Code generated by Microsoft (R) AutoRest Code Generator.\n * Changes may cause incorrect behavior and will be lost if the code is\n * regenerated.\n */\n\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Models from \"../models\";\nimport * as Mappers from \"../models/appendBlobMappers\";\nimport * as Parameters from \"../models/parameters\";\nimport { StorageClientContext } from \"../storageClientContext\";\n\n/** Class representing a AppendBlob. */\nexport class AppendBlob {\n private readonly client: StorageClientContext;\n\n /**\n * Create a AppendBlob.\n * @param {StorageClientContext} client Reference to the service client.\n */\n constructor(client: StorageClientContext) {\n this.client = client;\n }\n\n /**\n * The Create Append Blob operation creates a new append blob.\n * @param contentLength The length of the request.\n * @param [options] The optional parameters\n * @returns Promise\n */\n create(contentLength: number, options?: Models.AppendBlobCreateOptionalParams): Promise;\n /**\n * @param contentLength The length of the request.\n * @param callback The callback\n */\n create(contentLength: number, callback: msRest.ServiceCallback): void;\n /**\n * @param contentLength The length of the request.\n * @param options The optional parameters\n * @param callback The callback\n */\n create(contentLength: number, options: Models.AppendBlobCreateOptionalParams, callback: msRest.ServiceCallback): void;\n create(contentLength: number, options?: Models.AppendBlobCreateOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n contentLength,\n options\n },\n createOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Append Block operation commits a new block of data to the end of an existing append blob.\n * The Append Block operation is permitted only if the blob was created with x-ms-blob-type set to\n * AppendBlob. Append Block is supported only on version 2015-02-21 version or later.\n * @param body Initial data\n * @param contentLength The length of the request.\n * @param [options] The optional parameters\n * @returns Promise\n */\n appendBlock(body: msRest.HttpRequestBody, contentLength: number, options?: Models.AppendBlobAppendBlockOptionalParams): Promise;\n /**\n * @param body Initial data\n * @param contentLength The length of the request.\n * @param callback The callback\n */\n appendBlock(body: msRest.HttpRequestBody, contentLength: number, callback: msRest.ServiceCallback): void;\n /**\n * @param body Initial data\n * @param contentLength The length of the request.\n * @param options The optional parameters\n * @param callback The callback\n */\n appendBlock(body: msRest.HttpRequestBody, contentLength: number, options: Models.AppendBlobAppendBlockOptionalParams, callback: msRest.ServiceCallback): void;\n appendBlock(body: msRest.HttpRequestBody, contentLength: number, options?: Models.AppendBlobAppendBlockOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n body,\n contentLength,\n options\n },\n appendBlockOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Append Block operation commits a new block of data to the end of an existing append blob\n * where the contents are read from a source url. The Append Block operation is permitted only if\n * the blob was created with x-ms-blob-type set to AppendBlob. Append Block is supported only on\n * version 2015-02-21 version or later.\n * @param sourceUrl Specify a URL to the copy source.\n * @param contentLength The length of the request.\n * @param [options] The optional parameters\n * @returns Promise\n */\n appendBlockFromUrl(sourceUrl: string, contentLength: number, options?: Models.AppendBlobAppendBlockFromUrlOptionalParams): Promise;\n /**\n * @param sourceUrl Specify a URL to the copy source.\n * @param contentLength The length of the request.\n * @param callback The callback\n */\n appendBlockFromUrl(sourceUrl: string, contentLength: number, callback: msRest.ServiceCallback): void;\n /**\n * @param sourceUrl Specify a URL to the copy source.\n * @param contentLength The length of the request.\n * @param options The optional parameters\n * @param callback The callback\n */\n appendBlockFromUrl(sourceUrl: string, contentLength: number, options: Models.AppendBlobAppendBlockFromUrlOptionalParams, callback: msRest.ServiceCallback): void;\n appendBlockFromUrl(sourceUrl: string, contentLength: number, options?: Models.AppendBlobAppendBlockFromUrlOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n sourceUrl,\n contentLength,\n options\n },\n appendBlockFromUrlOperationSpec,\n callback) as Promise;\n }\n}\n\n// Operation Specifications\nconst serializer = new msRest.Serializer(Mappers, true);\nconst createOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout\n ],\n headerParameters: [\n Parameters.contentLength,\n Parameters.metadata,\n Parameters.version,\n Parameters.requestId,\n Parameters.blobType1,\n Parameters.blobContentType,\n Parameters.blobContentEncoding,\n Parameters.blobContentLanguage,\n Parameters.blobContentMD5,\n Parameters.blobCacheControl,\n Parameters.blobContentDisposition,\n Parameters.leaseId0,\n Parameters.encryptionKey,\n Parameters.encryptionKeySha256,\n Parameters.encryptionAlgorithm,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n responses: {\n 201: {\n headersMapper: Mappers.AppendBlobCreateHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst appendBlockOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp15\n ],\n headerParameters: [\n Parameters.contentLength,\n Parameters.transactionalContentMD5,\n Parameters.transactionalContentCrc64,\n Parameters.version,\n Parameters.requestId,\n Parameters.leaseId0,\n Parameters.maxSize,\n Parameters.appendPosition,\n Parameters.encryptionKey,\n Parameters.encryptionKeySha256,\n Parameters.encryptionAlgorithm,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n requestBody: {\n parameterPath: \"body\",\n mapper: {\n required: true,\n serializedName: \"body\",\n type: {\n name: \"Stream\"\n }\n }\n },\n contentType: \"application/octet-stream\",\n responses: {\n 201: {\n headersMapper: Mappers.AppendBlobAppendBlockHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst appendBlockFromUrlOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp15\n ],\n headerParameters: [\n Parameters.sourceUrl,\n Parameters.sourceRange1,\n Parameters.sourceContentMD5,\n Parameters.sourceContentCrc64,\n Parameters.contentLength,\n Parameters.transactionalContentMD5,\n Parameters.version,\n Parameters.requestId,\n Parameters.encryptionKey,\n Parameters.encryptionKeySha256,\n Parameters.encryptionAlgorithm,\n Parameters.leaseId0,\n Parameters.maxSize,\n Parameters.appendPosition,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch,\n Parameters.sourceIfModifiedSince,\n Parameters.sourceIfUnmodifiedSince,\n Parameters.sourceIfMatch,\n Parameters.sourceIfNoneMatch\n ],\n responses: {\n 201: {\n headersMapper: Mappers.AppendBlobAppendBlockFromUrlHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for\n * license information.\n *\n * Code generated by Microsoft (R) AutoRest Code Generator.\n * Changes may cause incorrect behavior and will be lost if the code is\n * regenerated.\n */\n\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Models from \"../models\";\nimport * as Mappers from \"../models/blockBlobMappers\";\nimport * as Parameters from \"../models/parameters\";\nimport { StorageClientContext } from \"../storageClientContext\";\n\n/** Class representing a BlockBlob. */\nexport class BlockBlob {\n private readonly client: StorageClientContext;\n\n /**\n * Create a BlockBlob.\n * @param {StorageClientContext} client Reference to the service client.\n */\n constructor(client: StorageClientContext) {\n this.client = client;\n }\n\n /**\n * The Upload Block Blob operation updates the content of an existing block blob. Updating an\n * existing block blob overwrites any existing metadata on the blob. Partial updates are not\n * supported with Put Blob; the content of the existing blob is overwritten with the content of the\n * new blob. To perform a partial update of the content of a block blob, use the Put Block List\n * operation.\n * @param body Initial data\n * @param contentLength The length of the request.\n * @param [options] The optional parameters\n * @returns Promise\n */\n upload(body: msRest.HttpRequestBody, contentLength: number, options?: Models.BlockBlobUploadOptionalParams): Promise;\n /**\n * @param body Initial data\n * @param contentLength The length of the request.\n * @param callback The callback\n */\n upload(body: msRest.HttpRequestBody, contentLength: number, callback: msRest.ServiceCallback): void;\n /**\n * @param body Initial data\n * @param contentLength The length of the request.\n * @param options The optional parameters\n * @param callback The callback\n */\n upload(body: msRest.HttpRequestBody, contentLength: number, options: Models.BlockBlobUploadOptionalParams, callback: msRest.ServiceCallback): void;\n upload(body: msRest.HttpRequestBody, contentLength: number, options?: Models.BlockBlobUploadOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n body,\n contentLength,\n options\n },\n uploadOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Stage Block operation creates a new block to be committed as part of a blob\n * @param blockId A valid Base64 string value that identifies the block. Prior to encoding, the\n * string must be less than or equal to 64 bytes in size. For a given blob, the length of the value\n * specified for the blockid parameter must be the same size for each block.\n * @param contentLength The length of the request.\n * @param body Initial data\n * @param [options] The optional parameters\n * @returns Promise\n */\n stageBlock(blockId: string, contentLength: number, body: msRest.HttpRequestBody, options?: Models.BlockBlobStageBlockOptionalParams): Promise;\n /**\n * @param blockId A valid Base64 string value that identifies the block. Prior to encoding, the\n * string must be less than or equal to 64 bytes in size. For a given blob, the length of the value\n * specified for the blockid parameter must be the same size for each block.\n * @param contentLength The length of the request.\n * @param body Initial data\n * @param callback The callback\n */\n stageBlock(blockId: string, contentLength: number, body: msRest.HttpRequestBody, callback: msRest.ServiceCallback): void;\n /**\n * @param blockId A valid Base64 string value that identifies the block. Prior to encoding, the\n * string must be less than or equal to 64 bytes in size. For a given blob, the length of the value\n * specified for the blockid parameter must be the same size for each block.\n * @param contentLength The length of the request.\n * @param body Initial data\n * @param options The optional parameters\n * @param callback The callback\n */\n stageBlock(blockId: string, contentLength: number, body: msRest.HttpRequestBody, options: Models.BlockBlobStageBlockOptionalParams, callback: msRest.ServiceCallback): void;\n stageBlock(blockId: string, contentLength: number, body: msRest.HttpRequestBody, options?: Models.BlockBlobStageBlockOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n blockId,\n contentLength,\n body,\n options\n },\n stageBlockOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Stage Block operation creates a new block to be committed as part of a blob where the\n * contents are read from a URL.\n * @param blockId A valid Base64 string value that identifies the block. Prior to encoding, the\n * string must be less than or equal to 64 bytes in size. For a given blob, the length of the value\n * specified for the blockid parameter must be the same size for each block.\n * @param contentLength The length of the request.\n * @param sourceUrl Specify a URL to the copy source.\n * @param [options] The optional parameters\n * @returns Promise\n */\n stageBlockFromURL(blockId: string, contentLength: number, sourceUrl: string, options?: Models.BlockBlobStageBlockFromURLOptionalParams): Promise;\n /**\n * @param blockId A valid Base64 string value that identifies the block. Prior to encoding, the\n * string must be less than or equal to 64 bytes in size. For a given blob, the length of the value\n * specified for the blockid parameter must be the same size for each block.\n * @param contentLength The length of the request.\n * @param sourceUrl Specify a URL to the copy source.\n * @param callback The callback\n */\n stageBlockFromURL(blockId: string, contentLength: number, sourceUrl: string, callback: msRest.ServiceCallback): void;\n /**\n * @param blockId A valid Base64 string value that identifies the block. Prior to encoding, the\n * string must be less than or equal to 64 bytes in size. For a given blob, the length of the value\n * specified for the blockid parameter must be the same size for each block.\n * @param contentLength The length of the request.\n * @param sourceUrl Specify a URL to the copy source.\n * @param options The optional parameters\n * @param callback The callback\n */\n stageBlockFromURL(blockId: string, contentLength: number, sourceUrl: string, options: Models.BlockBlobStageBlockFromURLOptionalParams, callback: msRest.ServiceCallback): void;\n stageBlockFromURL(blockId: string, contentLength: number, sourceUrl: string, options?: Models.BlockBlobStageBlockFromURLOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n blockId,\n contentLength,\n sourceUrl,\n options\n },\n stageBlockFromURLOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Commit Block List operation writes a blob by specifying the list of block IDs that make up\n * the blob. In order to be written as part of a blob, a block must have been successfully written\n * to the server in a prior Put Block operation. You can call Put Block List to update a blob by\n * uploading only those blocks that have changed, then committing the new and existing blocks\n * together. You can do this by specifying whether to commit a block from the committed block list\n * or from the uncommitted block list, or to commit the most recently uploaded version of the\n * block, whichever list it may belong to.\n * @param blocks\n * @param [options] The optional parameters\n * @returns Promise\n */\n commitBlockList(blocks: Models.BlockLookupList, options?: Models.BlockBlobCommitBlockListOptionalParams): Promise;\n /**\n * @param blocks\n * @param callback The callback\n */\n commitBlockList(blocks: Models.BlockLookupList, callback: msRest.ServiceCallback): void;\n /**\n * @param blocks\n * @param options The optional parameters\n * @param callback The callback\n */\n commitBlockList(blocks: Models.BlockLookupList, options: Models.BlockBlobCommitBlockListOptionalParams, callback: msRest.ServiceCallback): void;\n commitBlockList(blocks: Models.BlockLookupList, options?: Models.BlockBlobCommitBlockListOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n blocks,\n options\n },\n commitBlockListOperationSpec,\n callback) as Promise;\n }\n\n /**\n * The Get Block List operation retrieves the list of blocks that have been uploaded as part of a\n * block blob\n * @param listType Specifies whether to return the list of committed blocks, the list of\n * uncommitted blocks, or both lists together. Possible values include: 'committed', 'uncommitted',\n * 'all'\n * @param [options] The optional parameters\n * @returns Promise\n */\n getBlockList(listType: Models.BlockListType, options?: Models.BlockBlobGetBlockListOptionalParams): Promise;\n /**\n * @param listType Specifies whether to return the list of committed blocks, the list of\n * uncommitted blocks, or both lists together. Possible values include: 'committed', 'uncommitted',\n * 'all'\n * @param callback The callback\n */\n getBlockList(listType: Models.BlockListType, callback: msRest.ServiceCallback): void;\n /**\n * @param listType Specifies whether to return the list of committed blocks, the list of\n * uncommitted blocks, or both lists together. Possible values include: 'committed', 'uncommitted',\n * 'all'\n * @param options The optional parameters\n * @param callback The callback\n */\n getBlockList(listType: Models.BlockListType, options: Models.BlockBlobGetBlockListOptionalParams, callback: msRest.ServiceCallback): void;\n getBlockList(listType: Models.BlockListType, options?: Models.BlockBlobGetBlockListOptionalParams | msRest.ServiceCallback, callback?: msRest.ServiceCallback): Promise {\n return this.client.sendOperationRequest(\n {\n listType,\n options\n },\n getBlockListOperationSpec,\n callback) as Promise;\n }\n}\n\n// Operation Specifications\nconst serializer = new msRest.Serializer(Mappers, true);\nconst uploadOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout\n ],\n headerParameters: [\n Parameters.contentLength,\n Parameters.metadata,\n Parameters.tier0,\n Parameters.version,\n Parameters.requestId,\n Parameters.blobType2,\n Parameters.blobContentType,\n Parameters.blobContentEncoding,\n Parameters.blobContentLanguage,\n Parameters.blobContentMD5,\n Parameters.blobCacheControl,\n Parameters.blobContentDisposition,\n Parameters.leaseId0,\n Parameters.encryptionKey,\n Parameters.encryptionKeySha256,\n Parameters.encryptionAlgorithm,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n requestBody: {\n parameterPath: \"body\",\n mapper: {\n required: true,\n serializedName: \"body\",\n type: {\n name: \"Stream\"\n }\n }\n },\n contentType: \"application/octet-stream\",\n responses: {\n 201: {\n headersMapper: Mappers.BlockBlobUploadHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst stageBlockOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.blockId,\n Parameters.timeout,\n Parameters.comp16\n ],\n headerParameters: [\n Parameters.contentLength,\n Parameters.transactionalContentMD5,\n Parameters.transactionalContentCrc64,\n Parameters.version,\n Parameters.requestId,\n Parameters.leaseId0,\n Parameters.encryptionKey,\n Parameters.encryptionKeySha256,\n Parameters.encryptionAlgorithm\n ],\n requestBody: {\n parameterPath: \"body\",\n mapper: {\n required: true,\n serializedName: \"body\",\n type: {\n name: \"Stream\"\n }\n }\n },\n contentType: \"application/octet-stream\",\n responses: {\n 201: {\n headersMapper: Mappers.BlockBlobStageBlockHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst stageBlockFromURLOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.blockId,\n Parameters.timeout,\n Parameters.comp16\n ],\n headerParameters: [\n Parameters.contentLength,\n Parameters.sourceUrl,\n Parameters.sourceRange1,\n Parameters.sourceContentMD5,\n Parameters.sourceContentCrc64,\n Parameters.version,\n Parameters.requestId,\n Parameters.encryptionKey,\n Parameters.encryptionKeySha256,\n Parameters.encryptionAlgorithm,\n Parameters.leaseId0,\n Parameters.sourceIfModifiedSince,\n Parameters.sourceIfUnmodifiedSince,\n Parameters.sourceIfMatch,\n Parameters.sourceIfNoneMatch\n ],\n responses: {\n 201: {\n headersMapper: Mappers.BlockBlobStageBlockFromURLHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst commitBlockListOperationSpec: msRest.OperationSpec = {\n httpMethod: \"PUT\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.timeout,\n Parameters.comp17\n ],\n headerParameters: [\n Parameters.transactionalContentMD5,\n Parameters.transactionalContentCrc64,\n Parameters.metadata,\n Parameters.tier0,\n Parameters.version,\n Parameters.requestId,\n Parameters.blobCacheControl,\n Parameters.blobContentType,\n Parameters.blobContentEncoding,\n Parameters.blobContentLanguage,\n Parameters.blobContentMD5,\n Parameters.blobContentDisposition,\n Parameters.leaseId0,\n Parameters.encryptionKey,\n Parameters.encryptionKeySha256,\n Parameters.encryptionAlgorithm,\n Parameters.ifModifiedSince,\n Parameters.ifUnmodifiedSince,\n Parameters.ifMatch,\n Parameters.ifNoneMatch\n ],\n requestBody: {\n parameterPath: \"blocks\",\n mapper: {\n ...Mappers.BlockLookupList,\n required: true\n }\n },\n contentType: \"application/xml; charset=utf-8\",\n responses: {\n 201: {\n headersMapper: Mappers.BlockBlobCommitBlockListHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n\nconst getBlockListOperationSpec: msRest.OperationSpec = {\n httpMethod: \"GET\",\n path: \"{containerName}/{blob}\",\n urlParameters: [\n Parameters.url\n ],\n queryParameters: [\n Parameters.snapshot,\n Parameters.listType,\n Parameters.timeout,\n Parameters.comp17\n ],\n headerParameters: [\n Parameters.version,\n Parameters.requestId,\n Parameters.leaseId0\n ],\n responses: {\n 200: {\n bodyMapper: Mappers.BlockList,\n headersMapper: Mappers.BlockBlobGetBlockListHeaders\n },\n default: {\n bodyMapper: Mappers.StorageError\n }\n },\n isXML: true,\n serializer\n};\n","// tslint:disable:max-line-length\n/**\n * Range for Blob Service Operations.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/specifying-the-range-header-for-blob-service-operations\n *\n * @export\n * @interface IRange\n */\nexport interface IRange {\n /**\n * StartByte, larger than or equal 0.\n *\n * @type {string}\n * @memberof IRange\n */\n offset: number;\n /**\n * Optional. Count of bytes, larger than 0.\n * If not provided, will return bytes from offset to the end.\n *\n * @type {string}\n * @memberof IRange\n */\n count?: number;\n}\n\n/**\n * Generate a range string. For example:\n *\n * \"bytes=255-\" or \"bytes=0-511\"\n *\n * @export\n * @param {IRange} iRange\n * @returns {string}\n */\nexport function rangeToString(iRange: IRange): string {\n if (iRange.offset < 0) {\n throw new RangeError(`IRange.offset cannot be smaller than 0.`);\n }\n if (iRange.count && iRange.count <= 0) {\n throw new RangeError(\n `IRange.count must be larger than 0. Leave it undefined if you want a range from offset to the end.`\n );\n }\n return iRange.count\n ? `bytes=${iRange.offset}-${iRange.offset + iRange.count - 1}`\n : `bytes=${iRange.offset}-`;\n}\n","export const SDK_VERSION: string = \"10.5.0\";\nexport const SERVICE_VERSION: string = \"2019-02-02\";\n\nexport const BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES: number = 256 * 1024 * 1024; // 256MB\nexport const BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES: number = 100 * 1024 * 1024; // 100MB\nexport const BLOCK_BLOB_MAX_BLOCKS: number = 50000;\nexport const DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES: number = 4 * 1024 * 1024; // 4MB\nexport const DEFAULT_MAX_DOWNLOAD_RETRY_REQUESTS: number = 5;\n\nexport const URLConstants = {\n Parameters: {\n FORCE_BROWSER_NO_CACHE: \"_\",\n SIGNATURE: \"sig\",\n SNAPSHOT: \"snapshot\",\n TIMEOUT: \"timeout\"\n }\n};\n\nexport const HTTPURLConnection = {\n HTTP_ACCEPTED: 202,\n HTTP_CONFLICT: 409,\n HTTP_NOT_FOUND: 404,\n HTTP_PRECON_FAILED: 412,\n HTTP_RANGE_NOT_SATISFIABLE: 416\n};\n\nexport const HeaderConstants = {\n AUTHORIZATION: \"Authorization\",\n AUTHORIZATION_SCHEME: \"Bearer\",\n CONTENT_ENCODING: \"Content-Encoding\",\n CONTENT_ID: \"Content-ID\",\n CONTENT_LANGUAGE: \"Content-Language\",\n CONTENT_LENGTH: \"Content-Length\",\n CONTENT_MD5: \"Content-Md5\",\n CONTENT_TRANSFER_ENCODING: \"Content-Transfer-Encoding\",\n CONTENT_TYPE: \"Content-Type\",\n COOKIE: \"Cookie\",\n DATE: \"date\",\n IF_MATCH: \"if-match\",\n IF_MODIFIED_SINCE: \"if-modified-since\",\n IF_NONE_MATCH: \"if-none-match\",\n IF_UNMODIFIED_SINCE: \"if-unmodified-since\",\n PREFIX_FOR_STORAGE: \"x-ms-\",\n RANGE: \"Range\",\n USER_AGENT: \"User-Agent\",\n X_MS_CLIENT_REQUEST_ID: \"x-ms-client-request-id\",\n X_MS_DATE: \"x-ms-date\",\n X_MS_ERROR_CODE: \"x-ms-error-code\",\n X_MS_VERSION: \"x-ms-version\"\n};\n\nexport const ETagNone = \"\";\nexport const ETagAny = \"*\";\n\nexport const SIZE_1_MB = 1 * 1024 * 1024;\nexport const BATCH_MAX_REQUEST = 256;\nexport const BATCH_MAX_PAYLOAD_IN_BYTES = 4 * SIZE_1_MB;\nexport const HTTP_LINE_ENDING = \"\\r\\n\";\nexport const HTTP_VERSION_1_1 = \"HTTP/1.1\";\n\nexport const EncryptionAlgorithmAES25 = \"AES256\";","import * as Models from \"./generated/src/models\";\nimport { EncryptionAlgorithmAES25 } from \"./utils/constants\";\n\nexport interface IMetadata {\n [propertyName: string]: string;\n}\n\nexport interface IContainerAccessConditions {\n modifiedAccessConditions?: Models.ModifiedAccessConditions;\n leaseAccessConditions?: Models.LeaseAccessConditions;\n}\n\nexport interface IBlobAccessConditions {\n modifiedAccessConditions?: Models.ModifiedAccessConditions;\n leaseAccessConditions?: Models.LeaseAccessConditions;\n}\n\nexport interface IPageBlobAccessConditions extends IBlobAccessConditions {\n sequenceNumberAccessConditions?: Models.SequenceNumberAccessConditions;\n}\n\nexport interface IAppendBlobAccessConditions extends IBlobAccessConditions {\n appendPositionAccessConditions?: Models.AppendPositionAccessConditions;\n}\n\nexport enum BlockBlobTier {\n Hot = \"Hot\",\n Cool = \"Cool\",\n Archive = \"Archive\"\n}\n\nexport enum PremiumPageBlobTier {\n P4 = \"P4\",\n P6 = \"P6\",\n P10 = \"P10\",\n P15 = \"P15\",\n P20 = \"P20\",\n P30 = \"P30\",\n P40 = \"P40\",\n P50 = \"P50\",\n P60 = \"P60\",\n P70 = \"P70\",\n P80 = \"P80\"\n}\n\nexport function toAccessTier(tier: BlockBlobTier | PremiumPageBlobTier | string | undefined): Models.AccessTier | undefined {\n if (tier == undefined) {\n return undefined;\n }\n\n return tier as Models.AccessTier; // No more check if string is a valid AccessTier, and left this to underlay logic to decide(service).\n}\n\nexport function ensureCpkIfSpecified(cpk: Models.CpkInfo | undefined, isHttps: boolean) {\n if (cpk && !isHttps) {\n throw new RangeError(\"Customer-provided encryption key must be used over HTTPS.\")\n }\n\n if (cpk && !cpk.encryptionAlgorithm) {\n cpk.encryptionAlgorithm = EncryptionAlgorithmAES25;\n }\n}","import { AbortSignalLike, isNode, URLBuilder } from \"@azure/ms-rest-js\";\n\n/**\n * Reserved URL characters must be properly escaped for Storage services like Blob or File.\n *\n * ## URL encode and escape strategy for JSv10 SDKs\n *\n * When customers pass a URL string into XXXURL classes constrcutor, the URL string may already be URL encoded or not.\n * But before sending to Azure Storage server, the URL must be encoded. However, it's hard for a SDK to guess whether the URL\n * string has been encoded or not. We have 2 potential strategies, and chose strategy two for the XXXURL constructors.\n *\n * ### Strategy One: Assume the customer URL string is not encoded, and always encode URL string in SDK.\n *\n * This is what legacy V2 SDK does, simple and works for most of the cases.\n * - When customer URL string is \"http://account.blob.core.windows.net/con/b:\",\n * SDK will encode it to \"http://account.blob.core.windows.net/con/b%3A\" and send to server. A blob named \"b:\" will be created.\n * - When customer URL string is \"http://account.blob.core.windows.net/con/b%3A\",\n * SDK will encode it to \"http://account.blob.core.windows.net/con/b%253A\" and send to server. A blob named \"b%3A\" will be created.\n *\n * But this strategy will make it not possible to create a blob with \"?\" in it's name. Because when customer URL string is\n * \"http://account.blob.core.windows.net/con/blob?name\", the \"?name\" will be treated as URL paramter instead of blob name.\n * If customer URL string is \"http://account.blob.core.windows.net/con/blob%3Fname\", a blob named \"blob%3Fname\" will be created.\n * V2 SDK doesn't have this issue because it doesn't allow customer pass in a full URL, it accepts a separate blob name and encodeURIComponent for it.\n * We cannot accept a SDK cannot create a blob name with \"?\". So we implement strategy two:\n *\n * ### Strategy Two: SDK doesn't assume the URL has been encoded or not. It will just escape the special characters.\n *\n * This is what V10 Blob Go SDK does. It accepts a URL type in Go, and call url.EscapedPath() to escape the special chars unescaped.\n * - When customer URL string is \"http://account.blob.core.windows.net/con/b:\",\n * SDK will escape \":\" like \"http://account.blob.core.windows.net/con/b%3A\" and send to server. A blob named \"b:\" will be created.\n * - When customer URL string is \"http://account.blob.core.windows.net/con/b%3A\",\n * There is no special characters, so send \"http://account.blob.core.windows.net/con/b%3A\" to server. A blob named \"b:\" will be created.\n * - When customer URL string is \"http://account.blob.core.windows.net/con/b%253A\",\n * There is no special characters, so send \"http://account.blob.core.windows.net/con/b%253A\" to server. A blob named \"b%3A\" will be created.\n *\n * This strategy gives us flexibility to create with any special characters. But \"%\" will be treated as a special characters, if the URL string\n * is not encoded, there shouldn't a \"%\" in the URL string, otherwise the URL is not a valid URL.\n * If customer needs to create a blob with \"%\" in it's blob name, use \"%25\" insead of \"%\". Just like above 3rd sample.\n * And following URL strings are invalid:\n * - \"http://account.blob.core.windows.net/con/b%\"\n * - \"http://account.blob.core.windows.net/con/b%2\"\n * - \"http://account.blob.core.windows.net/con/b%G\"\n *\n * Another special character is \"?\", use \"%2F\" to represent a blob name with \"?\" in a URL string.\n *\n * ### Strategy for containerName, blobName or other specific XXXName parameters in methods such as `BlobURL.fromContainerURL(containerURL, blobName)`\n *\n * We will apply strategy one, and call encodeURIComponent for these parameters like blobName. Because what customers passes in is a plain name instead of a URL.\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-shares--directories--files--and-metadata\n *\n * @export\n * @param {string} url\n * @returns {string}\n */\nexport function escapeURLPath(url: string): string {\n const urlParsed = URLBuilder.parse(url);\n\n let path = urlParsed.getPath();\n path = path || \"/\";\n\n path = escape(path);\n urlParsed.setPath(path);\n\n return urlParsed.toString();\n}\n\n/**\n * Internal escape method implmented Strategy Two mentioned in escapeURL() description.\n *\n * @param {string} text\n * @returns {string}\n */\nfunction escape(text: string): string {\n return encodeURIComponent(text)\n .replace(/%2F/g, \"/\") // Don't escape for \"/\"\n .replace(/'/g, \"%27\") // Escape for \"'\"\n .replace(/\\+/g, \"%20\")\n .replace(/%25/g, \"%\"); // Revert encoded \"%\"\n}\n\n/**\n * Append a string to URL path. Will remove duplicated \"/\" in front of the string\n * when URL path ends with a \"/\".\n *\n * @export\n * @param {string} url Source URL string\n * @param {string} name String to be appended to URL\n * @returns {string} An updated URL string\n */\nexport function appendToURLPath(url: string, name: string): string {\n const urlParsed = URLBuilder.parse(url);\n\n let path = urlParsed.getPath();\n path = path ? (path.endsWith(\"/\") ? `${path}${name}` : `${path}/${name}`) : name;\n urlParsed.setPath(path);\n\n return urlParsed.toString();\n}\n\n/**\n * Set URL parameter name and value. If name exists in URL parameters, old value\n * will be replaced by name key. If not provide value, the parameter will be deleted.\n *\n * @export\n * @param {string} url Source URL string\n * @param {string} name Parameter name\n * @param {string} [value] Parameter value\n * @returns {string} An updated URL string\n */\nexport function setURLParameter(url: string, name: string, value?: string): string {\n const urlParsed = URLBuilder.parse(url);\n urlParsed.setQueryParameter(name, value);\n return urlParsed.toString();\n}\n\n/**\n * Get URL parameter by name.\n *\n * @export\n * @param {string} url\n * @param {string} name\n * @returns {(string | string[] | undefined)}\n */\nexport function getURLParameter(url: string, name: string): string | string[] | undefined {\n const urlParsed = URLBuilder.parse(url);\n return urlParsed.getQueryParameterValue(name);\n}\n\n/**\n * Set URL host.\n *\n * @export\n * @param {string} url Source URL string\n * @param {string} host New host string\n * @returns An updated URL string\n */\nexport function setURLHost(url: string, host: string): string {\n const urlParsed = URLBuilder.parse(url);\n urlParsed.setHost(host);\n return urlParsed.toString();\n}\n\n/**\n * Get URL path from an URL string.\n *\n * @export\n * @param {string} url Source URL string\n * @returns {(string | undefined)}\n */\nexport function getURLPath(url: string): string | undefined {\n const urlParsed = URLBuilder.parse(url);\n return urlParsed.getPath();\n}\n\n/**\n * Get URL scheme from an URL string.\n *\n * @export\n * @param {string} url Source URL string\n * @returns {(string | undefined)}\n */\nexport function getURLScheme(url: string): string | undefined {\n const urlParsed = URLBuilder.parse(url);\n return urlParsed.getScheme();\n}\n\n/**\n * Get URL path and query from an URL string.\n *\n * @export\n * @param {string} url Source URL string\n * @returns {(string | undefined)}\n */\nexport function getURLPathAndQuery(url: string): string | undefined {\n const urlParsed = URLBuilder.parse(url);\n const pathString = urlParsed.getPath();\n if (!pathString) {\n throw new RangeError(\"Invalid url without valid path.\");\n }\n\n let queryString = urlParsed.getQuery() || \"\";\n queryString = queryString.trim();\n if (queryString != \"\") {\n queryString = queryString.startsWith(\"?\") ? queryString : `?${queryString}`; // Ensure query string start with '?'\n }\n\n return `${pathString}${queryString}`\n}\n\n/**\n * Get URL query key value pairs from an URL string.\n *\n * @export\n * @param {string} url\n * @returns {{[key: string]: string}}\n */\nexport function getURLQueries(url: string): { [key: string]: string } {\n let queryString = URLBuilder.parse(url).getQuery();\n if (!queryString) {\n return {};\n }\n\n queryString = queryString.trim();\n queryString = queryString.startsWith(\"?\") ? queryString.substr(1) : queryString;\n\n let querySubStrings: string[] = queryString.split(\"&\");\n querySubStrings = querySubStrings.filter((value: string) => {\n const indexOfEqual = value.indexOf(\"=\");\n const lastIndexOfEqual = value.lastIndexOf(\"=\");\n return (\n indexOfEqual > 0 && indexOfEqual === lastIndexOfEqual && lastIndexOfEqual < value.length - 1\n );\n });\n\n const queries: { [key: string]: string } = {};\n for (const querySubString of querySubStrings) {\n const splitResults = querySubString.split(\"=\");\n const key: string = splitResults[0];\n const value: string = splitResults[1];\n queries[key] = value;\n }\n\n return queries;\n}\n\n/**\n * Rounds a date off to seconds.\n *\n * @export\n * @param {Date} date\n * @param {boolean} [withMilliseconds=true] If true, YYYY-MM-DDThh:mm:ss.fffffffZ will be returned;\n * If false, YYYY-MM-DDThh:mm:ssZ will be returned.\n * @returns {string} Date string in ISO8061 format, with or without 7 milliseconds component\n */\nexport function truncatedISO8061Date(date: Date, withMilliseconds: boolean = true): string {\n // Date.toISOString() will return like \"2018-10-29T06:34:36.139Z\"\n const dateString = date.toISOString();\n\n return withMilliseconds\n ? dateString.substring(0, dateString.length - 1) + \"0000\" + \"Z\"\n : dateString.substring(0, dateString.length - 5) + \"Z\";\n}\n\n/**\n * Base64 encode.\n *\n * @export\n * @param {string} content\n * @returns {string}\n */\nexport function base64encode(content: string): string {\n return !isNode ? btoa(content) : Buffer.from(content).toString(\"base64\");\n}\n\n/**\n * Base64 decode.\n *\n * @export\n * @param {string} encodedString\n * @returns {string}\n */\nexport function base64decode(encodedString: string): string {\n return !isNode ? atob(encodedString) : Buffer.from(encodedString, \"base64\").toString();\n}\n\n/**\n * Generate a 64 bytes base64 block ID string.\n *\n * @export\n * @param {number} blockIndex\n * @returns {string}\n */\nexport function generateBlockID(blockIDPrefix: string, blockIndex: number): string {\n // To generate a 64 bytes base64 string, source string should be 48\n const maxSourceStringLength = 48;\n\n // A blob can have a maximum of 100,000 uncommitted blocks at any given time\n const maxBlockIndexLength = 6;\n\n const maxAllowedBlockIDPrefixLength = maxSourceStringLength - maxBlockIndexLength;\n\n if (blockIDPrefix.length > maxAllowedBlockIDPrefixLength) {\n blockIDPrefix = blockIDPrefix.slice(0, maxAllowedBlockIDPrefixLength);\n }\n const res =\n blockIDPrefix +\n padStart(blockIndex.toString(), maxSourceStringLength - blockIDPrefix.length, \"0\");\n return base64encode(res);\n}\n\n/**\n * Delay specified time interval.\n *\n * @export\n * @param {number} timeInMs\n * @param {AbortSignalLike} [aborter]\n * @param {Error} [abortError]\n */\nexport async function delay(timeInMs: number, aborter?: AbortSignalLike, abortError?: Error) {\n return new Promise((resolve, reject) => {\n let timeout: any;\n\n const abortHandler = () => {\n if (timeout !== undefined) {\n clearTimeout(timeout);\n }\n reject(abortError);\n }\n\n const resolveHandler = () => {\n if (aborter !== undefined) {\n aborter.removeEventListener(\"abort\", abortHandler);\n }\n resolve();\n };\n\n timeout = setTimeout(resolveHandler, timeInMs);\n if (aborter !== undefined) {\n aborter.addEventListener(\"abort\", abortHandler);\n }\n });\n}\n\n/**\n * String.prototype.padStart()\n *\n * @export\n * @param {string} currentString\n * @param {number} targetLength\n * @param {string} [padString=\" \"]\n * @returns {string}\n */\nexport function padStart(\n currentString: string,\n targetLength: number,\n padString: string = \" \"\n): string {\n if (String.prototype.padStart) {\n return currentString.padStart(targetLength, padString);\n }\n\n padString = padString || \" \";\n if (currentString.length > targetLength) {\n return currentString;\n } else {\n targetLength = targetLength - currentString.length;\n if (targetLength > padString.length) {\n padString += padString.repeat(targetLength / padString.length);\n }\n return padString.slice(0, targetLength) + currentString;\n }\n}\n\n/**\n * If two strings are equal when compared case insensitive.\n *\n * @export\n * @param {string} str1\n * @param {string} str2\n * @returns {boolean}\n */\nexport function iEqual(str1: string, str2: string): boolean {\n return str1.toLocaleLowerCase() === str2.toLocaleLowerCase();\n}","import {\n BaseRequestPolicy,\n HttpOperationResponse,\n isNode,\n RequestPolicy,\n RequestPolicyOptions,\n WebResource\n} from \"@azure/ms-rest-js\";\n\nimport { HeaderConstants, URLConstants } from \"../utils/constants\";\nimport { setURLParameter } from \"../utils/utils.common\";\n\n/**\n * BrowserPolicy will handle differences between Node.js and browser runtime, including:\n *\n * 1. Browsers cache GET/HEAD requests by adding conditional headers such as 'IF_MODIFIED_SINCE'.\n * BrowserPolicy is a policy used to add a timestamp query to GET/HEAD request URL\n * thus avoid the browser cache.\n *\n * 2. Remove cookie header for security\n *\n * 3. Remove content-length header to avoid browsers warning\n *\n * @class BrowserPolicy\n * @extends {BaseRequestPolicy}\n */\nexport class BrowserPolicy extends BaseRequestPolicy {\n /**\n * Creates an instance of BrowserPolicy.\n * @param {RequestPolicy} nextPolicy\n * @param {RequestPolicyOptions} options\n * @memberof BrowserPolicy\n */\n constructor(nextPolicy: RequestPolicy, options: RequestPolicyOptions) {\n super(nextPolicy, options);\n }\n\n /**\n * Sends out request.\n *\n * @param {WebResource} request\n * @returns {Promise}\n * @memberof BrowserPolicy\n */\n public async sendRequest(request: WebResource): Promise {\n if (isNode) {\n return this._nextPolicy.sendRequest(request);\n }\n\n if (request.method.toUpperCase() === \"GET\" || request.method.toUpperCase() === \"HEAD\") {\n request.url = setURLParameter(\n request.url,\n URLConstants.Parameters.FORCE_BROWSER_NO_CACHE,\n new Date().getTime().toString()\n );\n }\n\n request.headers.remove(HeaderConstants.COOKIE);\n\n // According to XHR standards, content-length should be fully controlled by browsers\n request.headers.remove(HeaderConstants.CONTENT_LENGTH);\n\n return this._nextPolicy.sendRequest(request);\n }\n}\n","import {\n AbortSignalLike,\n BaseRequestPolicy,\n HttpOperationResponse,\n HttpPipelineLogLevel,\n RequestPolicy,\n RequestPolicyFactory,\n RequestPolicyOptions,\n RestError,\n WebResource,\n} from \"@azure/ms-rest-js\";\n\nimport { IRetryOptions } from \"../RetryPolicyFactory\";\nimport { URLConstants } from \"../utils/constants\";\nimport { delay, setURLHost, setURLParameter } from \"../utils/utils.common\";\n\n/**\n * A factory method used to generated a RetryPolicy factory.\n *\n * @export\n * @param {IRetryOptions} retryOptions\n * @returns\n */\nexport function NewRetryPolicyFactory(retryOptions?: IRetryOptions): RequestPolicyFactory {\n return {\n create: (nextPolicy: RequestPolicy, options: RequestPolicyOptions): RetryPolicy => {\n return new RetryPolicy(nextPolicy, options, retryOptions);\n }\n };\n}\n\n/**\n * RetryPolicy types.\n *\n * @export\n * @enum {number}\n */\nexport enum RetryPolicyType {\n /**\n * Exponential retry. Retry time delay grows exponentially.\n */\n EXPONENTIAL,\n /**\n * Linear retry. Retry time delay grows linearly.\n */\n FIXED\n}\n\n// Default values of IRetryOptions\nconst DEFAULT_RETRY_OPTIONS: IRetryOptions = {\n maxRetryDelayInMs: 120 * 1000,\n maxTries: 4,\n retryDelayInMs: 4 * 1000,\n retryPolicyType: RetryPolicyType.EXPONENTIAL,\n secondaryHost: \"\",\n tryTimeoutInMs: undefined // Use server side default timeout strategy\n};\n\nconst RETRY_ABORT_ERROR = new RestError(\"The request was aborted\", RestError.REQUEST_ABORTED_ERROR);\n\n/**\n * Retry policy with exponential retry and linear retry implemented.\n *\n * @class RetryPolicy\n * @extends {BaseRequestPolicy}\n */\nexport class RetryPolicy extends BaseRequestPolicy {\n /**\n * RetryOptions.\n *\n * @private\n * @type {IRetryOptions}\n * @memberof RetryPolicy\n */\n private readonly retryOptions: IRetryOptions;\n\n /**\n * Creates an instance of RetryPolicy.\n *\n * @param {RequestPolicy} nextPolicy\n * @param {RequestPolicyOptions} options\n * @param {IRetryOptions} [retryOptions=DEFAULT_RETRY_OPTIONS]\n * @memberof RetryPolicy\n */\n constructor(\n nextPolicy: RequestPolicy,\n options: RequestPolicyOptions,\n retryOptions: IRetryOptions = DEFAULT_RETRY_OPTIONS\n ) {\n super(nextPolicy, options);\n\n // Initialize retry options\n this.retryOptions = {\n retryPolicyType: retryOptions.retryPolicyType\n ? retryOptions.retryPolicyType\n : DEFAULT_RETRY_OPTIONS.retryPolicyType,\n\n maxTries:\n retryOptions.maxTries && retryOptions.maxTries >= 1\n ? Math.floor(retryOptions.maxTries)\n : DEFAULT_RETRY_OPTIONS.maxTries,\n\n tryTimeoutInMs:\n retryOptions.tryTimeoutInMs && retryOptions.tryTimeoutInMs >= 0\n ? retryOptions.tryTimeoutInMs\n : DEFAULT_RETRY_OPTIONS.tryTimeoutInMs,\n\n retryDelayInMs:\n retryOptions.retryDelayInMs && retryOptions.retryDelayInMs >= 0\n ? Math.min(\n retryOptions.retryDelayInMs,\n retryOptions.maxRetryDelayInMs\n ? retryOptions.maxRetryDelayInMs\n : DEFAULT_RETRY_OPTIONS.maxRetryDelayInMs!\n )\n : DEFAULT_RETRY_OPTIONS.retryDelayInMs,\n\n maxRetryDelayInMs:\n retryOptions.maxRetryDelayInMs && retryOptions.maxRetryDelayInMs >= 0\n ? retryOptions.maxRetryDelayInMs\n : DEFAULT_RETRY_OPTIONS.maxRetryDelayInMs,\n\n secondaryHost: retryOptions.secondaryHost\n ? retryOptions.secondaryHost\n : DEFAULT_RETRY_OPTIONS.secondaryHost\n };\n }\n\n /**\n * Sends request.\n *\n * @param {WebResource} request\n * @returns {Promise}\n * @memberof RetryPolicy\n */\n public async sendRequest(request: WebResource): Promise {\n return this.attemptSendRequest(request, false, 1);\n }\n\n /**\n * Decide and perform next retry. Won't mutate request parameter.\n *\n * @protected\n * @param {WebResource} request\n * @param {HttpOperationResponse} response\n * @param {boolean} secondaryHas404 If attempt was against the secondary & it returned a StatusNotFound (404), then\n * the resource was not found. This may be due to replication delay. So, in this\n * case, we'll never try the secondary again for this operation.\n * @param {number} attempt How many retries has been attempted to performed, starting from 1, which includes\n * the attempt will be performed by this method call.\n * @returns {Promise}\n * @memberof RetryPolicy\n */\n protected async attemptSendRequest(\n request: WebResource,\n secondaryHas404: boolean,\n attempt: number\n ): Promise {\n const newRequest: WebResource = request.clone();\n\n const isPrimaryRetry =\n secondaryHas404 ||\n !this.retryOptions.secondaryHost ||\n !(request.method === \"GET\" || request.method === \"HEAD\" || request.method === \"OPTIONS\") ||\n attempt % 2 === 1;\n\n if (!isPrimaryRetry) {\n newRequest.url = setURLHost(newRequest.url, this.retryOptions.secondaryHost!);\n }\n\n // Set the server-side timeout query parameter \"timeout=[seconds]\"\n if (this.retryOptions.tryTimeoutInMs) {\n newRequest.url = setURLParameter(\n newRequest.url,\n URLConstants.Parameters.TIMEOUT,\n Math.floor(this.retryOptions.tryTimeoutInMs! / 1000).toString()\n );\n }\n\n let response: HttpOperationResponse | undefined;\n try {\n this.logf(\n HttpPipelineLogLevel.INFO,\n `RetryPolicy: =====> Try=${attempt} ${isPrimaryRetry ? \"Primary\" : \"Secondary\"}`\n );\n response = await this._nextPolicy.sendRequest(newRequest);\n if (!this.shouldRetry(isPrimaryRetry, attempt, response)) {\n return response;\n }\n\n secondaryHas404 = secondaryHas404 || (!isPrimaryRetry && response.status === 404);\n } catch (err) {\n this.logf(\n HttpPipelineLogLevel.ERROR,\n `RetryPolicy: Caught error, message: ${err.message}, code: ${err.code}`\n );\n if (!this.shouldRetry(isPrimaryRetry, attempt, response, err)) {\n throw err;\n }\n }\n\n await this.delay(isPrimaryRetry, attempt, request.abortSignal);\n return await this.attemptSendRequest(request, secondaryHas404, ++attempt);\n }\n\n /**\n * Decide whether to retry according to last HTTP response and retry counters.\n *\n * @protected\n * @param {boolean} isPrimaryRetry\n * @param {number} attempt\n * @param {HttpOperationResponse} [response]\n * @param {RestError} [err]\n * @returns {boolean}\n * @memberof RetryPolicy\n */\n protected shouldRetry(\n isPrimaryRetry: boolean,\n attempt: number,\n response?: HttpOperationResponse,\n err?: RestError\n ): boolean {\n if (attempt >= this.retryOptions.maxTries!) {\n this.logf(\n HttpPipelineLogLevel.INFO,\n `RetryPolicy: Attempt(s) ${attempt} >= maxTries ${this.retryOptions\n .maxTries!}, no further try.`\n );\n return false;\n }\n\n // Handle network failures, you may need to customize the list when you implement\n // your own http client\n const retriableErrors = [\n \"ETIMEDOUT\",\n \"ESOCKETTIMEDOUT\",\n \"ECONNREFUSED\",\n \"ECONNRESET\",\n \"ENOENT\",\n \"ENOTFOUND\",\n \"TIMEOUT\",\n \"REQUEST_SEND_ERROR\" // For default xhr based http client provided in ms-rest-js\n ];\n if (err) {\n for (const retriableError of retriableErrors) {\n if (\n err.name.toUpperCase().includes(retriableError) ||\n err.message.toUpperCase().includes(retriableError) ||\n (err.code && err.code.toString().toUpperCase().includes(retriableError))\n ) {\n this.logf(\n HttpPipelineLogLevel.INFO,\n `RetryPolicy: Network error ${retriableError} found, will retry.`\n );\n return true;\n }\n }\n }\n\n // If attempt was against the secondary & it returned a StatusNotFound (404), then\n // the resource was not found. This may be due to replication delay. So, in this\n // case, we'll never try the secondary again for this operation.\n if (response || err) {\n const statusCode = response ? response.status : err ? err.statusCode : 0;\n if (!isPrimaryRetry && statusCode === 404) {\n this.logf(HttpPipelineLogLevel.INFO, `RetryPolicy: Secondary access with 404, will retry.`);\n return true;\n }\n\n // Server internal error or server timeout\n if (statusCode === 503 || statusCode === 500) {\n this.logf(\n HttpPipelineLogLevel.INFO,\n `RetryPolicy: Will retry for status code ${statusCode}.`\n );\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * This is to log for debugging purposes only.\n * Comment/uncomment as necessary for releasing/debugging.\n *\n * @private\n * @param {HttpPipelineLogLevel} level\n * @param {string} message\n * @memberof RetryPolicy\n */\n // tslint:disable-next-line:variable-name\n private logf(_level: HttpPipelineLogLevel, _message: string) {\n // this.log(_level, _message);\n }\n\n /**\n * Delay a calculated time between retries.\n *\n * @private\n * @param {boolean} isPrimaryRetry\n * @param {number} attempt\n * @param {AbortSignalLike} [abortSignal]\n * @returns\n * @memberof RetryPolicy\n */\n private async delay(isPrimaryRetry: boolean, attempt: number, abortSignal?: AbortSignalLike) {\n let delayTimeInMs: number = 0;\n\n if (isPrimaryRetry) {\n switch (this.retryOptions.retryPolicyType) {\n case RetryPolicyType.EXPONENTIAL:\n delayTimeInMs = Math.min(\n (Math.pow(2, attempt - 1) - 1) * this.retryOptions.retryDelayInMs!,\n this.retryOptions.maxRetryDelayInMs!\n );\n break;\n case RetryPolicyType.FIXED:\n delayTimeInMs = this.retryOptions.retryDelayInMs!;\n break;\n }\n } else {\n delayTimeInMs = Math.random() * 1000;\n }\n\n this.logf(HttpPipelineLogLevel.INFO, `RetryPolicy: Delay for ${delayTimeInMs}ms`);\n return delay(delayTimeInMs, abortSignal, RETRY_ABORT_ERROR);\n }\n}\n","import { RequestPolicy, RequestPolicyFactory, RequestPolicyOptions } from \"@azure/ms-rest-js\";\n\nimport { BrowserPolicy } from \"./policies/BrowserPolicy\";\n\n/**\n * BrowserPolicyFactory is a factory class helping generating BrowserPolicy objects.\n *\n * @export\n * @class BrowserPolicyFactory\n * @implements {RequestPolicyFactory}\n */\nexport class BrowserPolicyFactory implements RequestPolicyFactory {\n public create(nextPolicy: RequestPolicy, options: RequestPolicyOptions): BrowserPolicy {\n return new BrowserPolicy(nextPolicy, options);\n }\n}\n","import { RequestPolicy, RequestPolicyFactory, RequestPolicyOptions } from \"@azure/ms-rest-js\";\n\nimport { CredentialPolicy } from \"../policies/CredentialPolicy\";\n\n/**\n * Credential is an abstract class for Azure Storage HTTP requests signing. This\n * class will host an credentialPolicyCreator factory which generates CredentialPolicy.\n *\n * @export\n * @abstract\n * @class Credential\n */\nexport abstract class Credential implements RequestPolicyFactory {\n /**\n * Creates a RequestPolicy object.\n *\n * @param {RequestPolicy} _nextPolicy\n * @param {RequestPolicyOptions} _options\n * @returns {RequestPolicy}\n * @memberof Credential\n */\n public create(\n // tslint:disable-next-line:variable-name\n _nextPolicy: RequestPolicy,\n // tslint:disable-next-line:variable-name\n _options: RequestPolicyOptions\n ): RequestPolicy {\n throw new Error(\"Method should be implemented in children classes.\");\n }\n}\n\n/**\n * A factory function that creates a new CredentialPolicy that uses the provided nextPolicy.\n */\nexport type CredentialPolicyCreator = (\n nextPolicy: RequestPolicy,\n options: RequestPolicyOptions\n) => CredentialPolicy;\n","/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for\n * license information.\n *\n * Code generated by Microsoft (R) AutoRest Code Generator.\n * Changes may cause incorrect behavior and will be lost if the code is\n * regenerated.\n */\n\nimport * as msRest from \"@azure/ms-rest-js\";\nimport * as Models from \"./models\";\n\nconst packageName = \"azure-storage-blob\";\nconst packageVersion = \"1.0.0\";\n\nexport class StorageClientContext extends msRest.ServiceClient {\n url: string;\n version: string;\n pathRenameMode?: Models.PathRenameMode;\n\n /**\n * Initializes a new instance of the StorageClientContext class.\n * @param url The URL of the service account, container, or blob that is the targe of the desired\n * operation.\n * @param [options] The parameter options\n */\n constructor(url: string, options?: Models.StorageClientOptions) {\n if (url == undefined) {\n throw new Error(\"'url' cannot be null.\");\n }\n\n if (!options) {\n options = {};\n }\n\n if (!options.userAgent) {\n const defaultUserAgent = msRest.getDefaultUserAgentValue();\n options.userAgent = `${packageName}/${packageVersion} ${defaultUserAgent}`;\n }\n\n super(undefined, options);\n\n this.version = '2019-02-02';\n this.baseUri = \"{url}\";\n this.requestContentType = \"application/json; charset=utf-8\";\n this.url = url;\n if (options.pathRenameMode !== null && options.pathRenameMode !== undefined) {\n this.pathRenameMode = options.pathRenameMode;\n }\n }\n}\n","import {\n BaseRequestPolicy,\n HttpOperationResponse,\n RequestPolicy,\n RequestPolicyOptions,\n WebResource,\n} from \"@azure/ms-rest-js\";\n\nimport { IKeepAliveOptions } from \"../KeepAlivePolicyFactory\";\n\n/**\n * KeepAlivePolicy is a policy used to control keep alive settings for every request.\n *\n * @class KeepAlivePolicy\n * @extends {BaseRequestPolicy}\n */\nexport class KeepAlivePolicy extends BaseRequestPolicy {\n /**\n * Creates an instance of KeepAlivePolicy.\n * \n * @param {RequestPolicy} nextPolicy\n * @param {RequestPolicyOptions} options\n * @param {IKeepAliveOptions} [keepAliveOptions]\n * @memberof KeepAlivePolicy\n */\n constructor(nextPolicy: RequestPolicy, options: RequestPolicyOptions, private readonly keepAliveOptions: IKeepAliveOptions) {\n super(nextPolicy, options);\n }\n\n /**\n * Sends out request.\n *\n * @param {WebResource} request\n * @returns {Promise}\n * @memberof KeepAlivePolicy\n */\n public async sendRequest(request: WebResource): Promise {\n request.keepAlive = this.keepAliveOptions.enable;\n return this._nextPolicy.sendRequest(request);\n }\n}\n","import { RequestPolicy, RequestPolicyFactory, RequestPolicyOptions } from \"@azure/ms-rest-js\";\n\nimport { KeepAlivePolicy } from \"./policies/KeepAlivePolicy\";\n\n/**\n * Interface of KeepAlivePolicy options.\n *\n * @export\n * @interface IKeepAliveOptions\n */\nexport interface IKeepAliveOptions {\n enable: boolean;\n}\n\n/**\n * KeepAlivePolicyFactory is a factory class helping generating KeepAlivePolicy objects.\n *\n * @export\n * @class KeepAlivePolicyFactory\n * @implements {RequestPolicyFactory}\n */\nexport class KeepAlivePolicyFactory implements RequestPolicyFactory {\n /**\n * Creates an instance of KeepAlivePolicyFactory.\n *\n * @param {IKeepAliveOptions} [telemetry]\n * @memberof KeepAlivePolicyFactory\n */\n constructor(private readonly keepAliveOptions: IKeepAliveOptions = { enable: true }) {}\n\n public create(nextPolicy: RequestPolicy, options: RequestPolicyOptions): KeepAlivePolicy {\n return new KeepAlivePolicy(nextPolicy, options, this.keepAliveOptions);\n }\n}\n","import {\n BaseRequestPolicy,\n HttpOperationResponse,\n HttpPipelineLogLevel,\n RequestPolicy,\n RequestPolicyOptions,\n WebResource\n} from \"@azure/ms-rest-js\";\n\nimport { IRequestLogOptions } from \"../LoggingPolicyFactory\";\nimport { HTTPURLConnection, URLConstants } from \"../utils/constants\";\nimport { getURLParameter, setURLParameter } from \"../utils/utils.common\";\n\n// Default values of IRetryOptions\nconst DEFAULT_REQUEST_LOG_OPTIONS: IRequestLogOptions = {\n logWarningIfTryOverThreshold: 3000\n};\n\n/**\n * LoggingPolicy is a policy used to log requests.\n *\n * @class LoggingPolicy\n * @extends {BaseRequestPolicy}\n */\nexport class LoggingPolicy extends BaseRequestPolicy {\n private tryCount: number = 0;\n private operationStartTime: Date = new Date();\n private requestStartTime: Date = new Date();\n\n private readonly loggingOptions: IRequestLogOptions;\n\n /**\n * Creates an instance of LoggingPolicy.\n * @param {RequestPolicy} nextPolicy\n * @param {RequestPolicyOptions} options\n * @param {IRequestLogOptions} [loggingOptions=DEFAULT_REQUEST_LOG_OPTIONS]\n * @memberof LoggingPolicy\n */\n constructor(\n nextPolicy: RequestPolicy,\n options: RequestPolicyOptions,\n loggingOptions: IRequestLogOptions = DEFAULT_REQUEST_LOG_OPTIONS\n ) {\n super(nextPolicy, options);\n this.loggingOptions = loggingOptions;\n }\n\n /**\n * Sends out request.\n *\n * @param {WebResource} request\n * @returns {Promise}\n * @memberof LoggingPolicy\n */\n public async sendRequest(request: WebResource): Promise {\n this.tryCount++;\n this.requestStartTime = new Date();\n if (this.tryCount === 1) {\n this.operationStartTime = this.requestStartTime;\n }\n\n let safeURL: string = request.url;\n if (getURLParameter(safeURL, URLConstants.Parameters.SIGNATURE)) {\n safeURL = setURLParameter(safeURL, URLConstants.Parameters.SIGNATURE, \"*****\");\n }\n this.log(\n HttpPipelineLogLevel.INFO,\n `'${safeURL}'==> OUTGOING REQUEST (Try number=${this.tryCount}).`\n );\n\n try {\n const response = await this._nextPolicy.sendRequest(request);\n\n const requestEndTime = new Date();\n const requestCompletionTime = requestEndTime.getTime() - this.requestStartTime.getTime();\n const operationDuration = requestEndTime.getTime() - this.operationStartTime.getTime();\n\n let currentLevel: HttpPipelineLogLevel = HttpPipelineLogLevel.INFO;\n let logMessage: string = \"\";\n if (this.shouldLog(HttpPipelineLogLevel.INFO)) {\n // Assume success and default to informational logging.\n logMessage = \"Successfully Received Response. \";\n }\n\n // If the response took too long, we'll upgrade to warning.\n if (requestCompletionTime >= this.loggingOptions.logWarningIfTryOverThreshold) {\n // Log a warning if the try duration exceeded the specified threshold.\n if (this.shouldLog(HttpPipelineLogLevel.WARNING)) {\n currentLevel = HttpPipelineLogLevel.WARNING;\n logMessage = `SLOW OPERATION. Duration > ${\n this.loggingOptions.logWarningIfTryOverThreshold\n } ms. `;\n }\n }\n\n if (\n (response.status >= 400 &&\n response.status <= 499 &&\n (response.status !== HTTPURLConnection.HTTP_NOT_FOUND &&\n response.status !== HTTPURLConnection.HTTP_CONFLICT &&\n response.status !== HTTPURLConnection.HTTP_PRECON_FAILED &&\n response.status !== HTTPURLConnection.HTTP_RANGE_NOT_SATISFIABLE)) ||\n (response.status >= 500 && response.status <= 509)\n ) {\n const errorString = `REQUEST ERROR: HTTP request failed with status code: ${\n response.status\n }. `;\n logMessage = errorString;\n\n currentLevel = HttpPipelineLogLevel.ERROR;\n }\n\n const messageInfo = `Request try:${this.tryCount}, status:${\n response.status\n } request duration:${requestCompletionTime} ms, operation duration:${operationDuration} ms\\n`;\n this.log(currentLevel, logMessage + messageInfo);\n\n return response;\n } catch (err) {\n this.log(\n HttpPipelineLogLevel.ERROR,\n `Unexpected failure attempting to make request. Error message: ${err.message}`\n );\n throw err;\n }\n }\n}\n","import { RequestPolicy, RequestPolicyFactory, RequestPolicyOptions } from \"@azure/ms-rest-js\";\n\nimport { LoggingPolicy } from \"./policies/LoggingPolicy\";\n\n/**\n * RequestLogOptions configures the retry policy's behavior.\n *\n * @export\n * @interface IRequestLogOptions\n */\nexport interface IRequestLogOptions {\n /**\n * LogWarningIfTryOverThreshold logs a warning if a tried operation takes longer than the specified\n * duration in ms. Default is 3000ms.\n * @type {number}\n * @memberof IRequestLogOptions\n */\n logWarningIfTryOverThreshold: number;\n}\n\n/**\n * LoggingPolicyFactory is a factory class helping generating LoggingPolicy objects.\n *\n * @export\n * @class LoggingPolicyFactory\n * @implements {RequestPolicyFactory}\n */\nexport class LoggingPolicyFactory implements RequestPolicyFactory {\n private readonly loggingOptions?: IRequestLogOptions;\n\n constructor(loggingOptions?: IRequestLogOptions) {\n this.loggingOptions = loggingOptions;\n }\n\n public create(nextPolicy: RequestPolicy, options: RequestPolicyOptions): LoggingPolicy {\n return new LoggingPolicy(nextPolicy, options, this.loggingOptions);\n }\n}\n","import {\n BaseRequestPolicy,\n HttpClient as IHttpClient,\n HttpHeaders,\n HttpOperationResponse,\n HttpPipelineLogger as IHttpPipelineLogger,\n HttpPipelineLogLevel,\n HttpRequestBody,\n RequestPolicy,\n RequestPolicyFactory,\n RequestPolicyOptions,\n ServiceClientOptions,\n WebResource\n} from \"@azure/ms-rest-js\";\n\n// Export following interfaces and types for customers who want to implement their\n// own RequestPolicy or HTTPClient\nexport {\n IHttpClient,\n IHttpPipelineLogger,\n HttpHeaders,\n HttpPipelineLogLevel,\n HttpRequestBody,\n HttpOperationResponse,\n WebResource,\n BaseRequestPolicy,\n RequestPolicyFactory,\n RequestPolicy,\n RequestPolicyOptions\n};\n\n/**\n * Option interface for Pipeline constructor.\n *\n * @export\n * @interface IPipelineOptions\n */\nexport interface IPipelineOptions {\n logger?: IHttpPipelineLogger;\n HTTPClient?: IHttpClient;\n}\n\n/**\n * A Pipeline class containing HTTP request policies.\n * You can create a default Pipeline by calling StorageURL.newPipeline().\n * Or you can create a Pipeline with your own policies by the constructor of Pipeline.\n * Refer to StorageURL.newPipeline() and provided policies as reference before\n * implementing your customized Pipeline.\n *\n * @export\n * @class Pipeline\n */\nexport class Pipeline {\n public readonly factories: RequestPolicyFactory[];\n public readonly options: IPipelineOptions;\n\n /**\n * Creates an instance of Pipeline. Customize HTTPClient by implementing IHttpClient interface.\n *\n * @param {RequestPolicyFactory[]} factories\n * @param {IPipelineOptions} [options={}]\n * @memberof Pipeline\n */\n constructor(factories: RequestPolicyFactory[], options: IPipelineOptions = {}) {\n this.factories = factories;\n this.options = options;\n }\n\n /**\n * Transfer Pipeline object to ServiceClientOptions object which required by\n * ServiceClient constructor.\n *\n * @returns {ServiceClientOptions}\n * @memberof Pipeline\n */\n public toServiceClientOptions(): ServiceClientOptions {\n return {\n httpClient: this.options.HTTPClient,\n httpPipelineLogger: this.options.logger,\n requestPolicyFactories: this.factories\n };\n }\n}\n","enum MutexLockStatus {\n LOCKED,\n UNLOCKED\n}\n\ntype Callback = (...args: any[]) => any;\n\n/**\n * An async mutex lock.\n *\n * @export\n * @class Mutex\n */\nexport class Mutex {\n /**\n * Lock for a specific key. If the lock has been acquired by another customer, then\n * will wait until getting the lock.\n *\n * @static\n * @param {string} key lock key\n * @returns {Promise}\n * @memberof Mutex\n */\n public static async lock(key: string): Promise {\n return new Promise((resolve) => {\n if (this.keys[key] === undefined || this.keys[key] === MutexLockStatus.UNLOCKED) {\n this.keys[key] = MutexLockStatus.LOCKED;\n resolve();\n } else {\n this.onUnlockEvent(key, () => {\n this.keys[key] = MutexLockStatus.LOCKED;\n resolve();\n });\n }\n });\n }\n\n /**\n * Unlock a key.\n *\n * @static\n * @param {string} key\n * @returns {Promise}\n * @memberof Mutex\n */\n public static async unlock(key: string): Promise {\n return new Promise((resolve) => {\n if (this.keys[key] === MutexLockStatus.LOCKED) {\n this.emitUnlockEvent(key);\n }\n delete this.keys[key];\n resolve();\n });\n }\n\n private static keys: {[key: string]: MutexLockStatus} = {};\n private static listeners: {[key: string]: Callback[]} = {};\n\n private static onUnlockEvent(key: string, handler: Callback) {\n if (this.listeners[key] === undefined) {\n this.listeners[key] = [handler];\n } else {\n this.listeners[key].push(handler);\n }\n }\n\n private static emitUnlockEvent(key: string) {\n if (this.listeners[key] !== undefined && this.listeners[key].length > 0) {\n const handler = this.listeners[key].shift();\n setImmediate(() => {\n handler!.call(this);\n });\n }\n }\n}\n","import { RequestPolicy, RequestPolicyFactory, RequestPolicyOptions } from \"@azure/ms-rest-js\";\n\nimport { RetryPolicy, RetryPolicyType } from \"./policies/RetryPolicy\";\n\nexport { RetryPolicyType } from \"./policies/RetryPolicy\";\n\n/**\n * Retry options interface.\n *\n * @export\n * @interface IRetryOptions\n */\nexport interface IRetryOptions {\n /**\n * Optional. RetryPolicyType, default is exponential retry policy.\n *\n * @type {RetryPolicyType}\n * @memberof RetryOptions\n */\n readonly retryPolicyType?: RetryPolicyType;\n\n /**\n * Optional. Max try number of attempts, default is 4.\n * A value of 1 means 1 try and no retries.\n * A value smaller than 1 means default retry number of attempts.\n *\n * @type {number}\n * @memberof IRetryOptions\n */\n readonly maxTries?: number;\n\n /**\n * Optional. Indicates the maximum time in ms allowed for any single try of an HTTP request.\n * A value of zero or undefined means no default timeout on SDK client, Azure\n * Storage server's default timeout policy will be used.\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/setting-timeouts-for-blob-service-operations\n *\n * @type {number}\n * @memberof IRetryOptions\n */\n readonly tryTimeoutInMs?: number;\n\n /**\n * Optional. Specifies the amount of delay to use before retrying an operation (default is 4s or 4 * 1000ms).\n * The delay increases (exponentially or linearly) with each retry up to a maximum specified by\n * maxRetryDelayInMs. If you specify 0, then you must also specify 0 for maxRetryDelayInMs.\n *\n * @type {number}\n * @memberof IRetryOptions\n */\n readonly retryDelayInMs?: number;\n\n /**\n * Optional. Specifies the maximum delay allowed before retrying an operation (default is 120s or 120 * 1000ms).\n * If you specify 0, then you must also specify 0 for retryDelayInMs.\n *\n * @type {number}\n * @memberof IRetryOptions\n */\n readonly maxRetryDelayInMs?: number;\n\n /**\n * If a secondaryHost is specified, retries will be tried against this host. If secondaryHost is undefined\n * (the default) then operations are not retried against another host.\n *\n * NOTE: Before setting this field, make sure you understand the issues around\n * reading stale and potentially-inconsistent data at\n * {@link https://docs.microsoft.com/en-us/azure/storage/common/storage-designing-ha-apps-with-ragrs}\n *\n * @type {string}\n * @memberof IRetryOptions\n */\n readonly secondaryHost?: string;\n}\n\n/**\n * RetryPolicyFactory is a factory class helping generating RetryPolicy objects.\n *\n * @export\n * @class RetryPolicyFactory\n * @implements {RequestPolicyFactory}\n */\nexport class RetryPolicyFactory implements RequestPolicyFactory {\n private retryOptions?: IRetryOptions;\n\n /**\n * Creates an instance of RetryPolicyFactory.\n * @param {IRetryOptions} [retryOptions]\n * @memberof RetryPolicyFactory\n */\n constructor(retryOptions?: IRetryOptions) {\n this.retryOptions = retryOptions;\n }\n\n public create(nextPolicy: RequestPolicy, options: RequestPolicyOptions): RetryPolicy {\n return new RetryPolicy(nextPolicy, options, this.retryOptions);\n }\n}\n","import {\n BaseRequestPolicy,\n HttpHeaders,\n HttpOperationResponse,\n isNode,\n RequestPolicy,\n RequestPolicyOptions,\n WebResource\n} from \"@azure/ms-rest-js\";\n\nimport { HeaderConstants } from \"../utils/constants\";\n\n/**\n * TelemetryPolicy is a policy used to tag user-agent header for every requests.\n *\n * @class TelemetryPolicy\n * @extends {BaseRequestPolicy}\n */\nexport class TelemetryPolicy extends BaseRequestPolicy {\n /**\n * Telemetry string.\n *\n * @type {string}\n * @memberof TelemetryPolicy\n */\n public readonly telemetry: string;\n\n /**\n * Creates an instance of TelemetryPolicy.\n * @param {RequestPolicy} nextPolicy\n * @param {RequestPolicyOptions} options\n * @param {ITelemetryOptions} [telemetry]\n * @memberof TelemetryPolicy\n */\n constructor(nextPolicy: RequestPolicy, options: RequestPolicyOptions, telemetry: string) {\n super(nextPolicy, options);\n this.telemetry = telemetry;\n }\n\n /**\n * Sends out request.\n *\n * @param {WebResource} request\n * @returns {Promise}\n * @memberof TelemetryPolicy\n */\n public async sendRequest(request: WebResource): Promise {\n if (isNode) {\n if (!request.headers) {\n request.headers = new HttpHeaders();\n }\n if (!request.headers.get(HeaderConstants.USER_AGENT)) {\n request.headers.set(HeaderConstants.USER_AGENT, this.telemetry);\n }\n }\n\n return this._nextPolicy.sendRequest(request);\n }\n}\n","import {\n isNode,\n RequestPolicy,\n RequestPolicyFactory,\n RequestPolicyOptions\n} from \"@azure/ms-rest-js\";\nimport * as os from \"os\";\n\nimport { TelemetryPolicy } from \"./policies/TelemetryPolicy\";\nimport { SDK_VERSION } from \"./utils/constants\";\n\n/**\n * Interface of TelemetryPolicy options.\n *\n * @export\n * @interface ITelemetryOptions\n */\nexport interface ITelemetryOptions {\n value: string;\n}\n\n/**\n * TelemetryPolicyFactory is a factory class helping generating TelemetryPolicy objects.\n *\n * @export\n * @class TelemetryPolicyFactory\n * @implements {RequestPolicyFactory}\n */\nexport class TelemetryPolicyFactory implements RequestPolicyFactory {\n private telemetryString: string;\n\n /**\n * Creates an instance of TelemetryPolicyFactory.\n * @param {ITelemetryOptions} [telemetry]\n * @memberof TelemetryPolicyFactory\n */\n constructor(telemetry?: ITelemetryOptions) {\n const userAgentInfo: string[] = [];\n\n if (isNode) {\n if (telemetry) {\n const telemetryString = telemetry.value;\n if (telemetryString.length > 0 && userAgentInfo.indexOf(telemetryString) === -1) {\n userAgentInfo.push(telemetryString);\n }\n }\n\n // e.g. Azure-Storage/10.0.0\n const libInfo = `Azure-Storage/${SDK_VERSION}`;\n if (userAgentInfo.indexOf(libInfo) === -1) {\n userAgentInfo.push(libInfo);\n }\n\n // e.g. (NODE-VERSION 4.9.1; Windows_NT 10.0.16299)\n const runtimeInfo = `(NODE-VERSION ${process.version}; ${os.type()} ${os.release()})`;\n if (userAgentInfo.indexOf(runtimeInfo) === -1) {\n userAgentInfo.push(runtimeInfo);\n }\n }\n\n this.telemetryString = userAgentInfo.join(\" \");\n }\n\n public create(nextPolicy: RequestPolicy, options: RequestPolicyOptions): TelemetryPolicy {\n return new TelemetryPolicy(nextPolicy, options, this.telemetryString);\n }\n}\n","import {\n BaseRequestPolicy,\n generateUuid,\n HttpOperationResponse,\n RequestPolicy,\n RequestPolicyOptions,\n WebResource\n} from \"@azure/ms-rest-js\";\n\nimport { HeaderConstants } from \"../utils/constants\";\n\n/**\n * UniqueRequestIDPolicy generates an UUID as x-ms-request-id header value.\n *\n * @class UniqueRequestIDPolicy\n * @extends {BaseRequestPolicy}\n */\nexport class UniqueRequestIDPolicy extends BaseRequestPolicy {\n /**\n * Creates an instance of UniqueRequestIDPolicy.\n * @param {RequestPolicy} nextPolicy\n * @param {RequestPolicyOptions} options\n * @memberof UniqueRequestIDPolicy\n */\n constructor(nextPolicy: RequestPolicy, options: RequestPolicyOptions) {\n super(nextPolicy, options);\n }\n\n /**\n * Sends request.\n *\n * @param {WebResource} request\n * @returns {Promise}\n * @memberof UniqueRequestIDPolicy\n */\n public async sendRequest(request: WebResource): Promise {\n if (!request.headers.contains(HeaderConstants.X_MS_CLIENT_REQUEST_ID)) {\n request.headers.set(HeaderConstants.X_MS_CLIENT_REQUEST_ID, generateUuid());\n }\n\n return this._nextPolicy.sendRequest(request);\n }\n}\n","import { RequestPolicy, RequestPolicyFactory, RequestPolicyOptions } from \"@azure/ms-rest-js\";\n\nimport { UniqueRequestIDPolicy } from \"./policies/UniqueRequestIDPolicy\";\n\n/**\n * UniqueRequestIDPolicyFactory is a factory class helping generating UniqueRequestIDPolicy objects.\n *\n * @export\n * @class UniqueRequestIDPolicyFactory\n * @implements {RequestPolicyFactory}\n */\nexport class UniqueRequestIDPolicyFactory implements RequestPolicyFactory {\n public create(nextPolicy: RequestPolicy, options: RequestPolicyOptions): UniqueRequestIDPolicy {\n return new UniqueRequestIDPolicy(nextPolicy, options);\n }\n}\n","import { BaseRequestPolicy, HttpOperationResponse, WebResource } from \"@azure/ms-rest-js\";\n\n/**\n * Credential policy used to sign HTTP(S) requests before sending. This is an\n * abstract class.\n *\n * @export\n * @abstract\n * @class CredentialPolicy\n * @extends {BaseRequestPolicy}\n */\nexport abstract class CredentialPolicy extends BaseRequestPolicy {\n /**\n * Sends out request.\n *\n * @param {WebResource} request\n * @returns {Promise}\n * @memberof CredentialPolicy\n */\n public sendRequest(request: WebResource): Promise {\n return this._nextPolicy.sendRequest(this.signRequest(request));\n }\n\n /**\n * Child classes must implement this method with request signing. This method\n * will be executed in sendRequest().\n *\n * @protected\n * @abstract\n * @param {WebResource} request\n * @returns {WebResource}\n * @memberof CredentialPolicy\n */\n protected signRequest(request: WebResource): WebResource {\n // Child classes must override this method with request signing. This method\n // will be executed in sendRequest().\n return request;\n }\n}\n","import { RequestPolicy, RequestPolicyOptions } from \"@azure/ms-rest-js\";\n\nimport { CredentialPolicy } from \"./CredentialPolicy\";\n\n/**\n * AnonymousCredentialPolicy is used with HTTP(S) requests that read public resources\n * or for use with Shared Access Signatures (SAS).\n *\n * @export\n * @class AnonymousCredentialPolicy\n * @extends {CredentialPolicy}\n */\nexport class AnonymousCredentialPolicy extends CredentialPolicy {\n /**\n * Creates an instance of AnonymousCredentialPolicy.\n * @param {RequestPolicy} nextPolicy\n * @param {RequestPolicyOptions} options\n * @memberof AnonymousCredentialPolicy\n */\n constructor(nextPolicy: RequestPolicy, options: RequestPolicyOptions) {\n super(nextPolicy, options);\n }\n}\n","import { RequestPolicy, RequestPolicyOptions } from \"@azure/ms-rest-js\";\n\nimport { AnonymousCredentialPolicy } from \"../policies/AnonymousCredentialPolicy\";\nimport { Credential } from \"./Credential\";\n\n/**\n * AnonymousCredential provides a credentialPolicyCreator member used to create\n * AnonymousCredentialPolicy objects. AnonymousCredentialPolicy is used with\n * HTTP(S) requests that read public resources or for use with Shared Access\n * Signatures (SAS).\n *\n * @export\n * @class AnonymousCredential\n * @extends {Credential}\n */\nexport class AnonymousCredential extends Credential {\n /**\n * Creates an AnonymousCredentialPolicy object.\n *\n * @param {RequestPolicy} nextPolicy\n * @param {RequestPolicyOptions} options\n * @returns {AnonymousCredentialPolicy}\n * @memberof AnonymousCredential\n */\n public create(\n nextPolicy: RequestPolicy,\n options: RequestPolicyOptions\n ): AnonymousCredentialPolicy {\n return new AnonymousCredentialPolicy(nextPolicy, options);\n }\n}\n","import { deserializationPolicy, RequestPolicyFactory } from \"@azure/ms-rest-js\";\n\nimport { BrowserPolicyFactory } from \"./BrowserPolicyFactory\";\nimport { Credential } from \"./credentials/Credential\";\nimport { StorageClientContext } from \"./generated/src/storageClientContext\";\nimport { IKeepAliveOptions, KeepAlivePolicyFactory } from \"./KeepAlivePolicyFactory\";\nimport { LoggingPolicyFactory } from \"./LoggingPolicyFactory\";\nimport { IHttpClient, IHttpPipelineLogger, Pipeline } from \"./Pipeline\";\nimport { IRetryOptions, RetryPolicyFactory } from \"./RetryPolicyFactory\";\nimport { ITelemetryOptions, TelemetryPolicyFactory } from \"./TelemetryPolicyFactory\";\nimport { UniqueRequestIDPolicyFactory } from \"./UniqueRequestIDPolicyFactory\";\nimport { escapeURLPath, getURLScheme, iEqual } from \"./utils/utils.common\";\nimport { AnonymousCredential } from './credentials/AnonymousCredential';\n\nexport { deserializationPolicy };\n\n/**\n * Option interface for Pipeline.newPipeline method.\n *\n * @export\n * @interface INewPipelineOptions\n */\nexport interface INewPipelineOptions {\n /**\n * Telemetry configures the built-in telemetry policy behavior.\n *\n * @type {ITelemetryOptions}\n * @memberof INewPipelineOptions\n */\n telemetry?: ITelemetryOptions;\n\n /**\n * Retry options.\n *\n * @type {IRetryOptions}\n * @memberof INewPipelineOptions\n */\n retryOptions?: IRetryOptions;\n\n /**\n * Keep alive configurations. Default keep-alive is enabled.\n *\n * @type {IKeepAliveOptions}\n * @memberof INewPipelineOptions\n */\n keepAliveOptions?: IKeepAliveOptions;\n\n logger?: IHttpPipelineLogger;\n httpClient?: IHttpClient;\n}\n\n/**\n * A ServiceURL represents a based URL class for ServiceURL, ContainerURL and etc.\n *\n * @export\n * @class StorageURL\n */\nexport abstract class StorageURL {\n /**\n * A static method used to create a new Pipeline object with Credential provided.\n *\n * @static\n * @param {Credential} credential Such as AnonymousCredential, SharedKeyCredential or TokenCredential.\n * @param {INewPipelineOptions} [pipelineOptions] Optional. Options.\n * @returns {Pipeline} A new Pipeline object.\n * @memberof Pipeline\n */\n public static newPipeline(\n credential: Credential,\n pipelineOptions: INewPipelineOptions = {}\n ): Pipeline {\n // Order is important. Closer to the API at the top & closer to the network at the bottom.\n // The credential's policy factory must appear close to the wire so it can sign any\n // changes made by other factories (like UniqueRequestIDPolicyFactory)\n const factories: RequestPolicyFactory[] = [\n new KeepAlivePolicyFactory(pipelineOptions.keepAliveOptions),\n new TelemetryPolicyFactory(pipelineOptions.telemetry),\n new UniqueRequestIDPolicyFactory(),\n new BrowserPolicyFactory(),\n deserializationPolicy(), // Default deserializationPolicy is provided by protocol layer\n new RetryPolicyFactory(pipelineOptions.retryOptions),\n new LoggingPolicyFactory(),\n credential\n ];\n\n return new Pipeline(factories, {\n HTTPClient: pipelineOptions.httpClient,\n logger: pipelineOptions.logger\n });\n }\n\n /**\n * Request policy pipeline.\n *\n * @internal\n * @type {Pipeline}\n * @memberof StorageURL\n */\n public readonly pipeline: Pipeline;\n\n /**\n * Encoded URL string value.\n *\n * @type {string}\n * @memberof StorageURL\n */\n public readonly url: string;\n\n /**\n * Credential used for authentication and authorization.\n *\n * @type {string}\n * @memberof StorageURL\n */\n public readonly credential: Credential;\n\n /**\n * StorageClient is a reference to protocol layer operations entry, which is\n * generated by AutoRest generator.\n *\n * @protected\n * @type {StorageClient}\n * @memberof StorageURL\n */\n protected readonly storageClientContext: StorageClientContext;\n\n /**\n * If the storage url is using https.\n * @param url \n * @param pipeline \n */\n protected readonly isHttps: boolean;\n\n /**\n * Creates an instance of StorageURL.\n * @param {string} url\n * @param {Pipeline} pipeline\n * @memberof StorageURL\n */\n protected constructor(url: string, pipeline: Pipeline) {\n // URL should be encoded and only once, protocol layer shouldn't encode URL again\n this.url = escapeURLPath(url);\n this.pipeline = pipeline;\n this.storageClientContext = new StorageClientContext(\n this.url,\n pipeline.toServiceClientOptions()\n );\n\n this.isHttps = iEqual(getURLScheme(this.url) || \"\", \"https\");\n\n this.credential = new AnonymousCredential();\n for (const factory of this.pipeline.factories) {\n if (factory instanceof Credential) {\n this.credential = factory;\n }\n }\n\n // Override protocol layer's default content-type\n const storageClientContext = this.storageClientContext as any;\n storageClientContext.requestContentType = undefined;\n }\n}\n","import { isNode, TransferProgressEvent } from \"@azure/ms-rest-js\";\n\nimport { Aborter } from \"./Aborter\";\nimport { BlobDownloadResponse } from \"./BlobDownloadResponse\";\nimport { ContainerURL } from \"./ContainerURL\";\nimport * as Models from \"./generated/src/models\";\nimport { Blob } from \"./generated/src/operations\";\nimport { rangeToString } from \"./IRange\";\nimport { IBlobAccessConditions, IMetadata, ensureCpkIfSpecified, BlockBlobTier, PremiumPageBlobTier, toAccessTier } from \"./models\";\nimport { Pipeline } from \"./Pipeline\";\nimport { StorageURL } from \"./StorageURL\";\nimport { DEFAULT_MAX_DOWNLOAD_RETRY_REQUESTS, URLConstants } from \"./utils/constants\";\nimport { appendToURLPath, setURLParameter } from \"./utils/utils.common\";\n\nexport interface IBlobDownloadOptions {\n /**\n * An opaque DateTime string value that, when present, specifies the blob snapshot to retrieve.\n */\n snapshot?: string;\n\n /**\n * When this is set to true and download range of blob, the service returns the MD5 hash for the range, \n * as long as the range is less than or equal to 4 MB in size.\n * \n * rangeGetContentCrc64 and rangeGetContentMD5 cannot be set at same time.\n */\n rangeGetContentMD5?: boolean;\n \n /**\n * When this is set to true and download range of blob, the service returns the CRC64 hash for the range, \n * as long as the range is less than or equal to 4 MB in size.\n * \n * rangeGetContentCrc64 and rangeGetContentMD5 cannot be set at same time.\n */\n rangeGetContentCrc64?: boolean;\n\n blobAccessConditions?: IBlobAccessConditions;\n progress?: (progress: TransferProgressEvent) => void;\n\n /**\n * Optional. ONLY AVAILABLE IN NODE.JS.\n *\n * How many retries will perform when original body download stream unexpected ends.\n * Above kind of ends will not trigger retry policy defined in a pipeline,\n * because they doesn't emit network errors.\n *\n * With this option, every additional retry means an additional FileURL.download() request will be made\n * from the broken point, until the requested range has been successfully downloaded or maxRetryRequests is reached.\n *\n * Default value is 5, please set a larger value when loading large files in poor network.\n *\n * @type {number}\n * @memberof IBlobDownloadOptions\n */\n maxRetryRequests?: number;\n\n customerProvidedKey?: Models.CpkInfo;\n}\n\nexport interface IBlobGetPropertiesOptions {\n blobAccessConditions?: IBlobAccessConditions;\n customerProvidedKey?: Models.CpkInfo;\n}\n\nexport interface IBlobDeleteOptions {\n blobAccessConditions?: IBlobAccessConditions;\n deleteSnapshots?: Models.DeleteSnapshotsOptionType;\n}\n\nexport interface IBlobSetHTTPHeadersOptions {\n blobAccessConditions?: IBlobAccessConditions;\n customerProvidedKey?: Models.CpkInfo;\n}\n\nexport interface IBlobSetMetadataOptions {\n blobAccessConditions?: IBlobAccessConditions;\n customerProvidedKey?: Models.CpkInfo;\n}\n\nexport interface IBlobAcquireLeaseOptions {\n modifiedAccessConditions?: Models.ModifiedAccessConditions;\n}\n\nexport interface IBlobReleaseLeaseOptions {\n modifiedAccessConditions?: Models.ModifiedAccessConditions;\n}\n\nexport interface IBlobRenewLeaseOptions {\n modifiedAccessConditions?: Models.ModifiedAccessConditions;\n}\n\nexport interface IBlobChangeLeaseOptions {\n modifiedAccessConditions?: Models.ModifiedAccessConditions;\n}\n\nexport interface IBlobBreakLeaseOptions {\n modifiedAccessConditions?: Models.ModifiedAccessConditions;\n}\n\nexport interface IBlobCreateSnapshotOptions {\n metadata?: IMetadata;\n blobAccessConditions?: IBlobAccessConditions;\n customerProvidedKey?: Models.CpkInfo;\n}\n\nexport interface IBlobStartCopyFromURLOptions {\n metadata?: IMetadata;\n blobAccessConditions?: IBlobAccessConditions;\n sourceModifiedAccessConditions?: Models.ModifiedAccessConditions;\n tier?: BlockBlobTier | PremiumPageBlobTier | string;\n rehydratePriority?: Models.RehydratePriority;\n}\n\nexport interface IBlobAbortCopyFromURLOptions {\n leaseAccessConditions?: Models.LeaseAccessConditions;\n}\n\nexport interface IBlobSyncCopyFromURLOptions {\n metadata?: IMetadata;\n blobAccessConditions?: IBlobAccessConditions;\n sourceModifiedAccessConditions?: Models.ModifiedAccessConditions;\n}\n\nexport interface IBlobSetTierOptions {\n leaseAccessConditions?: Models.LeaseAccessConditions;\n rehydratePriority?: Models.RehydratePriority;\n}\n\n/**\n * A BlobURL represents a URL to an Azure Storage blob; the blob may be a block blob,\n * append blob, or page blob.\n *\n * @export\n * @class BlobURL\n * @extends {StorageURL}\n */\nexport class BlobURL extends StorageURL {\n /**\n * Creates a BlobURL object from an ContainerURL object.\n *\n * @static\n * @param {ContainerURL} containerURL A ContainerURL object\n * @param {string} blobName A blob name\n * @returns\n * @memberof BlobURL\n */\n public static fromContainerURL(containerURL: ContainerURL, blobName: string) {\n return new BlobURL(\n appendToURLPath(containerURL.url, encodeURIComponent(blobName)),\n containerURL.pipeline\n );\n }\n\n /**\n * blobContext provided by protocol layer.\n *\n * @private\n * @type {Blobs}\n * @memberof BlobURL\n */\n private blobContext: Blob;\n\n /**\n * Creates an instance of BlobURL.\n * This method accepts an encoded URL or non-encoded URL pointing to a blob.\n * Encoded URL string will NOT be escaped twice, only special characters in URL path will be escaped.\n * If a blob name includes ? or %, blob name must be encoded in the URL.\n *\n * @param {string} url A URL string pointing to Azure Storage blob, such as\n * \"https://myaccount.blob.core.windows.net/mycontainer/blob\".\n * You can append a SAS if using AnonymousCredential, such as\n * \"https://myaccount.blob.core.windows.net/mycontainer/blob?sasString\".\n * This method accepts an encoded URL or non-encoded URL pointing to a blob.\n * Encoded URL string will NOT be escaped twice, only special characters in URL path will be escaped.\n * However, if a blob name includes ? or %, blob name must be encoded in the URL.\n * Such as a blob named \"my?blob%\", the URL should be \"https://myaccount.blob.core.windows.net/mycontainer/my%3Fblob%25\".\n * @param {Pipeline} pipeline Call StorageURL.newPipeline() to create a default\n * pipeline, or provide a customized pipeline.\n * @memberof BlobURL\n */\n constructor(url: string, pipeline: Pipeline) {\n super(url, pipeline);\n this.blobContext = new Blob(this.storageClientContext);\n }\n\n /**\n * Creates a new BlobURL object identical to the source but with the\n * specified request policy pipeline.\n *\n * @param {Pipeline} pipeline\n * @returns {BlobURL}\n * @memberof BlobURL\n */\n public withPipeline(pipeline: Pipeline): BlobURL {\n return new BlobURL(this.url, pipeline);\n }\n\n /**\n * Creates a new BlobURL object identical to the source but with the specified snapshot timestamp.\n * Provide \"\" will remove the snapshot and return a URL to the base blob.\n *\n * @param {string} snapshot\n * @returns {BlobURL} A new BlobURL object identical to the source but with the specified snapshot timestamp\n * @memberof BlobURL\n */\n public withSnapshot(snapshot: string): BlobURL {\n return new BlobURL(\n setURLParameter(\n this.url,\n URLConstants.Parameters.SNAPSHOT,\n snapshot.length === 0 ? undefined : snapshot\n ),\n this.pipeline\n );\n }\n\n /**\n * Reads or downloads a blob from the system, including its metadata and properties.\n * You can also call Get Blob to read a snapshot.\n *\n * * In Node.js, data returns in a Readable stream readableStreamBody\n * * In browsers, data returns in a promise blobBody\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {number} offset From which position of the blob to download, >= 0\n * @param {number} [count] How much data to be downloaded, > 0. Will download to the end when undefined\n * @param {IBlobDownloadOptions} [options]\n * @returns {Promise}\n * @memberof BlobURL\n */\n public async download(\n aborter: Aborter,\n offset: number,\n count?: number,\n options: IBlobDownloadOptions = {}\n ): Promise {\n options.blobAccessConditions = options.blobAccessConditions || {};\n options.blobAccessConditions.modifiedAccessConditions =\n options.blobAccessConditions.modifiedAccessConditions || {};\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n\n const res = await this.blobContext.download({\n abortSignal: aborter,\n leaseAccessConditions: options.blobAccessConditions.leaseAccessConditions,\n modifiedAccessConditions: options.blobAccessConditions.modifiedAccessConditions,\n onDownloadProgress: isNode ? undefined : options.progress,\n range: offset === 0 && !count ? undefined : rangeToString({ offset, count }),\n rangeGetContentMD5: options.rangeGetContentMD5,\n rangeGetContentCRC64: options.rangeGetContentCrc64,\n snapshot: options.snapshot,\n cpkInfo: options.customerProvidedKey\n });\n\n // Return browser response immediately\n if (!isNode) {\n return res;\n }\n\n // We support retrying when download stream unexpected ends in Node.js runtime\n // Following code shouldn't be bundled into browser build, however some\n // bundlers may try to bundle following code and \"FileReadResponse.ts\".\n // In this case, \"FileDownloadResponse.browser.ts\" will be used as a shim of \"FileDownloadResponse.ts\"\n // The config is in package.json \"browser\" field\n if (options.maxRetryRequests === undefined || options.maxRetryRequests < 0) {\n // TODO: Default value or make it a required parameter?\n options.maxRetryRequests = DEFAULT_MAX_DOWNLOAD_RETRY_REQUESTS;\n }\n\n if (res.contentLength === undefined) {\n throw new RangeError(`File download response doesn't contain valid content length header`);\n }\n\n if (!res.eTag) {\n throw new RangeError(`File download response doesn't contain valid etag header`);\n }\n\n return new BlobDownloadResponse(\n aborter,\n res,\n async (start: number): Promise => {\n const updatedOptions: Models.BlobDownloadOptionalParams = {\n leaseAccessConditions: options.blobAccessConditions!.leaseAccessConditions,\n modifiedAccessConditions: {\n ifMatch: options.blobAccessConditions!.modifiedAccessConditions!.ifMatch || res.eTag,\n ifModifiedSince: options.blobAccessConditions!.modifiedAccessConditions!\n .ifModifiedSince,\n ifNoneMatch: options.blobAccessConditions!.modifiedAccessConditions!.ifNoneMatch,\n ifUnmodifiedSince: options.blobAccessConditions!.modifiedAccessConditions!\n .ifUnmodifiedSince\n },\n range: rangeToString({\n count: offset + res.contentLength! - start,\n offset: start\n }),\n rangeGetContentMD5: options.rangeGetContentMD5,\n rangeGetContentCRC64: options.rangeGetContentCrc64,\n snapshot: options.snapshot,\n cpkInfo: options.customerProvidedKey\n };\n\n // Debug purpose only\n // console.log(\n // `Read from internal stream, range: ${\n // updatedOptions.range\n // }, options: ${JSON.stringify(updatedOptions)}`\n // );\n\n return (await this.blobContext.download({\n abortSignal: aborter,\n ...updatedOptions\n })).readableStreamBody!;\n },\n offset,\n res.contentLength!,\n {\n maxRetryRequests: options.maxRetryRequests,\n progress: options.progress\n }\n );\n }\n\n /**\n * Returns all user-defined metadata, standard HTTP properties, and system properties\n * for the blob. It does not return the content of the blob.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-properties\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {IBlobGetPropertiesOptions} [options]\n * @returns {Promise}\n * @memberof BlobURL\n */\n public async getProperties(\n aborter: Aborter,\n options: IBlobGetPropertiesOptions = {}\n ): Promise {\n options.blobAccessConditions = options.blobAccessConditions || {};\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n return this.blobContext.getProperties({\n abortSignal: aborter,\n leaseAccessConditions: options.blobAccessConditions.leaseAccessConditions,\n modifiedAccessConditions: options.blobAccessConditions.modifiedAccessConditions,\n cpkInfo: options.customerProvidedKey\n });\n }\n\n /**\n * Marks the specified blob or snapshot for deletion. The blob is later deleted\n * during garbage collection. Note that in order to delete a blob, you must delete\n * all of its snapshots. You can delete both at the same time with the Delete\n * Blob operation.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/delete-blob\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {IBlobDeleteOptions} [options]\n * @returns {Promise}\n * @memberof BlobURL\n */\n public async delete(\n aborter: Aborter,\n options: IBlobDeleteOptions = {}\n ): Promise {\n options.blobAccessConditions = options.blobAccessConditions || {};\n return this.blobContext.deleteMethod({\n abortSignal: aborter,\n deleteSnapshots: options.deleteSnapshots,\n leaseAccessConditions: options.blobAccessConditions.leaseAccessConditions,\n modifiedAccessConditions: options.blobAccessConditions.modifiedAccessConditions\n });\n }\n\n /**\n * Restores the contents and metadata of soft deleted blob and any associated\n * soft deleted snapshots. Undelete Blob is supported only on version 2017-07-29\n * or later.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/undelete-blob\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @returns {Promise}\n * @memberof BlobURL\n */\n public async undelete(aborter: Aborter): Promise {\n return this.blobContext.undelete({\n abortSignal: aborter\n });\n }\n\n /**\n * Sets system properties on the blob.\n *\n * If no value provided, or no value provided for the specificed blob HTTP headers,\n * these blob HTTP headers without a value will be cleared.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-properties\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {Models.BlobHTTPHeaders} [blobHTTPHeaders] If no value provided, or no value provided for\n * the specificed blob HTTP headers, these blob HTTP\n * headers without a value will be cleared.\n * @param {IBlobSetHTTPHeadersOptions} [options]\n * @returns {Promise}\n * @memberof BlobURL\n */\n public async setHTTPHeaders(\n aborter: Aborter,\n blobHTTPHeaders?: Models.BlobHTTPHeaders,\n options: IBlobSetHTTPHeadersOptions = {}\n ): Promise {\n options.blobAccessConditions = options.blobAccessConditions || {};\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n\n return this.blobContext.setHTTPHeaders({\n abortSignal: aborter,\n blobHTTPHeaders,\n leaseAccessConditions: options.blobAccessConditions.leaseAccessConditions,\n modifiedAccessConditions: options.blobAccessConditions.modifiedAccessConditions,\n cpkInfo: options.customerProvidedKey\n });\n }\n\n /**\n * Sets user-defined metadata for the specified blob as one or more name-value pairs.\n *\n * If no option provided, or no metadata defined in the parameter, the blob\n * metadata will be removed.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-metadata\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {IMetadata} [metadata] Replace existing metadata with this value.\n * If no value provided the existing metadata will be removed.\n * @param {IBlobSetMetadataOptions} [options]\n * @returns {Promise}\n * @memberof BlobURL\n */\n public async setMetadata(\n aborter: Aborter,\n metadata?: IMetadata,\n options: IBlobSetMetadataOptions = {}\n ): Promise {\n options.blobAccessConditions = options.blobAccessConditions || {};\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n\n return this.blobContext.setMetadata({\n abortSignal: aborter,\n leaseAccessConditions: options.blobAccessConditions.leaseAccessConditions,\n metadata,\n modifiedAccessConditions: options.blobAccessConditions.modifiedAccessConditions,\n cpkInfo: options.customerProvidedKey\n });\n }\n\n /**\n * Establishes and manages a lock on a blob for write and delete operations.\n * The lock duration can be 15 to 60 seconds, or can be infinite.\n * In versions prior to 2012-02-12, the lock duration is 60 seconds.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string} proposedLeaseId Can be specified in any valid GUID string format\n * @param {number} duration The lock duration can be 15 to 60 seconds, or can be infinite\n * @param {IBlobAcquireLeaseOptions} [options]\n * @returns {Promise}\n * @memberof BlobURL\n */\n public async acquireLease(\n aborter: Aborter,\n proposedLeaseId: string,\n duration: number,\n options: IBlobAcquireLeaseOptions = {}\n ): Promise {\n return this.blobContext.acquireLease({\n abortSignal: aborter,\n duration,\n modifiedAccessConditions: options.modifiedAccessConditions,\n proposedLeaseId\n });\n }\n\n /**\n * To free the lease if it is no longer needed so that another client may immediately\n * acquire a lease against the blob.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string} leaseId\n * @param {IBlobReleaseLeaseOptions} [options]\n * @returns {Promise}\n * @memberof BlobURL\n */\n public async releaseLease(\n aborter: Aborter,\n leaseId: string,\n options: IBlobReleaseLeaseOptions = {}\n ): Promise {\n return this.blobContext.releaseLease(leaseId, {\n abortSignal: aborter,\n modifiedAccessConditions: options.modifiedAccessConditions\n });\n }\n\n /**\n * To renew an existing lease.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string} leaseId\n * @param {IBlobRenewLeaseOptions} [options]\n * @returns {Promise}\n * @memberof BlobURL\n */\n public async renewLease(\n aborter: Aborter,\n leaseId: string,\n options: IBlobRenewLeaseOptions = {}\n ): Promise {\n return this.blobContext.renewLease(leaseId, {\n abortSignal: aborter,\n modifiedAccessConditions: options.modifiedAccessConditions\n });\n }\n\n /**\n * To change the ID of an existing lease.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string} leaseId\n * @param {string} proposedLeaseId\n * @param {IBlobChangeLeaseOptions} [options]\n * @returns {Promise}\n * @memberof BlobURL\n */\n public async changeLease(\n aborter: Aborter,\n leaseId: string,\n proposedLeaseId: string,\n options: IBlobChangeLeaseOptions = {}\n ): Promise {\n return this.blobContext.changeLease(leaseId, proposedLeaseId, {\n abortSignal: aborter,\n modifiedAccessConditions: options.modifiedAccessConditions\n });\n }\n\n /**\n * To end the lease but ensure that another client cannot acquire a new lease\n * until the current lease period has expired.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {number} [breakPeriod]\n * @param {IBlobBreakLeaseOptions} [options]\n * @returns {Promise}\n * @memberof BlobURL\n */\n public async breakLease(\n aborter: Aborter,\n breakPeriod?: number,\n options: IBlobBreakLeaseOptions = {}\n ): Promise {\n return this.blobContext.breakLease({\n abortSignal: aborter,\n breakPeriod,\n modifiedAccessConditions: options.modifiedAccessConditions\n });\n }\n\n /**\n * Creates a read-only snapshot of a blob.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/snapshot-blob\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {IBlobCreateSnapshotOptions} [options]\n * @returns {Promise}\n * @memberof BlobURL\n */\n public async createSnapshot(\n aborter: Aborter,\n options: IBlobCreateSnapshotOptions = {}\n ): Promise {\n options.blobAccessConditions = options.blobAccessConditions || {};\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n\n return this.blobContext.createSnapshot({\n abortSignal: aborter,\n leaseAccessConditions: options.blobAccessConditions.leaseAccessConditions,\n metadata: options.metadata,\n modifiedAccessConditions: options.blobAccessConditions.modifiedAccessConditions,\n cpkInfo: options.customerProvidedKey\n });\n }\n\n /**\n * Asynchronously copies a blob to a destination within the storage account.\n * In version 2012-02-12 and later, the source for a Copy Blob operation can be\n * a committed blob in any Azure storage account.\n * Beginning with version 2015-02-21, the source for a Copy Blob operation can be\n * an Azure file in any Azure storage account.\n * Only storage accounts created on or after June 7th, 2012 allow the Copy Blob\n * operation to copy from another storage account.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/copy-blob\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string} copySource\n * @param {IBlobStartCopyFromURLOptions} [options]\n * @returns {Promise}\n * @memberof BlobURL\n */\n public async startCopyFromURL(\n aborter: Aborter,\n copySource: string,\n options: IBlobStartCopyFromURLOptions = {}\n ): Promise {\n options.blobAccessConditions = options.blobAccessConditions || {};\n options.sourceModifiedAccessConditions = options.sourceModifiedAccessConditions || {};\n\n return this.blobContext.startCopyFromURL(copySource, {\n abortSignal: aborter,\n leaseAccessConditions: options.blobAccessConditions.leaseAccessConditions,\n metadata: options.metadata,\n modifiedAccessConditions: options.blobAccessConditions.modifiedAccessConditions,\n sourceModifiedAccessConditions: {\n sourceIfMatch: options.sourceModifiedAccessConditions.ifMatch,\n sourceIfModifiedSince: options.sourceModifiedAccessConditions.ifModifiedSince,\n sourceIfNoneMatch: options.sourceModifiedAccessConditions.ifNoneMatch,\n sourceIfUnmodifiedSince: options.sourceModifiedAccessConditions.ifUnmodifiedSince\n },\n rehydratePriority: options.rehydratePriority,\n tier: toAccessTier(options.tier)\n });\n }\n\n /**\n * Aborts a pending asynchronous Copy Blob operation, and leaves a destination blob with zero\n * length and full metadata. Version 2012-02-12 and newer.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/abort-copy-blob\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string} copyId\n * @param {IBlobAbortCopyFromURLOptions} [options]\n * @returns {Promise}\n * @memberof BlobURL\n */\n public async abortCopyFromURL(\n aborter: Aborter,\n copyId: string,\n options: IBlobAbortCopyFromURLOptions = {}\n ): Promise {\n return this.blobContext.abortCopyFromURL(copyId, {\n abortSignal: aborter,\n leaseAccessConditions: options.leaseAccessConditions\n });\n }\n\n /**\n * The synchronous Copy From URL operation copies a blob or an internet resource to a new blob. It will not\n * return a response until the copy is complete.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/copy-blob-from-url\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string} copySource The source URL to copy from, Shared Access Signature(SAS) maybe needed for authentication\n * @param {IBlobSyncCopyFromURLOptions} [options={}]\n * @returns {Promise}\n * @memberof BlobURL\n */\n public async syncCopyFromURL(\n aborter: Aborter,\n copySource: string,\n options: IBlobSyncCopyFromURLOptions = {}\n ): Promise {\n options.blobAccessConditions = options.blobAccessConditions || {};\n options.sourceModifiedAccessConditions = options.sourceModifiedAccessConditions || {};\n\n return this.blobContext.copyFromURL(copySource, {\n abortSignal: aborter,\n metadata: options.metadata,\n leaseAccessConditions: options.blobAccessConditions.leaseAccessConditions,\n modifiedAccessConditions: options.blobAccessConditions.modifiedAccessConditions,\n sourceModifiedAccessConditions: {\n sourceIfMatch: options.sourceModifiedAccessConditions.ifMatch,\n sourceIfModifiedSince: options.sourceModifiedAccessConditions.ifModifiedSince,\n sourceIfNoneMatch: options.sourceModifiedAccessConditions.ifNoneMatch,\n sourceIfUnmodifiedSince: options.sourceModifiedAccessConditions.ifUnmodifiedSince\n }\n });\n }\n\n /**\n * Sets the tier on a blob. The operation is allowed on a page blob in a premium\n * storage account and on a block blob in a blob storage account (locally redundant\n * storage only). A premium page blob's tier determines the allowed size, IOPS,\n * and bandwidth of the blob. A block blob's tier determines Hot/Cool/Archive\n * storage type. This operation does not update the blob's ETag.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-tier\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {BlockBlobTier | PremiumPageBlobTier | string} tier\n * @param {IBlobSetTierOptions} [options]\n * @returns {Promise}\n * @memberof BlobURL\n */\n public async setTier(\n aborter: Aborter,\n tier: BlockBlobTier | PremiumPageBlobTier | string,\n options: IBlobSetTierOptions = {}\n ): Promise {\n return await this.blobContext.setTier(\n toAccessTier(tier)!,\n {\n abortSignal: aborter,\n leaseAccessConditions: options.leaseAccessConditions,\n rehydratePriority: options.rehydratePriority\n });\n }\n}\n","// This file is used as a shim of \"BlobDownloadResponse\" for some browser bundlers\n// when trying to bundle \"BlobDownloadResponse\"\n// \"BlobDownloadResponse\" class is only available in Node.js runtime\nexport const BlobDownloadResponse = 1;\n","import { HttpRequestBody, TransferProgressEvent } from \"@azure/ms-rest-js\";\n\nimport { Aborter } from \"./Aborter\";\nimport { BlobURL } from \"./BlobURL\";\nimport { ContainerURL } from \"./ContainerURL\";\nimport * as Models from \"./generated/src/models\";\nimport { AppendBlob } from \"./generated/src/operations\";\nimport { rangeToString } from \"./IRange\";\nimport { IAppendBlobAccessConditions, IBlobAccessConditions, IMetadata, ensureCpkIfSpecified } from \"./models\";\nimport { Pipeline } from \"./Pipeline\";\nimport { URLConstants } from \"./utils/constants\";\nimport { appendToURLPath, setURLParameter } from \"./utils/utils.common\";\n\nexport interface IAppendBlobCreateOptions {\n accessConditions?: IBlobAccessConditions;\n blobHTTPHeaders?: Models.BlobHTTPHeaders;\n metadata?: IMetadata;\n customerProvidedKey?: Models.CpkInfo;\n}\n\nexport interface IAppendBlobAppendBlockOptions {\n accessConditions?: IAppendBlobAccessConditions;\n progress?: (progress: TransferProgressEvent) => void;\n\n /**\n * An MD5 hash of the block content. This hash is used to verify the integrity of the block during transport. \n * When this is specified, the storage service compares the hash of the content that has arrived with this value.\n * \n * transactionalContentMD5 and transactionalContentCrc64 cannot be set at same time.\n */\n transactionalContentMD5?: Uint8Array;\n\n /**\n * A CRC64 hash of the append block content. This hash is used to verify the integrity of the append block during transport. \n * When this is specified, the storage service compares the hash of the content that has arrived with this value.\n * \n * transactionalContentMD5 and transactionalContentCrc64 cannot be set at same time.\n */\n transactionalContentCrc64?: Uint8Array;\n\n customerProvidedKey?: Models.CpkInfo;\n}\n\nexport interface IAppendBlobAppendBlockFromURLOptions {\n accessConditions?: IAppendBlobAccessConditions;\n sourceModifiedAccessConditions?: Models.ModifiedAccessConditions;\n\n /**\n * An MD5 hash of the append block content from the URI. \n * This hash is used to verify the integrity of the append block during transport of the data from the URI. \n * When this is specified, the storage service compares the hash of the content that has arrived from the copy-source with this value.\n * \n * sourceContentMD5 and sourceContentCrc64 cannot be set at same time.\n */\n sourceContentMD5?: Uint8Array;\n\n /**\n * A CRC64 hash of the append block content from the URI. \n * This hash is used to verify the integrity of the append block during transport of the data from the URI. \n * When this is specified, the storage service compares the hash of the content that has arrived from the copy-source with this value.\n * \n * sourceContentMD5 and sourceContentCrc64 cannot be set at same time.\n */\n sourceContentCrc64?: Uint8Array;\n\n customerProvidedKey?: Models.CpkInfo;\n}\n\n/**\n * AppendBlobURL defines a set of operations applicable to append blobs.\n *\n * @export\n * @class AppendBlobURL\n * @extends {StorageURL}\n */\nexport class AppendBlobURL extends BlobURL {\n /**\n * Creates a AppendBlobURL object from ContainerURL instance.\n *\n * @static\n * @param {ContainerURL} containerURL A ContainerURL object\n * @param {string} blobName An append blob name\n * @returns {AppendBlobURL}\n * @memberof AppendBlobURL\n */\n public static fromContainerURL(containerURL: ContainerURL, blobName: string): AppendBlobURL {\n return new AppendBlobURL(\n appendToURLPath(containerURL.url, encodeURIComponent(blobName)),\n containerURL.pipeline\n );\n }\n\n /**\n * Creates a AppendBlobURL object from BlobURL instance.\n *\n * @static\n * @param {BlobURL} blobURL\n * @returns {AppendBlobURL}\n * @memberof AppendBlobURL\n */\n public static fromBlobURL(blobURL: BlobURL): AppendBlobURL {\n return new AppendBlobURL(blobURL.url, blobURL.pipeline);\n }\n\n /**\n * appendBlobsContext provided by protocol layer.\n *\n * @private\n * @type {AppendBlobs}\n * @memberof AppendBlobURL\n */\n private appendBlobContext: AppendBlob;\n\n /**\n * Creates an instance of AppendBlobURL.\n * This method accepts an encoded URL or non-encoded URL pointing to an append blob.\n * Encoded URL string will NOT be escaped twice, only special characters in URL path will be escaped.\n * If a blob name includes ? or %, blob name must be encoded in the URL.\n *\n * @param {string} url A URL string pointing to Azure Storage append blob, such as\n * \"https://myaccount.blob.core.windows.net/mycontainer/appendblob\". You can\n * append a SAS if using AnonymousCredential, such as\n * \"https://myaccount.blob.core.windows.net/mycontainer/appendblob?sasString\".\n * This method accepts an encoded URL or non-encoded URL pointing to a blob.\n * Encoded URL string will NOT be escaped twice, only special characters in URL path will be escaped.\n * However, if a blob name includes ? or %, blob name must be encoded in the URL.\n * Such as a blob named \"my?blob%\", the URL should be \"https://myaccount.blob.core.windows.net/mycontainer/my%3Fblob%25\".\n * @param {Pipeline} pipeline Call StorageURL.newPipeline() to create a default\n * pipeline, or provide a customized pipeline.\n * @memberof AppendBlobURL\n */\n constructor(url: string, pipeline: Pipeline) {\n super(url, pipeline);\n this.appendBlobContext = new AppendBlob(this.storageClientContext);\n }\n\n /**\n * Creates a new AppendBlobURL object identical to the source but with the\n * specified request policy pipeline.\n *\n * @param {Pipeline} pipeline\n * @returns {AppendBlobURL}\n * @memberof AppendBlobURL\n */\n public withPipeline(pipeline: Pipeline): AppendBlobURL {\n return new AppendBlobURL(this.url, pipeline);\n }\n\n /**\n * Creates a new AppendBlobURL object identical to the source but with the\n * specified snapshot timestamp.\n * Provide \"\" will remove the snapshot and return a URL to the base blob.\n *\n * @param {string} snapshot\n * @returns {AppendBlobURL}\n * @memberof AppendBlobURL\n */\n public withSnapshot(snapshot: string): AppendBlobURL {\n return new AppendBlobURL(\n setURLParameter(\n this.url,\n URLConstants.Parameters.SNAPSHOT,\n snapshot.length === 0 ? undefined : snapshot\n ),\n this.pipeline\n );\n }\n\n /**\n * Creates a 0-length append blob. Call AppendBlock to append data to an append blob.\n * @see https://docs.microsoft.com/rest/api/storageservices/put-blob\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {IAppendBlobCreateOptions} [options]\n * @returns {Promise}\n * @memberof AppendBlobURL\n */\n public async create(\n aborter: Aborter,\n options: IAppendBlobCreateOptions = {}\n ): Promise {\n options.accessConditions = options.accessConditions || {};\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n\n return this.appendBlobContext.create(0, {\n abortSignal: aborter,\n blobHTTPHeaders: options.blobHTTPHeaders,\n leaseAccessConditions: options.accessConditions.leaseAccessConditions,\n metadata: options.metadata,\n modifiedAccessConditions: options.accessConditions.modifiedAccessConditions,\n cpkInfo: options.customerProvidedKey\n });\n }\n\n /**\n * Commits a new block of data to the end of the existing append blob.\n * @see https://docs.microsoft.com/rest/api/storageservices/append-block\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {HttpRequestBody} body\n * @param {number} contentLength Length of the body in bytes\n * @param {IAppendBlobAppendBlockOptions} [options]\n * @returns {Promise}\n * @memberof AppendBlobURL\n */\n public async appendBlock(\n aborter: Aborter,\n body: HttpRequestBody,\n contentLength: number,\n options: IAppendBlobAppendBlockOptions = {}\n ): Promise {\n options.accessConditions = options.accessConditions || {};\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n\n return this.appendBlobContext.appendBlock(body, contentLength, {\n abortSignal: aborter,\n appendPositionAccessConditions: options.accessConditions.appendPositionAccessConditions,\n leaseAccessConditions: options.accessConditions.leaseAccessConditions,\n modifiedAccessConditions: options.accessConditions.modifiedAccessConditions,\n onUploadProgress: options.progress,\n transactionalContentMD5: options.transactionalContentMD5,\n transactionalContentCrc64: options.transactionalContentCrc64,\n cpkInfo: options.customerProvidedKey\n });\n }\n\n /**\n * The Append Block operation commits a new block of data to the end of an existing append blob\n * where the contents are read from a source url.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/append-block-from-url\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string} sourceURL \n * The url to the blob that will be the source of the copy. A source blob in the same storage account can\n * be authenticated via Shared Key. However, if the source is a blob in another account, the source blob\n * must either be public or must be authenticated via a shared access signature. If the source blob is\n * public, no authentication is required to perform the operation.\n * @param {number} sourceOffset Offset in source to be appended\n * @param {number} count Number of bytes to be appended as a block\n * @param {IAppendBlobAppendBlockFromURLOptions} [options={}]\n * @returns {Promise}\n * @memberof AppendBlobURL\n */\n public async appendBlockFromURL(\n aborter: Aborter,\n sourceURL: string,\n sourceOffset: number,\n count: number,\n options: IAppendBlobAppendBlockFromURLOptions = {}\n ): Promise {\n options.accessConditions = options.accessConditions || {};\n options.sourceModifiedAccessConditions = options.sourceModifiedAccessConditions || {};\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n \n return this.appendBlobContext.appendBlockFromUrl(sourceURL, 0, {\n abortSignal: aborter,\n sourceRange: rangeToString({offset: sourceOffset, count}),\n sourceContentMD5: options.sourceContentMD5,\n sourceContentCrc64: options.sourceContentCrc64,\n leaseAccessConditions: options.accessConditions.leaseAccessConditions,\n appendPositionAccessConditions: options.accessConditions.appendPositionAccessConditions,\n modifiedAccessConditions: options.accessConditions.modifiedAccessConditions,\n sourceModifiedAccessConditions: {\n sourceIfMatch: options.sourceModifiedAccessConditions.ifMatch,\n sourceIfModifiedSince: options.sourceModifiedAccessConditions.ifModifiedSince,\n sourceIfNoneMatch: options.sourceModifiedAccessConditions.ifNoneMatch,\n sourceIfUnmodifiedSince: options.sourceModifiedAccessConditions.ifUnmodifiedSince\n },\n cpkInfo: options.customerProvidedKey\n })\n }\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = $getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n ReflectApply(this.listener, this.target, args);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n","import {\n BaseRequestPolicy,\n deserializationPolicy,\n generateUuid,\n HttpHeaders,\n HttpOperationResponse,\n RequestPolicy,\n RequestPolicyFactory,\n RequestPolicyOptions,\n WebResource\n} from \"@azure/ms-rest-js\";\n\nimport { Aborter } from \"./Aborter\";\nimport { AnonymousCredential } from \"./credentials/AnonymousCredential\";\nimport { BlobURL, IBlobDeleteOptions, IBlobSetTierOptions } from \"./BlobURL\";\nimport { Credential } from \"./credentials/Credential\";\nimport * as Models from \"./generated/src/models\";\nimport { Mutex } from \"./utils/Mutex\";\nimport { Pipeline } from \"./Pipeline\";\nimport { getURLPath, getURLPathAndQuery, iEqual } from \"./utils/utils.common\";\nimport {\n HeaderConstants,\n BATCH_MAX_REQUEST,\n HTTP_VERSION_1_1,\n HTTP_LINE_ENDING\n} from \"./utils/constants\";\n\nexport interface BatchSubRequest {\n /**\n * The URL of the resource to request operation.\n */\n url: string;\n\n /**\n * The credential used for sub request.\n */\n credential: Credential;\n}\n\n/**\n * A BatchRequest represents a based class for BatchDeleteRequest and BatchSetTierRequest.\n *\n * @export\n * @class BatchRequest\n */\nexport abstract class BatchRequest {\n protected batchRequest: InnerBatchRequest;\n protected readonly batch: string = \"batch\";\n\n constructor() {\n this.batchRequest = new InnerBatchRequest();\n }\n\n /**\n * Get the value of Content-Type for a batch request.\n * The value must be multipart/mixed with a batch boundary.\n * Example: multipart/mixed; boundary=batch_a81786c8-e301-4e42-a729-a32ca24ae252\n */\n public getMultiPartContentType(): string {\n return this.batchRequest.getMultipartContentType();\n }\n\n /**\n * Get assembled HTTP request body for sub requests.\n */\n public getHttpRequestBody(): string {\n return this.batchRequest.getHttpRequestBody();\n }\n\n /**\n * Get sub requests that are added into the batch request.\n */\n public getSubRequests(): Map {\n return this.batchRequest.getSubRequests();\n }\n\n protected async addSubRequestInternal(subRequest: BatchSubRequest, assembleSubRequestFunc: ()=>Promise): Promise {\n await Mutex.lock(this.batch);\n\n try {\n this.batchRequest.preAddSubRequest(subRequest);\n await assembleSubRequestFunc();\n this.batchRequest.postAddSubRequest(subRequest);\n } finally {\n await Mutex.unlock(this.batch);\n }\n }\n}\n\n/**\n * A BatchDeleteRequest represents a batch delete request, which consists of one or more delete operations.\n *\n * @export\n * @class BatchDeleteRequest\n * @extends {BatchRequest}\n */\nexport class BatchDeleteRequest extends BatchRequest {\n constructor() {\n super();\n }\n\n /**\n * Add a delete operation(subrequest) to mark the specified blob or snapshot for deletion.\n * Note that in order to delete a blob, you must delete all of its snapshots. \n * You can delete both at the same time. See [delete operation details](https://docs.microsoft.com/en-us/rest/api/storageservices/delete-blob).\n * The operation(subrequest) will be authenticated and authorized with specified credential.\n * See [blob batch authorization details](https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch#authorization).\n *\n * @param {string} url The url of the blob resource to delete.\n * @param {Credential} credential The credential to be used for authentication and authorization.\n * @param {IBlobDeleteOptions} [options]\n * @returns {Promise}\n * @memberof BatchDeleteRequest\n */\n public async addSubRequest(\n url: string,\n credential: Credential,\n options?: IBlobDeleteOptions\n ): Promise;\n\n /**\n * Add a delete operation(subrequest) to mark the specified blob or snapshot for deletion.\n * Note that in order to delete a blob, you must delete all of its snapshots. \n * You can delete both at the same time. See [delete operation details](https://docs.microsoft.com/en-us/rest/api/storageservices/delete-blob).\n * The operation(subrequest) will be authenticated and authorized with specified credential.\n * See [blob batch authorization details](https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch#authorization).\n *\n * @param {blobUrl} BlobURL The BlobURL.\n * @param {IBlobDeleteOptions} [options]\n * @returns {Promise}\n * @memberof BatchDeleteRequest\n */\n public async addSubRequest(\n blobURL: BlobURL,\n options?: IBlobDeleteOptions\n ): Promise;\n\n public async addSubRequest(\n urlOrBlobURL: string | BlobURL,\n credentialOrOptions: Credential | IBlobDeleteOptions | undefined,\n options?: IBlobDeleteOptions\n ): Promise{\n let url: string;\n let credential: Credential;\n\n if (typeof urlOrBlobURL === 'string' && credentialOrOptions instanceof Credential) {\n // First overload\n url = urlOrBlobURL;\n credential = credentialOrOptions;\n } else if (urlOrBlobURL instanceof BlobURL) {\n // Second overload\n url = urlOrBlobURL.url;\n credential = urlOrBlobURL.credential;\n options = credentialOrOptions as IBlobDeleteOptions;\n } else {\n throw new RangeError(\"Invalid arguments. Either url and credential, or BlobURL need be provided.\")\n }\n\n if (!options) {\n options = {};\n }\n\n await super.addSubRequestInternal(\n {\n url: url,\n credential: credential\n },\n async () => {\n await new BlobURL(url, this.batchRequest.createPipeline(credential)).delete(\n Aborter.none,\n options\n );\n }\n )\n }\n}\n\n/**\n * A BatchSetTierRequest represents a batch set tier request, which consists of one or more set tier operations.\n *\n * @export\n * @class BatchSetTierRequest\n * @extends {BatchRequest}\n */\nexport class BatchSetTierRequest extends BatchRequest {\n constructor() {\n super();\n }\n\n /**\n * Add a set tier operation(subrequest) to set the tier on a blob.\n * The operation is allowed on a page blob in a premium\n * storage account and on a block blob in a blob storage account (locally redundant\n * storage only). A premium page blob's tier determines the allowed size, IOPS,\n * and bandwidth of the blob. A block blob's tier determines Hot/Cool/Archive\n * storage type. This operation does not update the blob's ETag.\n * See [set blob tier details](https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-tier).\n * The operation(subrequest) will be authenticated and authorized\n * with specified credential.See [blob batch authorization details](https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch#authorization).\n *\n * @param {string} url The url of the blob resource to delete.\n * @param {Credential} credential The credential to be used for authentication and authorization.\n * @param {Models.AccessTier} tier\n * @param {IBlobSetTierOptions} [options]\n * @returns {Promise}\n * @memberof BatchSetTierRequest\n */\n public async addSubRequest(\n url: string,\n credential: Credential,\n tier: Models.AccessTier,\n options?: IBlobSetTierOptions\n ): Promise;\n\n /**\n * Add a set tier operation(subrequest) to set the tier on a blob.\n * The operation is allowed on a page blob in a premium\n * storage account and on a block blob in a blob storage account (locally redundant\n * storage only). A premium page blob's tier determines the allowed size, IOPS,\n * and bandwidth of the blob. A block blob's tier determines Hot/Cool/Archive\n * storage type. This operation does not update the blob's ETag.\n * See [set blob tier details](https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-tier).\n * The operation(subrequest) will be authenticated and authorized\n * with specified credential.See [blob batch authorization details](https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch#authorization).\n *\n * @param {blobUrl} BlobURL The BlobURL.\n * @param {Models.AccessTier} tier\n * @param {IBlobSetTierOptions} [options]\n * @returns {Promise}\n * @memberof BatchSetTierRequest\n */\n public async addSubRequest(\n blobURL: BlobURL,\n tier: Models.AccessTier,\n options?: IBlobSetTierOptions\n ): Promise;\n\n public async addSubRequest(\n urlOrBlobURL: string | BlobURL,\n credentialOrTier: Credential | Models.AccessTier,\n tierOrOptions?: Models.AccessTier | IBlobSetTierOptions,\n options?: IBlobSetTierOptions\n ): Promise{\n let url: string;\n let credential: Credential;\n let tier: Models.AccessTier;\n\n if (typeof urlOrBlobURL === 'string' && credentialOrTier instanceof Credential) {\n // First overload\n url = urlOrBlobURL;\n credential = credentialOrTier as Credential;\n tier = tierOrOptions as Models.AccessTier;\n } else if (urlOrBlobURL instanceof BlobURL) {\n // Second overload\n url = urlOrBlobURL.url;\n credential = urlOrBlobURL.credential;\n tier = credentialOrTier as Models.AccessTier;\n options = tierOrOptions as IBlobSetTierOptions;\n } else {\n throw new RangeError(\"Invalid arguments. Either url and credential, or BlobURL need be provided.\")\n }\n\n if (!options) {\n options = {};\n }\n\n await super.addSubRequestInternal(\n {\n url: url,\n credential: credential\n },\n async () => {\n await new BlobURL(url, this.batchRequest.createPipeline(credential)).setTier(\n Aborter.none,\n tier,\n options\n );\n }\n )\n }\n}\n\n/**\n * Inner batch request class which is responsible for assembling and serializing sub requests.\n * See https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch#request-body for how request get assembled.\n */\nclass InnerBatchRequest {\n private operationCount: number;\n private body: string;\n private subRequests: Map;\n private readonly boundary: string;\n private readonly subRequestPrefix: string;\n private readonly multipartContentType: string;\n private readonly batchRequestEnding: string;\n\n constructor() {\n this.operationCount = 0;\n this.body = \"\";\n\n let tempGuid = generateUuid();\n\n // batch_{batchid}\n this.boundary = `batch_${tempGuid}`;\n // --batch_{batchid}\n // Content-Type: application/http\n // Content-Transfer-Encoding: binary\n this.subRequestPrefix = `--${this.boundary}${HTTP_LINE_ENDING}${HeaderConstants.CONTENT_TYPE}: application/http${HTTP_LINE_ENDING}${HeaderConstants.CONTENT_TRANSFER_ENCODING}: binary`;\n // multipart/mixed; boundary=batch_{batchid}\n this.multipartContentType = `multipart/mixed; boundary=${this.boundary}`;\n // --batch_{batchid}--\n this.batchRequestEnding = `--${this.boundary}--`;\n\n this.subRequests = new Map();\n }\n\n /**\n * Create pipeline to assemble sub requests. The idea here is to use exising\n * credential and serialization/deserialization components, with additional policies to \n * filter unnecessary headers, assemble sub requests into request's body \n * and intercept request from going to wire.\n * @param credential\n */\n public createPipeline(credential: Credential): Pipeline {\n const isAnonymousCreds = credential instanceof AnonymousCredential;\n const policyFactoryLength = 3 + (isAnonymousCreds ? 0 : 1); // [deserilizationPolicy, BatchHeaderFilterPolicyFactory, (Optional)Credential, BatchRequestAssemblePolicyFactory]\n let factories: RequestPolicyFactory[] = new Array(policyFactoryLength);\n\n factories[0] = deserializationPolicy(); // Default deserializationPolicy is provided by protocol layer\n factories[1] = new BatchHeaderFilterPolicyFactory(); // Use batch header filter policy to exclude unnecessary headers\n if (!isAnonymousCreds) {\n factories[2] = credential;\n }\n factories[policyFactoryLength - 1] = new BatchRequestAssemblePolicyFactory(this); // Use batch assemble policy to assemble request and intercept request from going to wire\n\n return new Pipeline(factories, {});\n }\n\n public appendSubRequestToBody(request: WebResource) {\n // Start to assemble sub request\n this.body +=\n [\n this.subRequestPrefix, // sub request constant prefix\n `${HeaderConstants.CONTENT_ID}: ${this.operationCount}`, // sub request's content ID\n \"\", // empty line after sub request's content ID\n `${request.method.toString()} ${getURLPathAndQuery(request.url)} ${HTTP_VERSION_1_1}${HTTP_LINE_ENDING}` // sub request start line with method\n ].join(HTTP_LINE_ENDING);\n\n for (const header of request.headers.headersArray()) {\n this.body += `${header.name}: ${header.value}${HTTP_LINE_ENDING}`;\n }\n\n this.body += HTTP_LINE_ENDING; // sub request's headers need be ending with an empty line\n // No body to assemble for current batch request support\n // End to assemble sub request\n }\n\n public preAddSubRequest(subRequest: BatchSubRequest) {\n if (this.operationCount >= BATCH_MAX_REQUEST) {\n throw new RangeError(`Cannot exceed ${BATCH_MAX_REQUEST} sub requests in a single batch`);\n }\n\n // Fast fail if url for sub request is invalid\n const path = getURLPath(subRequest.url);\n if ( !path || path == \"\") {\n throw new RangeError(`Invalid url for sub request: '${subRequest.url}'`);\n }\n }\n\n public postAddSubRequest(subRequest: BatchSubRequest) {\n this.subRequests.set(this.operationCount, subRequest);\n this.operationCount++;\n }\n\n // Return the http request body with assembling the ending line to the sub request body.\n public getHttpRequestBody(): string {\n return `${this.body}${this.batchRequestEnding}${HTTP_LINE_ENDING}`;\n }\n\n public getMultipartContentType(): string {\n return this.multipartContentType;\n }\n\n public getSubRequests(): Map {\n return this.subRequests;\n }\n}\n\nclass BatchRequestAssemblePolicy extends BaseRequestPolicy {\n private batchRequest: InnerBatchRequest;\n private readonly dummyResponse: HttpOperationResponse = {\n request: new WebResource(),\n status: 200,\n headers: new HttpHeaders()\n };;\n\n constructor(\n batchRequest: InnerBatchRequest,\n nextPolicy: RequestPolicy,\n options: RequestPolicyOptions\n ) {\n super(nextPolicy, options);\n\n this.batchRequest = batchRequest;\n }\n\n public async sendRequest(request: WebResource): Promise {\n await this.batchRequest.appendSubRequestToBody(request);\n\n return this.dummyResponse; // Intercept request from going to wire\n }\n}\n\nclass BatchRequestAssemblePolicyFactory implements RequestPolicyFactory {\n private batchRequest: InnerBatchRequest;\n\n constructor(batchRequest: InnerBatchRequest) {\n this.batchRequest = batchRequest;\n }\n\n public create(nextPolicy: RequestPolicy, options: RequestPolicyOptions): BatchRequestAssemblePolicy {\n return new BatchRequestAssemblePolicy(this.batchRequest, nextPolicy, options);\n }\n}\n\nclass BatchHeaderFilterPolicy extends BaseRequestPolicy {\n constructor(nextPolicy: RequestPolicy, options: RequestPolicyOptions) {\n super(nextPolicy, options);\n }\n\n public async sendRequest(request: WebResource): Promise {\n let xMsHeaderName = \"\";\n\n for (const header of request.headers.headersArray()) {\n if (iEqual(header.name, HeaderConstants.X_MS_VERSION)) {\n xMsHeaderName = header.name;\n }\n }\n\n if (xMsHeaderName !== \"\")\n {\n request.headers.remove(xMsHeaderName); // The subrequests should not have the x-ms-version header.\n }\n\n return this._nextPolicy.sendRequest(request);\n }\n}\n\nclass BatchHeaderFilterPolicyFactory implements RequestPolicyFactory {\n constructor() {}\n\n public create(nextPolicy: RequestPolicy, options: RequestPolicyOptions): BatchHeaderFilterPolicy {\n return new BatchHeaderFilterPolicy(nextPolicy, options);\n }\n}","import { HttpRequestBody, TransferProgressEvent } from \"@azure/ms-rest-js\";\n\nimport { Aborter } from \"./Aborter\";\nimport { BlobURL } from \"./BlobURL\";\nimport { ContainerURL } from \"./ContainerURL\";\nimport * as Models from \"./generated/src/models\";\nimport { BlockBlob } from \"./generated/src/operations\";\nimport { IRange, rangeToString } from \"./IRange\";\nimport { IBlobAccessConditions, IMetadata, ensureCpkIfSpecified, BlockBlobTier, toAccessTier } from \"./models\";\nimport { Pipeline } from \"./Pipeline\";\nimport { URLConstants } from \"./utils/constants\";\nimport { appendToURLPath, setURLParameter } from \"./utils/utils.common\";\n\nexport interface IBlockBlobUploadOptions {\n accessConditions?: IBlobAccessConditions;\n blobHTTPHeaders?: Models.BlobHTTPHeaders;\n metadata?: IMetadata;\n progress?: (progress: TransferProgressEvent) => void;\n customerProvidedKey?: Models.CpkInfo;\n tier?: BlockBlobTier | string;\n}\n\nexport interface IBlockBlobStageBlockOptions {\n leaseAccessConditions?: Models.LeaseAccessConditions;\n progress?: (progress: TransferProgressEvent) => void;\n\n /**\n * An MD5 hash of the block content. This hash is used to verify the integrity of the block during transport. \n * When this is specified, the storage service compares the hash of the content that has arrived with this value.\n * \n * transactionalContentMD5 and transactionalContentCrc64 cannot be set at same time.\n */\n transactionalContentMD5?: Uint8Array;\n\n /**\n * A CRC64 hash of the block content. This hash is used to verify the integrity of the block during transport. \n * When this is specified, the storage service compares the hash of the content that has arrived with this value.\n * \n * transactionalContentMD5 and transactionalContentCrc64 cannot be set at same time.\n */\n transactionalContentCrc64?: Uint8Array;\n customerProvidedKey?: Models.CpkInfo;\n}\n\nexport interface IBlockBlobStageBlockFromURLOptions {\n range?: IRange;\n leaseAccessConditions?: Models.LeaseAccessConditions;\n\n /**\n * An MD5 hash of the content from the URI. \n * This hash is used to verify the integrity of the content during transport of the data from the URI. \n * When this is specified, the storage service compares the hash of the content that has arrived from the copy-source with this value.\n * \n * sourceContentMD5 and sourceContentCrc64 cannot be set at same time.\n */\n sourceContentMD5?: Uint8Array;\n\n /**\n * A CRC64 hash of the content from the URI. \n * This hash is used to verify the integrity of the content during transport of the data from the URI. \n * When this is specified, the storage service compares the hash of the content that has arrived from the copy-source with this value.\n * \n * sourceContentMD5 and sourceContentCrc64 cannot be set at same time.\n */\n sourceContentCrc64?: Uint8Array;\n customerProvidedKey?: Models.CpkInfo;\n}\n\nexport interface IBlockBlobCommitBlockListOptions {\n accessConditions?: IBlobAccessConditions;\n blobHTTPHeaders?: Models.BlobHTTPHeaders;\n metadata?: IMetadata;\n customerProvidedKey?: Models.CpkInfo;\n accessTier?: Models.AccessTier;\n tier?: BlockBlobTier | string;\n}\n\nexport interface IBlockBlobGetBlockListOptions {\n leaseAccessConditions?: Models.LeaseAccessConditions;\n}\n\n/**\n * BlockBlobURL defines a set of operations applicable to block blobs.\n *\n * @export\n * @class BlockBlobURL\n * @extends {StorageURL}\n */\nexport class BlockBlobURL extends BlobURL {\n /**\n * Creates a BlockBlobURL object from ContainerURL instance.\n *\n * @static\n * @param {ContainerURL} containerURL A ContainerURL object\n * @param {string} blobName A block blob name\n * @returns {BlockBlobURL}\n * @memberof BlockBlobURL\n */\n public static fromContainerURL(containerURL: ContainerURL, blobName: string): BlockBlobURL {\n return new BlockBlobURL(\n appendToURLPath(containerURL.url, encodeURIComponent(blobName)),\n containerURL.pipeline\n );\n }\n\n /**\n * Creates a BlockBlobURL object from BlobURL instance.\n *\n * @static\n * @param {BlobURL} blobURL\n * @returns {BlockBlobURL}\n * @memberof BlockBlobURL\n */\n public static fromBlobURL(blobURL: BlobURL): BlockBlobURL {\n return new BlockBlobURL(blobURL.url, blobURL.pipeline);\n }\n\n /**\n * blockBlobContext provided by protocol layer.\n *\n * @private\n * @type {BlockBlobs}\n * @memberof BlockBlobURL\n */\n private blockBlobContext: BlockBlob;\n\n /**\n * Creates an instance of BlockBlobURL.\n * This method accepts an encoded URL or non-encoded URL pointing to a block blob.\n * Encoded URL string will NOT be escaped twice, only special characters in URL path will be escaped.\n * If a blob name includes ? or %, blob name must be encoded in the URL.\n *\n * @param {string} url A URL string pointing to Azure Storage block blob, such as\n * \"https://myaccount.blob.core.windows.net/mycontainer/blockblob\". You can\n * append a SAS if using AnonymousCredential, such as\n * \"https://myaccount.blob.core.windows.net/mycontainer/blockblob?sasString\".\n * This method accepts an encoded URL or non-encoded URL pointing to a blob.\n * Encoded URL string will NOT be escaped twice, only special characters in URL path will be escaped.\n * However, if a blob name includes ? or %, blob name must be encoded in the URL.\n * Such as a blob named \"my?blob%\", the URL should be \"https://myaccount.blob.core.windows.net/mycontainer/my%3Fblob%25\".\n * @param {Pipeline} pipeline Call StorageURL.newPipeline() to create a default\n * pipeline, or provide a customized pipeline.\n * @memberof BlockBlobURL\n */\n constructor(url: string, pipeline: Pipeline) {\n super(url, pipeline);\n this.blockBlobContext = new BlockBlob(this.storageClientContext);\n }\n\n /**\n * Creates a new BlockBlobURL object identical to the source but with the\n * specified request policy pipeline.\n *\n * @param {Pipeline} pipeline\n * @returns {BlockBlobURL}\n * @memberof BlockBlobURL\n */\n public withPipeline(pipeline: Pipeline): BlockBlobURL {\n return new BlockBlobURL(this.url, pipeline);\n }\n\n /**\n * Creates a new BlockBlobURL object identical to the source but with the\n * specified snapshot timestamp.\n * Provide \"\" will remove the snapshot and return a URL to the base blob.\n *\n * @param {string} snapshot\n * @returns {BlockBlobURL}\n * @memberof BlockBlobURL\n */\n public withSnapshot(snapshot: string): BlockBlobURL {\n return new BlockBlobURL(\n setURLParameter(\n this.url,\n URLConstants.Parameters.SNAPSHOT,\n snapshot.length === 0 ? undefined : snapshot\n ),\n this.pipeline\n );\n }\n\n /**\n * Creates a new block blob, or updates the content of an existing block blob.\n * Updating an existing block blob overwrites any existing metadata on the blob.\n * Partial updates are not supported; the content of the existing blob is\n * overwritten with the new content. To perform a partial update of a block blob's,\n * use stageBlock and commitBlockList.\n *\n * This is a non-parallel uploading method, please use uploadFileToBlockBlob(),\n * uploadStreamToBlockBlob() or uploadBrowserDataToBlockBlob() for better performance\n * with concurrency uploading.\n *\n * @see https://docs.microsoft.com/rest/api/storageservices/put-blob\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {HttpRequestBody} body Blob, string, ArrayBuffer, ArrayBufferView or a function\n * which returns a new Readable stream whose offset is from data source beginning.\n * @param {number} contentLength Length of body in bytes. Use Buffer.byteLength() to calculate body length for a\n * string including non non-Base64/Hex-encoded characters.\n * @param {IBlockBlobUploadOptions} [options]\n * @returns {Promise}\n * @memberof BlockBlobURL\n */\n public async upload(\n aborter: Aborter,\n body: HttpRequestBody,\n contentLength: number,\n options: IBlockBlobUploadOptions = {}\n ): Promise {\n options.accessConditions = options.accessConditions || {};\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n\n return this.blockBlobContext.upload(body, contentLength, {\n abortSignal: aborter,\n blobHTTPHeaders: options.blobHTTPHeaders,\n leaseAccessConditions: options.accessConditions.leaseAccessConditions,\n metadata: options.metadata,\n modifiedAccessConditions: options.accessConditions.modifiedAccessConditions,\n onUploadProgress: options.progress,\n cpkInfo: options.customerProvidedKey,\n tier: toAccessTier(options.tier)\n });\n }\n\n /**\n * Uploads the specified block to the block blob's \"staging area\" to be later\n * committed by a call to commitBlockList.\n * @see https://docs.microsoft.com/rest/api/storageservices/put-block\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string} blockId A 64-byte value that is base64-encoded\n * @param {HttpRequestBody} body\n * @param {number} contentLength\n * @param {IBlockBlobStageBlockOptions} [options]\n * @returns {Promise}\n * @memberof BlockBlobURL\n */\n public async stageBlock(\n aborter: Aborter,\n blockId: string,\n body: HttpRequestBody,\n contentLength: number,\n options: IBlockBlobStageBlockOptions = {}\n ): Promise {\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n\n return this.blockBlobContext.stageBlock(blockId, contentLength, body, {\n abortSignal: aborter,\n leaseAccessConditions: options.leaseAccessConditions,\n onUploadProgress: options.progress,\n transactionalContentMD5: options.transactionalContentMD5,\n transactionalContentCrc64: options.transactionalContentCrc64,\n cpkInfo: options.customerProvidedKey\n });\n }\n\n /**\n * The Stage Block From URL operation creates a new block to be committed as part\n * of a blob where the contents are read from a URL.\n * This API is available starting in version 2018-03-28.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/put-block-from-url\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string} blockId A 64-byte value that is base64-encoded\n * @param {string} sourceURL Specifies the URL of the blob. The value\n * may be a URL of up to 2 KB in length that specifies a blob.\n * The value should be URL-encoded as it would appear\n * in a request URI. The source blob must either be public\n * or must be authenticated via a shared access signature.\n * If the source blob is public, no authentication is required\n * to perform the operation. Here are some examples of source object URLs:\n * - https://myaccount.blob.core.windows.net/mycontainer/myblob\n * - https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=\n * @param {number} offset From which position of the blob to download, >= 0\n * @param {number} [count] How much data to be downloaded, > 0. Will download to the end when undefined\n * @param {IBlockBlobStageBlockFromURLOptions} [options={}]\n * @returns {Promise}\n * @memberof BlockBlobURL\n */\n public async stageBlockFromURL(\n aborter: Aborter,\n blockId: string,\n sourceURL: string,\n offset: number,\n count?: number,\n options: IBlockBlobStageBlockFromURLOptions = {}\n ): Promise {\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n\n return this.blockBlobContext.stageBlockFromURL(blockId, 0, sourceURL, {\n abortSignal: aborter,\n leaseAccessConditions: options.leaseAccessConditions,\n sourceContentMD5: options.sourceContentMD5,\n sourceContentCrc64: options.sourceContentCrc64,\n sourceRange: offset === 0 && !count ? undefined : rangeToString({ offset, count }),\n cpkInfo: options.customerProvidedKey\n });\n }\n\n /**\n * Writes a blob by specifying the list of block IDs that make up the blob.\n * In order to be written as part of a blob, a block must have been successfully written\n * to the server in a prior stageBlock operation. You can call commitBlockList to update a blob\n * by uploading only those blocks that have changed, then committing the new and existing\n * blocks together. Any blocks not specified in the block list and permanently deleted.\n * @see https://docs.microsoft.com/rest/api/storageservices/put-block-list\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string[]} blocks Array of 64-byte value that is base64-encoded\n * @param {IBlockBlobCommitBlockListOptions} [options]\n * @returns {Promise}\n * @memberof BlockBlobURL\n */\n public async commitBlockList(\n aborter: Aborter,\n blocks: string[],\n options: IBlockBlobCommitBlockListOptions = {}\n ): Promise {\n options.accessConditions = options.accessConditions || {};\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n\n return this.blockBlobContext.commitBlockList(\n { latest: blocks },\n {\n abortSignal: aborter,\n blobHTTPHeaders: options.blobHTTPHeaders,\n leaseAccessConditions: options.accessConditions.leaseAccessConditions,\n metadata: options.metadata,\n modifiedAccessConditions: options.accessConditions.modifiedAccessConditions,\n cpkInfo: options.customerProvidedKey,\n tier: toAccessTier(options.tier)\n }\n );\n }\n\n /**\n * Returns the list of blocks that have been uploaded as part of a block blob\n * using the specified block list filter.\n * @see https://docs.microsoft.com/rest/api/storageservices/get-block-list\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {Models.BlockListType} listType\n * @param {IBlockBlobGetBlockListOptions} [options]\n * @returns {Promise}\n * @memberof BlockBlobURL\n */\n public async getBlockList(\n aborter: Aborter,\n listType: Models.BlockListType,\n options: IBlockBlobGetBlockListOptions = {}\n ): Promise {\n const res = await this.blockBlobContext.getBlockList(listType, {\n abortSignal: aborter,\n leaseAccessConditions: options.leaseAccessConditions\n });\n\n if (!res.committedBlocks) {\n res.committedBlocks = [];\n }\n\n if (!res.uncommittedBlocks) {\n res.uncommittedBlocks = [];\n }\n\n return res;\n }\n}\n","import { HttpResponse } from \"@azure/ms-rest-js\";\n\nimport { Aborter } from \"./Aborter\";\nimport * as Models from \"./generated/src/models\";\nimport { Container } from \"./generated/src/operations\";\nimport { IContainerAccessConditions, IMetadata } from \"./models\";\nimport { Pipeline } from \"./Pipeline\";\nimport { ServiceURL } from \"./ServiceURL\";\nimport { StorageURL } from \"./StorageURL\";\nimport { ETagNone } from \"./utils/constants\";\nimport { appendToURLPath, truncatedISO8061Date } from \"./utils/utils.common\";\n\nexport interface IContainerCreateOptions {\n metadata?: IMetadata;\n access?: Models.PublicAccessType;\n}\n\nexport interface IContainerGetPropertiesOptions {\n leaseAccessConditions?: Models.LeaseAccessConditions;\n}\n\nexport interface IContainerDeleteMethodOptions {\n containerAccessConditions?: IContainerAccessConditions;\n}\n\nexport interface IContainerSetMetadataOptions {\n containerAccessConditions?: IContainerAccessConditions;\n}\n\nexport interface IContainerGetAccessPolicyOptions {\n leaseAccessConditions?: Models.LeaseAccessConditions;\n}\n\nexport interface ISignedIdentifier {\n /**\n * @member {string} id a unique id\n */\n id: string;\n /**\n * @member {AccessPolicy} accessPolicy\n */\n accessPolicy: {\n /**\n * @member {Date} start Optional. The date-time the policy is active\n */\n start?: Date;\n /**\n * @member {string} expiry Optional. The date-time the policy expires\n */\n expiry?: Date;\n /**\n * @member {string} permission The permissions for the acl policy\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-container-acl\n */\n permission: string;\n };\n}\n\nexport declare type ContainerGetAccessPolicyResponse = {\n signedIdentifiers: ISignedIdentifier[];\n} & Models.ContainerGetAccessPolicyHeaders & {\n /**\n * The underlying HTTP response.\n */\n _response: HttpResponse & {\n /**\n * The parsed HTTP response headers.\n */\n parsedHeaders: Models.ContainerGetAccessPolicyHeaders;\n /**\n * The response body as text (string format)\n */\n bodyAsText: string;\n /**\n * The response body as parsed JSON or XML\n */\n parsedBody: Models.SignedIdentifier[];\n };\n };\n\nexport interface IContainerSetAccessPolicyOptions {\n containerAccessConditions?: IContainerAccessConditions;\n}\n\nexport interface IContainerAcquireLeaseOptions {\n modifiedAccessConditions?: Models.ModifiedAccessConditions;\n}\n\nexport interface IContainerReleaseLeaseOptions {\n modifiedAccessConditions?: Models.ModifiedAccessConditions;\n}\n\nexport interface IContainerRenewLeaseOptions {\n modifiedAccessConditions?: Models.ModifiedAccessConditions;\n}\n\nexport interface IContainerBreakLeaseOptions {\n modifiedAccessConditions?: Models.ModifiedAccessConditions;\n}\n\nexport interface IContainerChangeLeaseOptions {\n modifiedAccessConditions?: Models.ModifiedAccessConditions;\n}\n\nexport interface IContainerListBlobsSegmentOptions {\n /**\n * @member {string} [prefix] Filters the results to return only containers\n * whose name begins with the specified prefix.\n */\n prefix?: string;\n /**\n * @member {number} [maxresults] Specifies the maximum number of containers\n * to return. If the request does not specify maxresults, or specifies a\n * value greater than 5000, the server will return up to 5000 items. Note\n * that if the listing operation crosses a partition boundary, then the\n * service will return a continuation token for retrieving the remainder of\n * the results. For this reason, it is possible that the service will return\n * fewer results than specified by maxresults, or than the default of 5000.\n */\n maxresults?: number;\n /**\n * @member {ListBlobsIncludeItem[]} [include] Include this parameter to\n * specify one or more datasets to include in the response.\n */\n include?: Models.ListBlobsIncludeItem[];\n}\n\n/**\n * A ContainerURL represents a URL to the Azure Storage container allowing you to manipulate its blobs.\n *\n * @export\n * @class ContainerURL\n * @extends {StorageURL}\n */\nexport class ContainerURL extends StorageURL {\n /**\n * Creates a ContainerURL object from ServiceURL\n *\n * @param serviceURL A ServiceURL object\n * @param containerName A container name\n */\n public static fromServiceURL(serviceURL: ServiceURL, containerName: string): ContainerURL {\n return new ContainerURL(\n appendToURLPath(serviceURL.url, encodeURIComponent(containerName)),\n serviceURL.pipeline\n );\n }\n\n /**\n * containerContext provided by protocol layer.\n *\n * @private\n * @type {Containers}\n * @memberof ContainerURL\n */\n private containerContext: Container;\n\n /**\n * Creates an instance of ContainerURL.\n * @param {string} url A URL string pointing to Azure Storage blob container, such as\n * \"https://myaccount.blob.core.windows.net/mycontainer\". You can\n * append a SAS if using AnonymousCredential, such as\n * \"https://myaccount.blob.core.windows.net/mycontainer?sasString\".\n * @param {Pipeline} pipeline Call StorageURL.newPipeline() to create a default\n * pipeline, or provide a customized pipeline.\n * @memberof ContainerURL\n */\n constructor(url: string, pipeline: Pipeline) {\n super(url, pipeline);\n this.containerContext = new Container(this.storageClientContext);\n }\n\n /**\n * Creates a new ContainerURL object identical to the source but with the\n * specified request policy pipeline.\n *\n * @param {Pipeline} pipeline\n * @returns {ContainerURL}\n * @memberof ContainerURL\n */\n public withPipeline(pipeline: Pipeline): ContainerURL {\n return new ContainerURL(this.url, pipeline);\n }\n\n /**\n * Creates a new container under the specified account. If the container with\n * the same name already exists, the operation fails.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/create-container\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {IContainerCreateOptions} [options]\n * @returns {Promise}\n * @memberof ContainerURL\n */\n public async create(\n aborter: Aborter,\n options: IContainerCreateOptions = {}\n ): Promise {\n // Spread operator in destructuring assignments,\n // this will filter out unwanted properties from the response object into result object\n return this.containerContext.create({\n ...options,\n abortSignal: aborter\n });\n }\n\n /**\n * Returns all user-defined metadata and system properties for the specified\n * container. The data returned does not include the container's list of blobs.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-container-properties\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {IContainersGetPropertiesOptions} [options]\n * @returns {Promise}\n * @memberof ContainerURL\n */\n public async getProperties(\n aborter: Aborter,\n options: IContainerGetPropertiesOptions = {}\n ): Promise {\n if (!options.leaseAccessConditions) {\n options.leaseAccessConditions = {};\n }\n\n return this.containerContext.getProperties({\n abortSignal: aborter,\n ...options.leaseAccessConditions\n });\n }\n\n /**\n * Marks the specified container for deletion. The container and any blobs\n * contained within it are later deleted during garbage collection.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/delete-container\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {Models.ContainersDeleteMethodOptionalParams} [options]\n * @returns {Promise}\n * @memberof ContainerURL\n */\n public async delete(\n aborter: Aborter,\n options: IContainerDeleteMethodOptions = {}\n ): Promise {\n if (!options.containerAccessConditions) {\n options.containerAccessConditions = {};\n }\n\n if (!options.containerAccessConditions.modifiedAccessConditions) {\n options.containerAccessConditions.modifiedAccessConditions = {};\n }\n\n if (!options.containerAccessConditions.leaseAccessConditions) {\n options.containerAccessConditions.leaseAccessConditions = {};\n }\n\n if (\n (options.containerAccessConditions.modifiedAccessConditions.ifMatch &&\n options.containerAccessConditions.modifiedAccessConditions.ifMatch !== ETagNone) ||\n (options.containerAccessConditions.modifiedAccessConditions.ifNoneMatch &&\n options.containerAccessConditions.modifiedAccessConditions.ifNoneMatch !== ETagNone)\n ) {\n throw new RangeError(\n \"the IfMatch and IfNoneMatch access conditions must have their default\\\n values because they are ignored by the service\"\n );\n }\n\n return this.containerContext.deleteMethod({\n abortSignal: aborter,\n leaseAccessConditions: options.containerAccessConditions.leaseAccessConditions,\n modifiedAccessConditions: options.containerAccessConditions.modifiedAccessConditions\n });\n }\n\n /**\n * Sets one or more user-defined name-value pairs for the specified container.\n *\n * If no option provided, or no metadata defined in the parameter, the container\n * metadata will be removed.\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-container-metadata\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {IMetadata} [metadata] Replace existing metadata with this value.\n * If no value provided the existing metadata will be removed.\n * @param {IContainerSetMetadataOptions} [options]\n * @returns {Promise}\n * @memberof ContainerURL\n */\n public async setMetadata(\n aborter: Aborter,\n metadata?: IMetadata,\n options: IContainerSetMetadataOptions = {}\n ): Promise {\n if (!options.containerAccessConditions) {\n options.containerAccessConditions = {};\n }\n\n if (!options.containerAccessConditions.modifiedAccessConditions) {\n options.containerAccessConditions.modifiedAccessConditions = {};\n }\n\n if (!options.containerAccessConditions.leaseAccessConditions) {\n options.containerAccessConditions.leaseAccessConditions = {};\n }\n\n if (\n options.containerAccessConditions.modifiedAccessConditions.ifUnmodifiedSince ||\n (options.containerAccessConditions.modifiedAccessConditions.ifMatch &&\n options.containerAccessConditions.modifiedAccessConditions.ifMatch !== ETagNone) ||\n (options.containerAccessConditions.modifiedAccessConditions.ifNoneMatch &&\n options.containerAccessConditions.modifiedAccessConditions.ifNoneMatch !== ETagNone)\n ) {\n throw new RangeError(\n \"the IfUnmodifiedSince, IfMatch, and IfNoneMatch must have their default values\\\n because they are ignored by the blob service\"\n );\n }\n\n return this.containerContext.setMetadata({\n abortSignal: aborter,\n leaseAccessConditions: options.containerAccessConditions.leaseAccessConditions,\n metadata,\n modifiedAccessConditions: options.containerAccessConditions.modifiedAccessConditions\n });\n }\n\n /**\n * Gets the permissions for the specified container. The permissions indicate\n * whether container data may be accessed publicly.\n *\n * WARNING: JavaScript Date will potential lost precision when parsing start and expiry string.\n * For example, new Date(\"2018-12-31T03:44:23.8827891Z\").toISOString() will get \"2018-12-31T03:44:23.882Z\".\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-container-acl\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {IContainerGetAccessPolicyOptions} [options]\n * @returns {Promise}\n * @memberof ContainerURL\n */\n public async getAccessPolicy(\n aborter: Aborter,\n options: IContainerGetAccessPolicyOptions = {}\n ): Promise {\n if (!options.leaseAccessConditions) {\n options.leaseAccessConditions = {};\n }\n\n const response = await this.containerContext.getAccessPolicy({\n abortSignal: aborter,\n leaseAccessConditions: options.leaseAccessConditions\n });\n\n const res: ContainerGetAccessPolicyResponse = {\n _response: response._response,\n blobPublicAccess: response.blobPublicAccess,\n date: response.date,\n eTag: response.eTag,\n errorCode: response.errorCode,\n lastModified: response.lastModified,\n requestId: response.requestId,\n clientRequestId: response.clientRequestId,\n signedIdentifiers: [],\n version: response.version\n };\n\n for (const identifier of response) {\n const accessPolicy: any = {\n permission: identifier.accessPolicy.permission,\n };\n\n if (identifier.accessPolicy.expiry) {\n accessPolicy.expiry = new Date(identifier.accessPolicy.expiry);\n }\n\n if (identifier.accessPolicy.start) {\n accessPolicy.start = new Date(identifier.accessPolicy.start);\n }\n\n res.signedIdentifiers.push({\n accessPolicy,\n id: identifier.id\n });\n }\n\n return res;\n }\n\n /**\n * Sets the permissions for the specified container. The permissions indicate\n * whether blobs in a container may be accessed publicly.\n *\n * When you set permissions for a container, the existing permissions are replaced.\n * If no access or containerAcl provided, the existing container ACL will be\n * removed.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-container-acl\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {PublicAccessType} [access]\n * @param {ISignedIdentifier[]} [containerAcl]\n * @param {IContainerSetAccessPolicyOptions} [options]\n * @returns {Promise}\n * @memberof ContainerURL\n */\n public async setAccessPolicy(\n aborter: Aborter,\n access?: Models.PublicAccessType,\n containerAcl?: ISignedIdentifier[],\n options: IContainerSetAccessPolicyOptions = {}\n ): Promise {\n options.containerAccessConditions = options.containerAccessConditions || {};\n const acl: Models.SignedIdentifier[] = [];\n for (const identifier of containerAcl || []) {\n acl.push({\n accessPolicy: {\n expiry: identifier.accessPolicy.expiry ? truncatedISO8061Date(identifier.accessPolicy.expiry) : \"\",\n permission: identifier.accessPolicy.permission,\n start: identifier.accessPolicy.start? truncatedISO8061Date(identifier.accessPolicy.start) : \"\"\n },\n id: identifier.id\n });\n }\n\n return this.containerContext.setAccessPolicy({\n abortSignal: aborter,\n access,\n containerAcl: acl,\n leaseAccessConditions: options.containerAccessConditions.leaseAccessConditions,\n modifiedAccessConditions: options.containerAccessConditions.modifiedAccessConditions\n });\n }\n\n /**\n * Establishes and manages a lock on a container for delete operations.\n * The lock duration can be 15 to 60 seconds, or can be infinite.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string} proposedLeaseId Can be specified in any valid GUID string format\n * @param {number} duration Must be between 15 to 60 seconds, or infinite (-1)\n * @param {IContainerAcquireLeaseOptions} [options]\n * @returns {Promise}\n * @memberof ContainerURL\n */\n public async acquireLease(\n aborter: Aborter,\n proposedLeaseId: string,\n duration: number,\n options: IContainerAcquireLeaseOptions = {}\n ): Promise {\n return this.containerContext.acquireLease({\n abortSignal: aborter,\n duration,\n modifiedAccessConditions: options.modifiedAccessConditions,\n proposedLeaseId\n });\n }\n\n /**\n * To free the lease if it is no longer needed so that another client may\n * immediately acquire a lease against the container.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string} leaseId\n * @param {IContainerReleaseLeaseOptions} [options]\n * @returns {Promise}\n * @memberof ContainerURL\n */\n public async releaseLease(\n aborter: Aborter,\n leaseId: string,\n options: IContainerReleaseLeaseOptions = {}\n ): Promise {\n return this.containerContext.releaseLease(leaseId, {\n abortSignal: aborter,\n modifiedAccessConditions: options.modifiedAccessConditions\n });\n }\n\n /**\n * To renew an existing lease.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string} leaseId\n * @param {IContainerRenewLeaseOptions} [options]\n * @returns {Promise}\n * @memberof ContainerURL\n */\n public async renewLease(\n aborter: Aborter,\n leaseId: string,\n options: IContainerRenewLeaseOptions = {}\n ): Promise {\n return this.containerContext.renewLease(leaseId, {\n abortSignal: aborter,\n modifiedAccessConditions: options.modifiedAccessConditions\n });\n }\n\n /**\n * To end the lease but ensure that another client cannot acquire a new lease\n * until the current lease period has expired.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {number} period break period\n * @param {IContainerBreakLeaseOptions} [options]\n * @returns {Promise}\n * @memberof ContainerURL\n */\n public async breakLease(\n aborter: Aborter,\n period: number,\n options: IContainerBreakLeaseOptions = {}\n ): Promise {\n return this.containerContext.breakLease({\n abortSignal: aborter,\n breakPeriod: period,\n modifiedAccessConditions: options.modifiedAccessConditions\n });\n }\n\n /**\n * To change the ID of an existing lease.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string} leaseId\n * @param {string} proposedLeaseId\n * @param {IContainerChangeLeaseOptions} [options]\n * @returns {Promise}\n * @memberof ContainerURL\n */\n public async changeLease(\n aborter: Aborter,\n leaseId: string,\n proposedLeaseId: string,\n options: IContainerChangeLeaseOptions = {}\n ): Promise {\n return this.containerContext.changeLease(leaseId, proposedLeaseId, {\n abortSignal: aborter,\n modifiedAccessConditions: options.modifiedAccessConditions\n });\n }\n\n /**\n * listBlobFlatSegment returns a single segment of blobs starting from the\n * specified Marker. Use an empty Marker to start enumeration from the beginning.\n * After getting a segment, process it, and then call ListBlobsFlatSegment again\n * (passing the the previously-returned Marker) to get the next segment.\n * @see https://docs.microsoft.com/rest/api/storageservices/list-blobs\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string} [marker]\n * @param {IContainerListBlobsSegmentOptions} [options]\n * @returns {Promise}\n * @memberof ContainerURL\n */\n public async listBlobFlatSegment(\n aborter: Aborter,\n marker?: string,\n options: IContainerListBlobsSegmentOptions = {}\n ): Promise {\n return this.containerContext.listBlobFlatSegment({\n abortSignal: aborter,\n marker,\n ...options\n });\n }\n\n /**\n * listBlobHierarchySegment returns a single segment of blobs starting from\n * the specified Marker. Use an empty Marker to start enumeration from the\n * beginning. After getting a segment, process it, and then call ListBlobsHierarchicalSegment\n * again (passing the the previously-returned Marker) to get the next segment.\n * @see https://docs.microsoft.com/rest/api/storageservices/list-blobs\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string} delimiter\n * @param {IContainerListBlobsSegmentOptions} [options]\n * @returns {Promise}\n * @memberof ContainerURL\n */\n public async listBlobHierarchySegment(\n aborter: Aborter,\n delimiter: string,\n marker?: string,\n options: IContainerListBlobsSegmentOptions = {}\n ): Promise {\n return this.containerContext.listBlobHierarchySegment(delimiter, {\n abortSignal: aborter,\n marker,\n ...options\n });\n }\n}\n","import { HttpHeaders, RequestPolicy, RequestPolicyOptions, WebResource } from \"@azure/ms-rest-js\";\n\nimport { TokenCredential } from \"../credentials/TokenCredential\";\nimport { HeaderConstants } from \"../utils/constants\";\nimport { CredentialPolicy } from \"./CredentialPolicy\";\n\n/**\n * TokenCredentialPolicy is a policy used to sign HTTP request with a token.\n * Such as an OAuth bearer token.\n *\n * @export\n * @class TokenCredentialPolicy\n * @extends {CredentialPolicy}\n */\nexport class TokenCredentialPolicy extends CredentialPolicy {\n /**\n * The value of token.\n *\n * @type {TokenCredential}\n * @memberof TokenCredentialPolicy\n */\n public readonly tokenCredential: TokenCredential;\n\n /**\n * Token authorization scheme, default header is \"Bearer\".\n *\n * @type {string}\n * @memberof TokenCredentialPolicy\n */\n public readonly authorizationScheme: string;\n\n /**\n * Creates an instance of TokenCredentialPolicy.\n * @param {RequestPolicy} nextPolicy\n * @param {RequestPolicyOptions} options\n * @param {TokenCredential} tokenCredential\n * @memberof TokenCredentialPolicy\n */\n constructor(\n nextPolicy: RequestPolicy,\n options: RequestPolicyOptions,\n tokenCredential: TokenCredential\n ) {\n super(nextPolicy, options);\n this.tokenCredential = tokenCredential;\n this.authorizationScheme = HeaderConstants.AUTHORIZATION_SCHEME;\n }\n\n /**\n * Sign request with token.\n *\n * @protected\n * @param {WebResource} request\n * @returns {WebResource}\n * @memberof TokenCredentialPolicy\n */\n protected signRequest(request: WebResource): WebResource {\n if (!request.headers) {\n request.headers = new HttpHeaders();\n }\n request.headers.set(\n HeaderConstants.AUTHORIZATION,\n `${this.authorizationScheme} ${this.tokenCredential.token}`\n );\n return request;\n }\n}\n","import { RequestPolicy, RequestPolicyOptions } from \"@azure/ms-rest-js\";\n\nimport { Credential } from \"../credentials/Credential\";\nimport { TokenCredentialPolicy } from \"../policies/TokenCredentialPolicy\";\n\n/**\n * TokenCredential is a Credential used to generate a TokenCredentialPolicy.\n * Renew token by setting a new token string value to token property.\n *\n * @example\n * const tokenCredential = new TokenCredential(\"token\");\n * const pipeline = StorageURL.newPipeline(tokenCredential);\n *\n * // List containers\n * const serviceURL = new ServiceURL(\"https://mystorageaccount.blob.core.windows.net\", pipeline);\n *\n * // Set up a timer to refresh the token\n * const timerID = setInterval(() => {\n * // Update token by accessing to public tokenCredential.token\n * tokenCredential.token = \"updatedToken\";\n * // WARNING: Timer must be manually stopped! It will forbid GC of tokenCredential\n * if (shouldStop()) {\n * clearInterval(timerID);\n * }\n * }, 60 * 60 * 1000); // Set an interval time before your token expired\n * @export\n * @class TokenCredential\n * @extends {Credential}\n *\n */\nexport class TokenCredential extends Credential {\n /**\n * Mutable token value. You can set a renewed token value to this property,\n * for example, when an OAuth token is expired.\n *\n * @type {string}\n * @memberof TokenCredential\n */\n public token: string;\n\n /**\n * Creates an instance of TokenCredential.\n * @param {string} token\n * @memberof TokenCredential\n */\n constructor(token: string) {\n super();\n this.token = token;\n }\n\n /**\n * Creates a TokenCredentialPolicy object.\n *\n * @param {RequestPolicy} nextPolicy\n * @param {RequestPolicyOptions} options\n * @returns {TokenCredentialPolicy}\n * @memberof TokenCredential\n */\n public create(nextPolicy: RequestPolicy, options: RequestPolicyOptions): TokenCredentialPolicy {\n return new TokenCredentialPolicy(nextPolicy, options, this);\n }\n}\n","// In browser, during webpack or browserify bundling, this module will be replaced by 'events'\n// https://github.com/Gozala/events\nimport { EventEmitter } from \"events\";\n\n/**\n * Operation is an async function to be executed and managed by Batch.\n */\nexport declare type Operation = () => Promise;\n\n/**\n * States for Batch.\n *\n * @enum {number}\n */\nenum BatchStates {\n Good,\n Error\n}\n\n/**\n * Batch provides basic parallel execution with concurrency limits.\n * Will stop execute left operations when one of the executed operation throws an error.\n * But Batch cannot cancel ongoing operations, you need to cancel them by yourself.\n *\n * @export\n * @class Batch\n */\nexport class Batch {\n /**\n * Concurrency. Must be lager than 0.\n *\n * @type {number}\n * @memberof Batch\n */\n private concurrency: number;\n\n /**\n * Number of active operations under execution.\n *\n * @private\n * @type {number}\n * @memberof Batch\n */\n private actives: number = 0;\n\n /**\n * Number of completed operations under execution.\n *\n * @private\n * @type {number}\n * @memberof Batch\n */\n private completed: number = 0;\n\n /**\n * Offset of next operation to be executed.\n *\n * @private\n * @type {number}\n * @memberof Batch\n */\n private offset: number = 0;\n\n /**\n * Operation array to be executed.\n *\n * @private\n * @type {Operation[]}\n * @memberof Batch\n */\n private operations: Operation[] = [];\n\n /**\n * States of Batch. When an error happens, state will turn into error.\n * Batch will stop execute left operations.\n *\n * @private\n * @type {BatchStates}\n * @memberof Batch\n */\n private state: BatchStates = BatchStates.Good;\n\n /**\n * A private emitter used to pass events inside this class.\n *\n * @private\n * @type {EventEmitter}\n * @memberof Batch\n */\n private emitter: EventEmitter;\n\n /**\n * Creates an instance of Batch.\n * @param {number} [concurrency=5]\n * @memberof Batch\n */\n public constructor(concurrency: number = 5) {\n if (concurrency < 1) {\n throw new RangeError(\"concurrency must be larger than 0\");\n }\n this.concurrency = concurrency;\n this.emitter = new EventEmitter();\n }\n\n /**\n * Add a operation into queue.\n *\n * @param {Operation} operation\n * @memberof Batch\n */\n public addOperation(operation: Operation): void {\n this.operations.push(async () => {\n try {\n this.actives++;\n await operation();\n this.actives--;\n this.completed++;\n this.parallelExecute();\n } catch (error) {\n this.emitter.emit(\"error\", error);\n }\n });\n }\n\n /**\n * Start execute operations in the queue.\n *\n * @returns {Promise}\n * @memberof Batch\n */\n public async do(): Promise {\n this.parallelExecute();\n\n return new Promise((resolve, reject) => {\n this.emitter.on(\"finish\", resolve);\n\n this.emitter.on(\"error\", (error) => {\n this.state = BatchStates.Error;\n reject(error);\n });\n });\n }\n\n /**\n * Get next operation to be executed. Return null when reaching ends.\n *\n * @private\n * @returns {(Operation | null)}\n * @memberof Batch\n */\n private nextOperation(): Operation | null {\n if (this.offset < this.operations.length) {\n return this.operations[this.offset++];\n }\n return null;\n }\n\n /**\n * Start execute operations. One one the most important difference between\n * this method with do() is that do() wraps as an sync method.\n *\n * @private\n * @returns {void}\n * @memberof Batch\n */\n private parallelExecute(): void {\n if (this.state === BatchStates.Error) {\n return;\n }\n\n if (this.completed >= this.operations.length) {\n this.emitter.emit(\"finish\");\n return;\n }\n\n while (this.actives < this.concurrency) {\n const operation = this.nextOperation();\n if (operation) {\n operation();\n } else {\n return;\n }\n }\n }\n}\n","import { generateUuid } from \"@azure/ms-rest-js\";\n\nimport { Aborter } from \"./Aborter\";\nimport { BlockBlobURL } from \"./BlockBlobURL\";\nimport { BlobUploadCommonResponse, IUploadToBlockBlobOptions } from \"./highlevel.common\";\nimport { Batch } from \"./utils/Batch\";\nimport {\n BLOCK_BLOB_MAX_BLOCKS,\n BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES,\n BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES,\n DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES\n} from \"./utils/constants\";\nimport { generateBlockID } from \"./utils/utils.common\";\n\n/**\n * ONLY AVAILABLE IN BROWSERS.\n *\n * Uploads a browser Blob/File/ArrayBuffer/ArrayBufferView object to block blob.\n *\n * When buffer length <= 256MB, this method will use 1 upload call to finish the upload.\n * Otherwise, this method will call stageBlock to upload blocks, and finally call commitBlockList\n * to commit the block list.\n *\n * @export\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {Blob | ArrayBuffer | ArrayBufferView} browserData Blob, File, ArrayBuffer or ArrayBufferView\n * @param {BlockBlobURL} blockBlobURL\n * @param {IUploadToBlockBlobOptions} [options]\n * @returns {Promise}\n */\nexport async function uploadBrowserDataToBlockBlob(\n aborter: Aborter,\n browserData: Blob | ArrayBuffer | ArrayBufferView,\n blockBlobURL: BlockBlobURL,\n options?: IUploadToBlockBlobOptions\n): Promise {\n const browserBlob = new Blob([browserData]);\n return UploadSeekableBlobToBlockBlob(\n aborter,\n (offset: number, size: number): Blob => {\n return browserBlob.slice(offset, offset + size);\n },\n browserBlob.size,\n blockBlobURL,\n options\n );\n}\n\n/**\n * ONLY AVAILABLE IN BROWSERS.\n *\n * Uploads a browser Blob object to block blob. Requires a blobFactory as the data source,\n * which need to return a Blob object with the offset and size provided.\n *\n * When buffer length <= 256MB, this method will use 1 upload call to finish the upload.\n * Otherwise, this method will call stageBlock to upload blocks, and finally call commitBlockList\n * to commit the block list.\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {(offset: number, size: number) => Blob} blobFactory\n * @param {number} size\n * @param {BlockBlobURL} blockBlobURL\n * @param {IUploadToBlockBlobOptions} [options]\n * @returns {Promise}\n */\nasync function UploadSeekableBlobToBlockBlob(\n aborter: Aborter,\n blobFactory: (offset: number, size: number) => Blob,\n size: number,\n blockBlobURL: BlockBlobURL,\n options: IUploadToBlockBlobOptions = {}\n): Promise {\n if (!options.blockSize) {\n options.blockSize = 0;\n }\n if (options.blockSize < 0 || options.blockSize > BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES) {\n throw new RangeError(\n `blockSize option must be >= 0 and <= ${BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES}`\n );\n }\n\n if (options.maxSingleShotSize !== 0 && !options.maxSingleShotSize) {\n options.maxSingleShotSize = BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES;\n }\n if (\n options.maxSingleShotSize < 0 ||\n options.maxSingleShotSize > BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES\n ) {\n throw new RangeError(\n `maxSingleShotSize option must be >= 0 and <= ${BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES}`\n );\n }\n\n if (options.blockSize === 0) {\n if (size > BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES * BLOCK_BLOB_MAX_BLOCKS) {\n throw new RangeError(`${size} is too larger to upload to a block blob.`);\n }\n if (size > options.maxSingleShotSize) {\n options.blockSize = Math.ceil(size / BLOCK_BLOB_MAX_BLOCKS);\n if (options.blockSize < DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES) {\n options.blockSize = DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES;\n }\n }\n }\n if (!options.blobHTTPHeaders) {\n options.blobHTTPHeaders = {};\n }\n if (!options.blobAccessConditions) {\n options.blobAccessConditions = {};\n }\n\n if (size <= options.maxSingleShotSize) {\n return blockBlobURL.upload(aborter, blobFactory(0, size), size, options);\n }\n\n const numBlocks: number = Math.floor((size - 1) / options.blockSize) + 1;\n if (numBlocks > BLOCK_BLOB_MAX_BLOCKS) {\n throw new RangeError(\n `The buffer's size is too big or the BlockSize is too small;` +\n `the number of blocks must be <= ${BLOCK_BLOB_MAX_BLOCKS}`\n );\n }\n\n const blockList: string[] = [];\n const blockIDPrefix = generateUuid();\n let transferProgress: number = 0;\n\n const batch = new Batch(options.parallelism);\n for (let i = 0; i < numBlocks; i++) {\n batch.addOperation(\n async (): Promise => {\n const blockID = generateBlockID(blockIDPrefix, i);\n const start = options.blockSize! * i;\n const end = i === numBlocks - 1 ? size : start + options.blockSize!;\n const contentLength = end - start;\n blockList.push(blockID);\n await blockBlobURL.stageBlock(\n aborter,\n blockID,\n blobFactory(start, contentLength),\n contentLength,\n {\n leaseAccessConditions: options.blobAccessConditions!.leaseAccessConditions\n }\n );\n // Update progress after block is successfully uploaded to server, in case of block trying\n // TODO: Hook with convenience layer progress event in finer level\n transferProgress += contentLength;\n if (options.progress) {\n options.progress!({\n loadedBytes: transferProgress\n });\n }\n }\n );\n }\n await batch.do();\n\n return blockBlobURL.commitBlockList(aborter, blockList, options);\n}\n","import { HttpRequestBody, TransferProgressEvent } from \"@azure/ms-rest-js\";\n\nimport { Aborter } from \"./Aborter\";\nimport { BlobURL } from \"./BlobURL\";\nimport { ContainerURL } from \"./ContainerURL\";\nimport * as Models from \"./generated/src/models\";\nimport { PageBlob } from \"./generated/src/operations\";\nimport { rangeToString } from \"./IRange\";\nimport { IBlobAccessConditions, IMetadata, IPageBlobAccessConditions, ensureCpkIfSpecified, PremiumPageBlobTier, toAccessTier } from \"./models\";\nimport { Pipeline } from \"./Pipeline\";\nimport { URLConstants } from \"./utils/constants\";\nimport { appendToURLPath, setURLParameter } from \"./utils/utils.common\";\n\nexport interface IPageBlobCreateOptions {\n accessConditions?: IBlobAccessConditions;\n blobSequenceNumber?: number;\n blobHTTPHeaders?: Models.BlobHTTPHeaders;\n metadata?: IMetadata;\n customerProvidedKey?: Models.CpkInfo;\n tier?: PremiumPageBlobTier | string;\n}\n\nexport interface IPageBlobUploadPagesOptions {\n accessConditions?: IPageBlobAccessConditions;\n progress?: (progress: TransferProgressEvent) => void;\n\n /**\n * An MD5 hash of the content. This hash is used to verify the integrity of the content during transport. \n * When this is specified, the storage service compares the hash of the content that has arrived with this value.\n * \n * transactionalContentMD5 and transactionalContentCrc64 cannot be set at same time.\n */\n transactionalContentMD5?: Uint8Array;\n\n /**\n * A CRC64 hash of the content. This hash is used to verify the integrity of the content during transport. \n * When this is specified, the storage service compares the hash of the content that has arrived with this value.\n * \n * transactionalContentMD5 and transactionalContentCrc64 cannot be set at same time.\n */\n transactionalContentCrc64?: Uint8Array;\n customerProvidedKey?: Models.CpkInfo;\n}\n\nexport interface IPageBlobUploadPagesFromURLOptions {\n accessConditions?: IPageBlobAccessConditions;\n sourceModifiedAccessConditions?: Models.ModifiedAccessConditions;\n\n /**\n * An MD5 hash of the content from the URI. \n * This hash is used to verify the integrity of the content during transport of the data from the URI. \n * When this is specified, the storage service compares the hash of the content that has arrived from the copy-source with this value.\n * \n * sourceContentMD5 and sourceContentCrc64 cannot be set at same time.\n */\n sourceContentMD5?: Uint8Array;\n\n /**\n * A CRC64 hash of the content from the URI. \n * This hash is used to verify the integrity of the content during transport of the data from the URI. \n * When this is specified, the storage service compares the hash of the content that has arrived from the copy-source with this value.\n * \n * sourceContentMD5 and sourceContentCrc64 cannot be set at same time.\n */\n sourceContentCrc64?: Uint8Array;\n customerProvidedKey?: Models.CpkInfo;\n}\n\nexport interface IPageBlobClearPagesOptions {\n accessConditions?: IPageBlobAccessConditions;\n customerProvidedKey?: Models.CpkInfo;\n}\n\nexport interface IPageBlobGetPageRangesOptions {\n accessConditions?: IBlobAccessConditions;\n}\n\nexport interface IPageBlobGetPageRangesDiffOptions {\n accessConditions?: IBlobAccessConditions;\n range?: string;\n}\n\nexport interface IPageBlobResizeOptions {\n accessConditions?: IBlobAccessConditions;\n}\n\nexport interface IPageBlobUpdateSequenceNumberOptions {\n accessConditions?: IBlobAccessConditions;\n}\n\nexport interface IPageBlobStartCopyIncrementalOptions {\n modifiedAccessConditions?: Models.ModifiedAccessConditions;\n}\n\n/**\n * PageBlobURL defines a set of operations applicable to page blobs.\n *\n * @export\n * @class PageBlobURL\n * @extends {StorageURL}\n */\nexport class PageBlobURL extends BlobURL {\n /**\n * Creates a PageBlobURL object from ContainerURL instance.\n *\n * @static\n * @param {ContainerURL} containerURL A ContainerURL object\n * @param {string} blobName A page blob name\n * @returns {PageBlobURL}\n * @memberof PageBlobURL\n */\n public static fromContainerURL(containerURL: ContainerURL, blobName: string): PageBlobURL {\n return new PageBlobURL(\n appendToURLPath(containerURL.url, encodeURIComponent(blobName)),\n containerURL.pipeline\n );\n }\n\n /**\n * Creates a PageBlobURL object from BlobURL instance.\n *\n * @static\n * @param {BlobURL} blobURL\n * @returns {PageBlobURL}\n * @memberof PageBlobURL\n */\n public static fromBlobURL(blobURL: BlobURL): PageBlobURL {\n return new PageBlobURL(blobURL.url, blobURL.pipeline);\n }\n\n /**\n * pageBlobsContext provided by protocol layer.\n *\n * @private\n * @type {PageBlobs}\n * @memberof PageBlobURL\n */\n private pageBlobContext: PageBlob;\n\n /**\n * Creates an instance of PageBlobURL.\n * This method accepts an encoded URL or non-encoded URL pointing to a page blob.\n * Encoded URL string will NOT be escaped twice, only special characters in URL path will be escaped.\n * If a blob name includes ? or %, blob name must be encoded in the URL.\n *\n * @param {string} url A URL string pointing to Azure Storage page blob, such as\n * \"https://myaccount.blob.core.windows.net/mycontainer/pageblob\". You can\n * append a SAS if using AnonymousCredential, such as\n * \"https://myaccount.blob.core.windows.net/mycontainer/pageblob?sasString\".\n * This method accepts an encoded URL or non-encoded URL pointing to a blob.\n * Encoded URL string will NOT be escaped twice, only special characters in URL path will be escaped.\n * However, if a blob name includes ? or %, blob name must be encoded in the URL.\n * Such as a blob named \"my?blob%\", the URL should be \"https://myaccount.blob.core.windows.net/mycontainer/my%3Fblob%25\".\n * @param {Pipeline} pipeline Call StorageURL.newPipeline() to create a default\n * pipeline, or provide a customized pipeline.\n * @memberof PageBlobURL\n */\n constructor(url: string, pipeline: Pipeline) {\n super(url, pipeline);\n this.pageBlobContext = new PageBlob(this.storageClientContext);\n }\n\n /**\n * Creates a new PageBlobURL object identical to the source but with the\n * specified request policy pipeline.\n *\n * @param {Pipeline} pipeline\n * @returns {PageBlobURL}\n * @memberof PageBlobURL\n */\n public withPipeline(pipeline: Pipeline): PageBlobURL {\n return new PageBlobURL(this.url, pipeline);\n }\n\n /**\n * Creates a new PageBlobURL object identical to the source but with the\n * specified snapshot timestamp.\n * Provide \"\" will remove the snapshot and return a URL to the base blob.\n *\n * @param {string} snapshot\n * @returns {PageBlobURL}\n * @memberof PageBlobURL\n */\n public withSnapshot(snapshot: string): PageBlobURL {\n return new PageBlobURL(\n setURLParameter(\n this.url,\n URLConstants.Parameters.SNAPSHOT,\n snapshot.length === 0 ? undefined : snapshot\n ),\n this.pipeline\n );\n }\n\n /**\n * Creates a page blob of the specified length. Call uploadPages to upload data\n * data to a page blob.\n * @see https://docs.microsoft.com/rest/api/storageservices/put-blob\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {number} size\n * @param {IPageBlobCreateOptions} [options]\n * @returns {Promise}\n * @memberof PageBlobURL\n */\n public async create(\n aborter: Aborter,\n size: number,\n options: IPageBlobCreateOptions = {}\n ): Promise {\n options.accessConditions = options.accessConditions || {};\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n\n return this.pageBlobContext.create(0, size, {\n abortSignal: aborter,\n blobHTTPHeaders: options.blobHTTPHeaders,\n blobSequenceNumber: options.blobSequenceNumber,\n leaseAccessConditions: options.accessConditions.leaseAccessConditions,\n metadata: options.metadata,\n modifiedAccessConditions: options.accessConditions.modifiedAccessConditions,\n cpkInfo: options.customerProvidedKey,\n tier: toAccessTier(options.tier)\n });\n }\n\n /**\n * Writes 1 or more pages to the page blob. The start and end offsets must be a multiple of 512.\n * @see https://docs.microsoft.com/rest/api/storageservices/put-page\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {HttpRequestBody} body\n * @param {number} offset Offset of destination page blob\n * @param {number} count Content length of the body, also number of bytes to be uploaded\n * @param {IPageBlobUploadPagesOptions} [options]\n * @returns {Promise}\n * @memberof PageBlobURL\n */\n public async uploadPages(\n aborter: Aborter,\n body: HttpRequestBody,\n offset: number,\n count: number,\n options: IPageBlobUploadPagesOptions = {}\n ): Promise {\n options.accessConditions = options.accessConditions || {};\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n\n return this.pageBlobContext.uploadPages(body, count, {\n abortSignal: aborter,\n leaseAccessConditions: options.accessConditions.leaseAccessConditions,\n modifiedAccessConditions: options.accessConditions.modifiedAccessConditions,\n onUploadProgress: options.progress,\n range: rangeToString({ offset, count }),\n sequenceNumberAccessConditions: options.accessConditions.sequenceNumberAccessConditions,\n transactionalContentMD5: options.transactionalContentMD5,\n transactionalContentCrc64: options.transactionalContentCrc64,\n cpkInfo: options.customerProvidedKey\n });\n }\n\n /**\n * The Upload Pages operation writes a range of pages to a page blob where the\n * contents are read from a URL.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/put-page-from-url\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string} sourceURL Specify a URL to the copy source, Shared Access Signature(SAS) maybe needed for authentication\n * @param {number} sourceOffset The source offset to copy from. Pass 0 to copy from the beginning of source page blob\n * @param {number} destOffset Offset of destination page blob\n * @param {number} count Number of bytes to be uploaded from source page blob\n * @param {IPageBlobUploadPagesFromURLOptions} [options={}]\n * @returns {Promise}\n * @memberof PageBlobURL\n */\n public async uploadPagesFromURL(\n aborter: Aborter,\n sourceURL: string,\n sourceOffset: number,\n destOffset: number,\n count: number,\n options: IPageBlobUploadPagesFromURLOptions = {}\n ): Promise {\n options.accessConditions = options.accessConditions || {};\n options.sourceModifiedAccessConditions = options.sourceModifiedAccessConditions || {};\n ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps);\n\n return this.pageBlobContext.uploadPagesFromURL(\n sourceURL,\n rangeToString({ offset: sourceOffset, count }),\n 0,\n rangeToString({ offset: destOffset, count }),\n {\n abortSignal: aborter,\n sourceContentMD5: options.sourceContentMD5,\n sourceContentCrc64: options.sourceContentCrc64,\n leaseAccessConditions: options.accessConditions.leaseAccessConditions,\n sequenceNumberAccessConditions: options.accessConditions.sequenceNumberAccessConditions,\n modifiedAccessConditions: options.accessConditions.modifiedAccessConditions,\n sourceModifiedAccessConditions: {\n sourceIfMatch: options.sourceModifiedAccessConditions.ifMatch,\n sourceIfModifiedSince: options.sourceModifiedAccessConditions.ifModifiedSince,\n sourceIfNoneMatch: options.sourceModifiedAccessConditions.ifNoneMatch,\n sourceIfUnmodifiedSince: options.sourceModifiedAccessConditions.ifUnmodifiedSince\n },\n cpkInfo: options.customerProvidedKey\n }\n );\n }\n\n /**\n * Frees the specified pages from the page blob.\n * @see https://docs.microsoft.com/rest/api/storageservices/put-page\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {number} offset\n * @param {number} count\n * @param {IPageBlobClearPagesOptions} [options]\n * @returns {Promise}\n * @memberof PageBlobURL\n */\n public async clearPages(\n aborter: Aborter,\n offset: number,\n count: number,\n options: IPageBlobClearPagesOptions = {}\n ): Promise {\n options.accessConditions = options.accessConditions || {};\n return this.pageBlobContext.clearPages(0, {\n abortSignal: aborter,\n leaseAccessConditions: options.accessConditions.leaseAccessConditions,\n modifiedAccessConditions: options.accessConditions.modifiedAccessConditions,\n range: rangeToString({ offset, count }),\n sequenceNumberAccessConditions: options.accessConditions.sequenceNumberAccessConditions,\n cpkInfo: options.customerProvidedKey\n });\n }\n\n /**\n * Returns the list of valid page ranges for a page blob or snapshot of a page blob.\n * @see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {number} offset\n * @param {number} count\n * @param {IPageBlobGetPageRangesOptions} [options]\n * @returns {Promise}\n * @memberof PageBlobURL\n */\n public async getPageRanges(\n aborter: Aborter,\n offset: number,\n count: number,\n options: IPageBlobGetPageRangesOptions = {}\n ): Promise {\n options.accessConditions = options.accessConditions || {};\n return this.pageBlobContext.getPageRanges({\n abortSignal: aborter,\n leaseAccessConditions: options.accessConditions.leaseAccessConditions,\n modifiedAccessConditions: options.accessConditions.modifiedAccessConditions,\n range: rangeToString({ offset, count })\n });\n }\n\n /**\n * Gets the collection of page ranges that differ between a specified snapshot and this page blob.\n * @see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {number} offset\n * @param {number} count\n * @param {string} prevSnapshot\n * @param {IPageBlobGetPageRangesDiffOptions} [options]\n * @returns {Promise}\n * @memberof PageBlobURL\n */\n public async getPageRangesDiff(\n aborter: Aborter,\n offset: number,\n count: number,\n prevSnapshot: string,\n options: IPageBlobGetPageRangesDiffOptions = {}\n ): Promise {\n options.accessConditions = options.accessConditions || {};\n return this.pageBlobContext.getPageRangesDiff({\n abortSignal: aborter,\n leaseAccessConditions: options.accessConditions.leaseAccessConditions,\n modifiedAccessConditions: options.accessConditions.modifiedAccessConditions,\n prevsnapshot: prevSnapshot,\n range: rangeToString({ offset, count })\n });\n }\n\n /**\n * Resizes the page blob to the specified size (which must be a multiple of 512).\n * @see https://docs.microsoft.com/rest/api/storageservices/set-blob-properties\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {number} size\n * @param {IPageBlobResizeOptions} [options]\n * @returns {Promise}\n * @memberof PageBlobURL\n */\n public async resize(\n aborter: Aborter,\n size: number,\n options: IPageBlobResizeOptions = {}\n ): Promise {\n options.accessConditions = options.accessConditions || {};\n return this.pageBlobContext.resize(size, {\n abortSignal: aborter,\n leaseAccessConditions: options.accessConditions.leaseAccessConditions,\n modifiedAccessConditions: options.accessConditions.modifiedAccessConditions\n });\n }\n\n /**\n * Sets a page blob's sequence number.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-properties\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {Models.SequenceNumberActionType} sequenceNumberAction\n * @param {number} [sequenceNumber] Required if sequenceNumberAction is max or update\n * @param {IPageBlobUpdateSequenceNumberOptions} [options]\n * @returns {Promise}\n * @memberof PageBlobURL\n */\n public async updateSequenceNumber(\n aborter: Aborter,\n sequenceNumberAction: Models.SequenceNumberActionType,\n sequenceNumber?: number,\n options: IPageBlobUpdateSequenceNumberOptions = {}\n ): Promise {\n options.accessConditions = options.accessConditions || {};\n return this.pageBlobContext.updateSequenceNumber(sequenceNumberAction, {\n abortSignal: aborter,\n blobSequenceNumber: sequenceNumber,\n leaseAccessConditions: options.accessConditions.leaseAccessConditions,\n modifiedAccessConditions: options.accessConditions.modifiedAccessConditions\n });\n }\n\n /**\n * Begins an operation to start an incremental copy from one page blob's snapshot to this page blob.\n * The snapshot is copied such that only the differential changes between the previously\n * copied snapshot are transferred to the destination.\n * The copied snapshots are complete copies of the original snapshot and can be read or copied from as usual.\n * @see https://docs.microsoft.com/rest/api/storageservices/incremental-copy-blob\n * @see https://docs.microsoft.com/en-us/azure/virtual-machines/windows/incremental-snapshots\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string} copySource Specifies the name of the source page blob snapshot. For example,\n * https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot=\n * @param {IPageBlobStartCopyIncrementalOptions} [options]\n * @returns {Promise}\n * @memberof PageBlobURL\n */\n public async startCopyIncremental(\n aborter: Aborter,\n copySource: string,\n options: IPageBlobStartCopyIncrementalOptions = {}\n ): Promise {\n return this.pageBlobContext.copyIncremental(copySource, {\n abortSignal: aborter,\n modifiedAccessConditions: options.modifiedAccessConditions\n });\n }\n}\n","/**\n * Convert a Browser Blob object into ArrayBuffer.\n *\n * @export\n * @param {Blob} blob\n * @returns {Promise}\n */\nexport async function blobToArrayBuffer(blob: Blob): Promise {\n const fileReader = new FileReader();\n return new Promise((resolve, reject) => {\n fileReader.onloadend = (ev: any) => {\n resolve(ev.target!.result);\n };\n fileReader.onerror = reject;\n fileReader.readAsArrayBuffer(blob);\n });\n}\n\n/**\n * Convert a Browser Blob object into string.\n *\n * @export\n * @param {Blob} blob\n * @returns {Promise}\n */\nexport async function blobToString(blob: Blob): Promise {\n const fileReader = new FileReader();\n return new Promise((resolve, reject) => {\n fileReader.onloadend = (ev: any) => {\n resolve(ev.target!.result);\n };\n fileReader.onerror = reject;\n fileReader.readAsText(blob);\n });\n}\n","import * as Models from \"./generated/src/models\";\nimport { blobToString } from \"./utils/utils.browser\";\n\nexport async function getBodyAsText(\n batchResponse: Models.ServiceSubmitBatchResponse\n): Promise {\n const blob = (await batchResponse.blobBody) as Blob;\n return await blobToString(blob);\n}\n\nexport function utf8ByteLength(str: string): number {\n return new Blob([str]).size;\n}\n","import { HttpHeaders } from \"@azure/ms-rest-js\";\n\nimport * as Models from \"./generated/src/models\";\nimport {\n HTTP_VERSION_1_1,\n HTTP_LINE_ENDING,\n HeaderConstants,\n HTTPURLConnection\n} from \"./utils/constants\";\nimport { getBodyAsText } from \"./BatchUtils\";\nimport { BatchSubRequest } from \"./BatchRequest\";\nimport { BatchSubResponse, ParsedBatchResponse } from \"./BatchResponse\";\n\nconst HTTP_HEADER_DELIMITER = \": \";\nconst SPACE_DELIMITER = \" \";\nconst NOT_FOUND = -1;\n\n/**\n * Util class for parsing batch response.\n */\nexport class BatchResponseParser {\n private readonly batchResponse: Models.ServiceSubmitBatchResponse;\n private readonly responseBatchBoundary: string;\n private readonly perResponsePrefix: string;\n private readonly batchResponseEnding: string;\n private readonly subRequests: Map;\n\n constructor(\n batchResponse: Models.ServiceSubmitBatchResponse,\n subRequests: Map\n ) {\n if (!batchResponse || !batchResponse.contentType) {\n // In special case(reported), server may return invalid content-type which could not be parsed.\n throw new RangeError(\"batchResponse is malformed or doesn't contain valid content-type.\")\n }\n\n if (!subRequests || subRequests.size === 0) {\n // This should be prevent during coding.\n throw new RangeError(\"Invalid state: subRequests is not provided or size is 0.\")\n }\n\n this.batchResponse = batchResponse;\n this.subRequests = subRequests;\n this.responseBatchBoundary = this.batchResponse.contentType!.split(\"=\")[1];\n this.perResponsePrefix = `--${this.responseBatchBoundary}${HTTP_LINE_ENDING}`;\n this.batchResponseEnding = `--${this.responseBatchBoundary}--`;\n }\n\n // For example of response, please refer to https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch#response\n public async parseBatchResponse(): Promise {\n // When logic reach here, suppose batch request has already succeeded with 202, so we can further parse\n // sub request's response.\n if (this.batchResponse._response.status != HTTPURLConnection.HTTP_ACCEPTED) {\n throw new Error(\n `Invalid state: batch request failed with status: '${this.batchResponse._response.status}'.`\n );\n }\n\n let responseBodyAsText = await getBodyAsText(this.batchResponse);\n\n let subResponses = responseBodyAsText\n .split(this.batchResponseEnding)[0] // string after ending is useless\n .split(this.perResponsePrefix)\n .slice(1); // string before first response boundary is useless\n let subResponseCount = subResponses.length;\n\n // Defensive coding in case of potential error parsing.\n // Note: subResponseCount == 1 is special case where sub request is invalid.\n // We try to prevent such cases through early validation, e.g. validate sub request count >= 1.\n // While in unexpected sub request invalid case, we allow sub response to be parsed and return to user.\n if (subResponseCount != this.subRequests.size && subResponseCount != 1) { \n throw new Error(\"Invalid state: sub responses' count is not equal to sub requests' count.\");\n }\n\n let deserializedSubResponses: Array = new Array(subResponseCount);\n let subResponsesSucceededCount: number = 0;\n let subResponsesFailedCount: number = 0;\n\n // Parse sub subResponses.\n for (let index = 0; index < subResponseCount; index++) {\n const subResponse = subResponses[index];\n deserializedSubResponses[index] = {} as BatchSubResponse;\n let deserializedSubResponse = deserializedSubResponses[index];\n deserializedSubResponse.headers = new HttpHeaders();\n\n let responseLines = subResponse.split(`${HTTP_LINE_ENDING}`);\n let subRespHeaderStartFound = false;\n let subRespHeaderEndFound = false;\n let subRespFailed = false;\n let contentId = NOT_FOUND;\n\n for (const responseLine of responseLines) {\n if (!subRespHeaderStartFound) {\n // Convention line to indicate content ID\n if (responseLine.startsWith(HeaderConstants.CONTENT_ID)) {\n contentId = parseInt(responseLine.split(HTTP_HEADER_DELIMITER)[1]);\n }\n\n // Http version line with status code indicates the start of sub request's response.\n // Example: HTTP/1.1 202 Accepted \n if (responseLine.startsWith(HTTP_VERSION_1_1)) {\n subRespHeaderStartFound = true;\n\n let tokens = responseLine.split(SPACE_DELIMITER);\n deserializedSubResponse.status = parseInt(tokens[1]);\n deserializedSubResponse.statusMessage = tokens.slice(2).join(SPACE_DELIMITER);\n }\n\n continue; // Skip convention headers not specifically for sub request i.e. Content-Type: application/http and Content-ID: *\n }\n\n if (responseLine.trim() === \"\") {\n // Sub response's header start line already found, and the first empty line indicates header end line found. \n if (!subRespHeaderEndFound) {\n subRespHeaderEndFound = true\n }\n\n continue; // Skip empty line\n }\n\n // Note: when code reach here, it indicates subRespHeaderStartFound == true\n if (!subRespHeaderEndFound) {\n if (responseLine.indexOf(HTTP_HEADER_DELIMITER) === -1) {\n // Defensive coding to prevent from missing valuable lines.\n throw new Error(\n `Invalid state: find non-empty line '${responseLine}' without HTTP header delimiter '${HTTP_HEADER_DELIMITER}'.`\n );\n }\n\n // Parse headers of sub response.\n let tokens = responseLine.split(HTTP_HEADER_DELIMITER);\n deserializedSubResponse.headers.set(tokens[0], tokens[1]);\n if (tokens[0] === HeaderConstants.X_MS_ERROR_CODE) {\n deserializedSubResponse.errorCode = tokens[1];\n subRespFailed = true;\n }\n } else {\n // Assemble body of sub response.\n if (!deserializedSubResponse.bodyAsText) {\n deserializedSubResponse.bodyAsText = \"\";\n }\n\n deserializedSubResponse.bodyAsText += responseLine;\n }\n } // Inner for end\n\n if (contentId != NOT_FOUND) {\n deserializedSubResponse._request = this.subRequests.get(contentId)!;\n }\n\n if (subRespFailed) {\n subResponsesFailedCount++;\n } else {\n subResponsesSucceededCount++;\n }\n }\n\n return {\n subResponses: deserializedSubResponses,\n subResponsesSucceededCount: subResponsesSucceededCount,\n subResponsesFailedCount: subResponsesFailedCount\n };\n }\n}\n","import { HttpResponse } from \"@azure/ms-rest-js\";\n\nimport * as Models from \"./generated/src/models\";\nimport { Aborter } from \"./Aborter\";\nimport { BatchRequest } from \"./BatchRequest\";\nimport { BatchResponseParser } from \"./BatchResponseParser\";\nimport { ParsedBatchResponse } from \"./BatchResponse\";\nimport { utf8ByteLength } from \"./BatchUtils\";\nimport { ListContainersIncludeType } from \"./generated/src/models\";\nimport { Service } from \"./generated/src/operations\";\nimport { Pipeline } from \"./Pipeline\";\nimport { StorageURL } from \"./StorageURL\";\nimport { truncatedISO8061Date } from \"./utils/utils.common\";\n\nexport interface IServiceListContainersSegmentOptions {\n /**\n * @member {string} [prefix] Filters the results to return only containers\n * whose name begins with the specified prefix.\n */\n prefix?: string;\n /**\n * @member {number} [maxresults] Specifies the maximum number of containers\n * to return. If the request does not specify maxresults, or specifies a\n * value greater than 5000, the server will return up to 5000 items. Note\n * that if the listing operation crosses a partition boundary, then the\n * service will return a continuation token for retrieving the remainder of\n * the results. For this reason, it is possible that the service will return\n * fewer results than specified by maxresults, or than the default of 5000.\n */\n maxresults?: number;\n /**\n * @member {ListContainersIncludeType} [include] Include this parameter to\n * specify that the container's metadata be returned as part of the response\n * body. Possible values include: 'metadata'\n */\n include?: ListContainersIncludeType;\n}\n\nexport interface UserDelegationKey {\n /**\n * The Azure Active Directory object ID in GUID format.\n *\n * @type {string}\n * @memberof UserDelegationKey\n */\n signedOid: string;\n /**\n * The Azure Active Directory tenant ID in GUID format.\n *\n * @type {string}\n * @memberof UserDelegationKey\n */\n signedTid: string;\n /**\n * The date-time the key is active.\n *\n * @type {Date}\n * @memberof UserDelegationKey\n */\n signedStart: Date;\n /**\n * The date-time the key expires.\n *\n * @type {Date}\n * @memberof UserDelegationKey\n */\n signedExpiry: Date;\n /**\n * Abbreviation of the Azure Storage service that accepts the key.\n *\n * @type {string}\n * @memberof UserDelegationKey\n */\n signedService: string;\n /**\n * The service version that created the key.\n *\n * @type {string}\n * @memberof UserDelegationKey\n */\n signedVersion: string;\n /**\n * The key as a base64 string.\n *\n * @type {string}\n * @memberof UserDelegationKey\n */\n value: string;\n}\n\nexport declare type ServiceGetUserDelegationKeyResponse = UserDelegationKey &\n Models.ServiceGetUserDelegationKeyHeaders & {\n /**\n * The underlying HTTP response.\n */\n _response: HttpResponse & {\n /**\n * The parsed HTTP response headers.\n */\n parsedHeaders: Models.ServiceGetUserDelegationKeyHeaders;\n\n /**\n * The response body as text (string format)\n */\n bodyAsText: string;\n\n /**\n * The response body as parsed JSON or XML\n */\n parsedBody: Models.UserDelegationKey;\n };\n };\n\nexport declare type ServiceSubmitBatchResponse = ParsedBatchResponse &\n Models.ServiceSubmitBatchHeaders & {\n /**\n * The underlying HTTP response.\n */\n _response: HttpResponse & {\n /**\n * The parsed HTTP response headers.\n */\n parsedHeaders: Models.ServiceSubmitBatchHeaders;\n };\n };\n\n/**\n * A ServiceURL represents a URL to the Azure Storage Blob service allowing you\n * to manipulate blob containers.\n *\n * @export\n * @class ServiceURL\n * @extends {StorageURL}\n */\nexport class ServiceURL extends StorageURL {\n /**\n * serviceContext provided by protocol layer.\n *\n * @private\n * @type {Service}\n * @memberof ServiceURL\n */\n private serviceContext: Service;\n\n /**\n * Creates an instance of ServiceURL.\n *\n * @param {string} url A URL string pointing to Azure Storage blob service, such as\n * \"https://myaccount.blob.core.windows.net\". You can append a SAS\n * if using AnonymousCredential, such as \"https://myaccount.blob.core.windows.net?sasString\".\n * @param {Pipeline} pipeline Call StorageURL.newPipeline() to create a default\n * pipeline, or provide a customized pipeline.\n * @memberof ServiceURL\n */\n constructor(url: string, pipeline: Pipeline) {\n super(url, pipeline);\n this.serviceContext = new Service(this.storageClientContext);\n }\n\n /**\n * Creates a new ServiceURL object identical to the source but with the\n * specified request policy pipeline.\n *\n * @param {Pipeline} pipeline\n * @returns {ServiceURL}\n * @memberof ServiceURL\n */\n public withPipeline(pipeline: Pipeline): ServiceURL {\n return new ServiceURL(this.url, pipeline);\n }\n\n /**\n * Gets the properties of a storage account’s Blob service, including properties\n * for Storage Analytics and CORS (Cross-Origin Resource Sharing) rules.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-service-properties}\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @returns {Promise}\n * @memberof ServiceURL\n */\n public async getProperties(aborter: Aborter): Promise {\n return this.serviceContext.getProperties({\n abortSignal: aborter\n });\n }\n\n /**\n * Sets properties for a storage account’s Blob service endpoint, including properties\n * for Storage Analytics, CORS (Cross-Origin Resource Sharing) rules and soft delete settings.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-service-properties}\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {Models.StorageServiceProperties} properties\n * @returns {Promise}\n * @memberof ServiceURL\n */\n public async setProperties(\n aborter: Aborter,\n properties: Models.StorageServiceProperties\n ): Promise {\n return this.serviceContext.setProperties(properties, {\n abortSignal: aborter\n });\n }\n\n /**\n * Retrieves statistics related to replication for the Blob service. It is only\n * available on the secondary location endpoint when read-access geo-redundant\n * replication is enabled for the storage account.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-service-stats}\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @returns {Promise}\n * @memberof ServiceURL\n */\n public async getStatistics(aborter: Aborter): Promise {\n return this.serviceContext.getStatistics({\n abortSignal: aborter\n });\n }\n\n /**\n * The Get Account Information operation returns the sku name and account kind\n * for the specified account.\n * The Get Account Information operation is available on service versions beginning\n * with version 2018-03-28.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-account-information\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @returns {Promise}\n * @memberof ServiceURL\n */\n public async getAccountInfo(aborter: Aborter): Promise {\n return this.serviceContext.getAccountInfo({\n abortSignal: aborter\n });\n }\n\n /**\n * Returns a list of the containers under the specified account.\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/list-containers2\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {string} [marker] A string value that identifies the portion of\n * the list of containers to be returned with the next listing operation. The\n * operation returns the NextMarker value within the response body if the\n * listing operation did not return all containers remaining to be listed\n * with the current page. The NextMarker value can be used as the value for\n * the marker parameter in a subsequent call to request the next page of list\n * items. The marker value is opaque to the client.\n * @param {IServiceListContainersSegmentOptions} [options]\n * @returns {Promise}\n * @memberof ServiceURL\n */\n public async listContainersSegment(\n aborter: Aborter,\n marker?: string,\n options: IServiceListContainersSegmentOptions = {}\n ): Promise {\n return this.serviceContext.listContainersSegment({\n abortSignal: aborter,\n marker,\n ...options\n });\n }\n\n /**\n * ONLY AVAILABLE WHEN USING BEARER TOKEN AUTHENTICATION (TokenCredential).\n *\n * Retrieves a user delegation key for the Blob service. This is only a valid operation when using\n * bearer token authentication.\n *\n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-user-delegation-key\n *\n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation\n * @param {Date} start The start time for the user delegation SAS. Must be within 7 days of the current time\n * @param {Date} expiry The end time for the user delegation SAS. Must be within 7 days of the current time\n * @returns {Promise}\n * @memberof ServiceURL\n */\n public async getUserDelegationKey(\n aborter: Aborter,\n start: Date,\n expiry: Date\n ): Promise {\n const response = await this.serviceContext.getUserDelegationKey(\n {\n start: truncatedISO8061Date(start, false),\n expiry: truncatedISO8061Date(expiry, false)\n },\n {\n abortSignal: aborter\n }\n );\n\n const userDelegationKey = {\n signedOid: response.signedOid,\n signedTid: response.signedTid,\n signedStart: new Date(response.signedStart),\n signedExpiry: new Date(response.signedExpiry),\n signedService: response.signedService,\n signedVersion: response.signedVersion,\n value: response.value\n };\n\n const res: ServiceGetUserDelegationKeyResponse = {\n _response: response._response,\n requestId: response.requestId,\n clientRequestId: response.clientRequestId,\n version: response.version,\n date: response.date,\n errorCode: response.errorCode,\n ...userDelegationKey,\n };\n\n return res;\n }\n\n /**\n * Submit batch request which consists of multiple subrequests.\n *\n * @example\n * let batchDeleteRequest = new BatchDeleteRequest();\n * await batchDeleteRequest.addSubRequest(urlInString0, credential0);\n * await batchDeleteRequest.addSubRequest(urlInString1, credential1, {\n * deleteSnapshots: \"include\"\n * });\n * const deleteBatchResp = await serviceURL.submitBatch(Aborter.none, batchDeleteRequest);\n * console.log(deleteBatchResp.subResponsesSucceededCount);\n * \n * @example\n * let batchSetTierRequest = new BatchSetTierRequest();\n * await batchSetTierRequest.addSubRequest(blockBlobURL0, \"Cool\");\n * await batchSetTierRequest.addSubRequest(blockBlobURL1, \"Cool\", {\n * leaseAccessConditions: { leaseId: leaseId }\n * });\n * const setTierBatchResp = await serviceURL.submitBatch(Aborter.none, batchSetTierRequest);\n * console.log(setTierBatchResp.subResponsesSucceededCount);\n * \n * @see https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch\n * \n * @param {Aborter} aborter Create a new Aborter instance with Aborter.none or Aborter.timeout(),\n * goto documents of Aborter for more examples about request cancellation.\n * @param {BatchRequest} batchRequest Supported batch request: BatchDeleteRequest or BatchSetTierRequest.\n * @param {Models.ServiceSubmitBatchOptionalParams} [options]\n * @returns {Promise}\n * @memberof ServiceURL\n */\n public async submitBatch(\n aborter: Aborter,\n batchRequest: BatchRequest,\n options?: Models.ServiceSubmitBatchOptionalParams\n ): Promise {\n if (!batchRequest || batchRequest.getSubRequests().size == 0) {\n throw new RangeError(\"Batch request should contain one or more sub requests.\")\n }\n\n const batchRequestBody = batchRequest.getHttpRequestBody();\n\n const rawBatchResponse: Models.ServiceSubmitBatchResponse = await this.serviceContext.submitBatch(\n batchRequestBody,\n utf8ByteLength(batchRequestBody),\n batchRequest.getMultiPartContentType(),\n {\n abortSignal: aborter,\n ...options\n }\n );\n\n // Parse the sub responses result, if logic reaches here(i.e. the batch request succeeded with status code 202).\n const batchResponseParser = new BatchResponseParser(\n rawBatchResponse,\n batchRequest.getSubRequests()\n );\n const responseSummary = await batchResponseParser.parseBatchResponse();\n\n const res: ServiceSubmitBatchResponse = {\n _response: rawBatchResponse._response,\n contentType: rawBatchResponse.contentType,\n errorCode: rawBatchResponse.errorCode,\n requestId: rawBatchResponse.requestId,\n clientRequestId: rawBatchResponse.clientRequestId,\n version: rawBatchResponse.version,\n subResponses: responseSummary.subResponses,\n subResponsesSucceededCount: responseSummary.subResponsesSucceededCount,\n subResponsesFailedCount: responseSummary.subResponsesFailedCount\n };\n\n return res;\n }\n}\n"],"names":["getHeaderKey","headerName","toLowerCase","rawHeaders","this","_headersMap","set","HttpHeaders","headerValue","name","value","toString","header","undefined","result","contains","headerKey","headers","push","headerNames","headersArray","i","length","headerValues","JSON","stringify","toJson","encodeByteArray","str","String","fromCharCode","btoa","decodeString","byteString","atob","arr","Uint8Array","charCodeAt","getRandomValues","crypto","bind","window","msCrypto","rnds8","module","rnds","Array","r","Math","random","byteToHex","substr","buf","offset","bth","join","options","rng","ii","bytesToUuid","Constants","msRestVersion","HTTP","HTTPS","HTTP_PROXY","HTTPS_PROXY","HttpConstants","HttpVerbs","PUT","GET","DELETE","POST","MERGE","HEAD","PATCH","StatusCodes","TooManyRequests","HeaderConstants","AUTHORIZATION","AUTHORIZATION_SCHEME","RETRY_AFTER","USER_AGENT","isNode","process","version","versions","node","stripResponse","response","strippedResponse","body","bodyAsText","status","stripRequest","request","strippedRequest","clone","remove","generateUuid","uuidv4","delay","t","Promise","resolve","setTimeout","validateISODuration","replaceAll","searchValue","replaceValue","split","modelMappers","isXML","Serializer","mapper","objectName","failValidation","constraintName","constraintValue","Error","constraints","_a","ExclusiveMaximum","ExclusiveMinimum","InclusiveMaximum","InclusiveMinimum","MaxItems","MaxLength","MinItems","MinLength","MultipleOf","Pattern","UniqueItems","pattern","RegExp","match","some","item","ar","indexOf","object","payload","mapperType","type","serializedName","isConstant","defaultValue","required","nullable","validateConstraints","typeName","valueOf","uuid","test","objectType","ArrayBuffer","isView","Blob","serializeBasicTypes","allowedValues","serializeEnumType","Date","isNaN","parse","toISOString","substring","toUTCString","d","floor","getTime","dateToUnixTime","utils.isDuration","serializeDateTypes","base64.encodeByteArray","serializeByteArrayType","buffer","ch","len","trimEnd","replace","bufferToBase64Url","serializeBase64UrlType","serializer","isArray","elementType","element","tempArray","serialize","serializeSequenceType","valueType","tempDictionary","Object","keys","_i","key","serializeDictionaryType","getPolymorphicDiscriminatorRecursively","getPolymorphicMapper","modelProps","resolveModelProperties","_b","propertyMapper","readOnly","propName","parentObject","xmlIsWrapped","xmlName","xmlElementName","paths","splitSerializeName","pop","paths_1","_c","pathName","propertyObjectName","toSerialize","polymorphicDiscriminator","clientName","serializedValue","xmlIsAttribute","$","additionalPropertiesMapper","additionalProperties","propNames","clientPropName","every","pn","serializeCompositeType","responseBody","instance","handledPropertyNames","headerCollectionPrefix","dictionary","startsWith","deserialize","unwrappedProperty","propertyInstance","res","paths_2","_d","isAdditionalProperty","responsePropName","_f","_e","includes","isSpecialXmlProperty","deserializeCompositeType","parseFloat","n","unixTimeToDate","base64.decodeString","base64UrlToByteArray","deserializeSequenceType","deserializeDictionaryType","prop","classes","partialclass","subwords_1","charAt","modelProperties","className","modelMapper","propertyName","polymorphicPropertyName","discriminatorName","discriminatorValue","uberParent","indexDiscriminator","polymorphicMapper","discriminators","getPolymorphicDiscriminatorSafely","MapperType","o","o_1","strEnum","url","method","query","streamResponseBody","withCredentials","abortSignal","timeout","onUploadProgress","onDownloadProgress","proxySettings","keepAlive","formData","WebResource","pathTemplate","validMethods","toUpperCase","pathTemplate_1","pathParameters_1","baseUrl","url_1","endsWith","slice","segments","forEach","pathParamName","pathParam","encodeURIComponent","skipUrlEncoding","queryParameters","queryParams","queryParamName","queryParam","get","disableClientRequestId","bodyIsStream","serializationMapper","mappers","disableJsonStringifyOnBody","operationSpec","shouldDeserialize","operationResponseGetter","extendStatics","b","setPrototypeOf","__proto__","p","hasOwnProperty","__extends","__","constructor","prototype","create","__assign","assign","s","arguments","call","apply","__awaiter","thisArg","_arguments","P","generator","reject","fulfilled","step","next","e","rejected","done","then","__generator","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","HttpPipelineLogLevel","message","code","statusCode","_super","_this","RestError","tslib_1.__extends","XhrHttpClient","xhr","XMLHttpRequest","listener_1","abort","addEventListener","readyState","DONE","removeEventListener","addProgressListener","upload","requestForm_1","FormData","appendFormValue","append","formKey","formValue","j","contentType","open","setRequestHeader","responseType","send","HEADERS_RECEIVED","blobBody","rejectOnTerminalEvent","parseHeaders","responseText","listener","rawEvent","loadedBytes","loaded","responseHeaders","headerLines_1","getAllResponseHeaders","trim","line","index","REQUEST_SEND_ERROR","REQUEST_ABORTED_ERROR","getPathStringFromParameter","parameter","getPathStringFromParameterPath","parameterPath","isStreamOperation","responses","operationResponse","bodyMapper","Stream","parser","DOMParser","parseXML","dom","parseFromString","errorNS","parserErrors","getElementsByTagNameNS","innerHTML","throwIfError","obj","domToObject","childNodeCount","childNodes","firstChildNode","onlyChildTextValue","nodeType","Node","TEXT_NODE","nodeValue","elementWithAttributes","attributes","isElement","hasAttributes","asElementWithAttributes","attr","nodeName","child","childObject","err","getElementsByTagName","namespaceURI","ignored","doc","document","implementation","createDocument","XMLSerializer","stringifyXML","opts","buildNode","elementName","elem","createElement","textContent","obj_1","arrayElem","buildAttributes","setNamedItem","_h","_g","appendChild","rootName","serializeToString","attrs","createAttribute","_nextPolicy","_options","BaseRequestPolicy","logLevel","shouldLog","log","_logger","RequestPolicyOptions","OFF","minimumLogLevel","deserializationPolicy","deserializationContentTypes","nextPolicy","DeserializationPolicy","defaultJsonContentTypes","defaultXmlContentTypes","jsonContentTypes","json","xmlContentTypes","xml","sendRequest","errorHandler","msg","errCode","PARSE_ERROR","text_1","contentComponents","map","component","parsedBody","catch","parsedResponse","shouldDeserializeResponse","expectedStatusCodes","hasNoExpectedStatusCodes","responseSpec","getOperationResponse","valueToDeserialize","Sequence","error","restError","utils.stripRequest","utils.stripResponse","httpMethod","headersMapper","parsedHeaders","defaultResponseSpec","default","initialErrorMessage","parsedErrorResponse","defaultResponseBodyMapper","internalError","defaultError","deserializeResponseBody","DEFAULT_CLIENT_RETRY_INTERVAL","DEFAULT_CLIENT_RETRY_COUNT","DEFAULT_CLIENT_MAX_RETRY_INTERVAL","DEFAULT_CLIENT_MIN_RETRY_INTERVAL","retryCount","retryInterval","minRetryInterval","maxRetryInterval","isNumber","ExponentialRetryPolicy","retry","policy","retryData","requestError","innerError","incrementDelta","pow","min","updateRetryData","isAborted","aborted","shouldRetry","utils.delay","_requestIdHeaderName","GenerateClientRequestIdPolicy","utils.generateUuid","getDefaultUserAgentKey","getDefaultUserAgentHeaderName","getDefaultUserAgentValue","navigator","telemetryInfo","keySeparator","valueSeparator","runtimeInfo","platformSpecificData","oscpu","platform","concat","info","UserAgentPolicy","addUserAgentHeader","URLQuery","_rawQuery","parameterName","parameterValue","newValue","parameterStrings","parameterValue_1","parameterValueElement","text","currentState","currentCharacter","URLBuilder","scheme","_scheme","host","_host","port","_port","path","_path","currentPath","getPath","_query","queryParameterName","queryParameterValue","startState","tokenizer","URLTokenizer","token","current","tokenPath","any","setScheme","getScheme","setHost","getHost","setPort","getPort","setPath","setQuery","getQuery","URLToken","_text","state","_textLength","_currentState","_currentIndex","_currentToken","hasCurrentCharacter","readWhile","character","characterCode","isAlphaNumericCharacter","readWhileLetterOrDigit","schemeOrHost","readUntilCharacter","getCurrentCharacter","peekCharacters","nextSchemeOrHost","nextCharacter","nextHost","nextPort","nextPath","readRemaining","nextQuery","charactersToPeek","endIndex","condition","terminatingCharacters","maxRetries","RedirectPolicy","handleRedirect","currentRetries","locationHeader","builder","_retryTimeout","RPRegistrationPolicy","rpName","matchRes","checkRPNotRegisteredError","urlPrefix","extractSubscriptionUrl","provider","originalRequest","postUrl","getUrl","reqOptions","getRequestEssentials","getRegistrationStatus","registrationState","registerRP","registrationStatus","registerIfNeeded","reuseUrlToo","authenticationProvider","SigningPolicy","signRequest","nextRequest","QueryCollectionFormat","SystemErrorRetryPolicy","boundedRandDelta","currentCount","getDefaultProxySettings","proxyUrl","env","loadEnvironmentProxyValue","parsedUrl","Number","parseInt","ProxyPolicy","_handleResponse","_defaultResponseHandler","ThrottlingRetryPolicy","httpRequest","httpResponse","retryAfterHeader","delayInMs","parseRetryAfterHeader","retryAfterInSeconds","parseDateRetryAfterHeader","now","diff","credentials","requestPolicyFactories","_withCredentials","_httpClient","httpClient","DefaultHttpClient","_requestPolicyOptions","httpPipelineLogger","factories","generateClientRequestIdHeader","requestIdHeaderName","clientRequestIdHeaderName","userAgentHeaderName","getValueOrFunctionResult","userAgentHeaderValue","userAgent","userAgentData","maximumRetries","redirectPolicy","retryTimeout","rpRegistrationPolicy","rpRegistrationRetryTimeout","noRetryPolicy","systemErrorRetryPolicy","proxyPolicy","createDefaultRequestPolicyFactories","newRequestPolicyFactories","_requestPolicyFactories","ServiceClient","validateRequestProperties","prepare","httpPipeline","operationArguments","callback","baseUri","requestUrl","appendPath","urlParameters","urlParameter","urlParameterValue","getOperationArgumentValueFromParameter","skipEncoding","queryParameter","collectionFormat","Multi","setQueryParameter","requestContentType","headerParameters","headerParameter","customHeaders","customHeaderName","serviceClient","requestBody","requestBodyParameterPathString","isStream","utils.prepareXMLRootList","formDataParameters","formDataParameter","formDataParameterValue","formDataParameterPropertyName","serializeRequestBody","_response","addOperationResponse","defineProperty","readableStreamBody","modelProperties_1","isPageableResponse","k","arrayResponse","flattenResponse","cb","defaultValueCreator","getOperationArgumentValueFromParameterPath","parameterMapper","propertySearchResult","getPropertyFromParameterPath","propertyFound","useDefaultValue","propertyValue","parameterPathString","propertyPath","propertyPathString","parent","parameterPathPart","timer","unref","Aborter","_aborted","childCancelContext","children","parent_1","cancelTimer","onabort","abortEventListeners","cancelByParent","_type","splice","clearTimeout","KeyInfo","start","expiry","UserDelegationKey","signedOid","signedTid","signedStart","signedExpiry","signedService","signedVersion","StorageError","DataLakeStorageError","ListBlobsFlatSegmentResponse","serviceEndpoint","containerName","prefix","marker","maxResults","delimiter","segment","nextMarker","ListBlobsHierarchySegmentResponse","BlockList","committedBlocks","uncommittedBlocks","BlockLookupList","committed","uncommitted","latest","ListContainersSegmentResponse","containerItems","PageList","pageRange","clearRange","StorageServiceProperties","logging","hourMetrics","minuteMetrics","cors","defaultServiceVersion","deleteRetentionPolicy","staticWebsite","StorageServiceStats","geoReplication","ServiceSetPropertiesHeaders","clientRequestId","requestId","errorCode","ServiceGetPropertiesHeaders","ServiceGetStatisticsHeaders","date","ServiceListContainersSegmentHeaders","ServiceGetUserDelegationKeyHeaders","ServiceGetAccountInfoHeaders","skuName","accountKind","ServiceSubmitBatchHeaders","ContainerCreateHeaders","eTag","lastModified","ContainerGetPropertiesHeaders","metadata","leaseDuration","leaseState","leaseStatus","blobPublicAccess","hasImmutabilityPolicy","hasLegalHold","ContainerDeleteHeaders","ContainerSetMetadataHeaders","ContainerGetAccessPolicyHeaders","ContainerSetAccessPolicyHeaders","ContainerAcquireLeaseHeaders","leaseId","ContainerReleaseLeaseHeaders","ContainerRenewLeaseHeaders","ContainerBreakLeaseHeaders","leaseTime","ContainerChangeLeaseHeaders","ContainerListBlobFlatSegmentHeaders","ContainerListBlobHierarchySegmentHeaders","ContainerGetAccountInfoHeaders","BlobDownloadHeaders","contentLength","contentRange","contentMD5","contentEncoding","cacheControl","contentDisposition","contentLanguage","blobSequenceNumber","blobType","copyCompletionTime","copyStatusDescription","copyId","copyProgress","copySource","copyStatus","acceptRanges","blobCommittedBlockCount","isServerEncrypted","encryptionKeySha256","blobContentMD5","contentCrc64","BlobGetPropertiesHeaders","creationTime","isIncrementalCopy","destinationSnapshot","accessTier","accessTierInferred","archiveStatus","accessTierChangeTime","BlobDeleteHeaders","BlobSetAccessControlHeaders","BlobGetAccessControlHeaders","xMsOwner","xMsGroup","xMsPermissions","xMsAcl","BlobRenameHeaders","PageBlobCreateHeaders","AppendBlobCreateHeaders","BlockBlobUploadHeaders","BlobUndeleteHeaders","BlobSetHTTPHeadersHeaders","BlobSetMetadataHeaders","BlobAcquireLeaseHeaders","BlobReleaseLeaseHeaders","BlobRenewLeaseHeaders","BlobChangeLeaseHeaders","BlobBreakLeaseHeaders","BlobCreateSnapshotHeaders","snapshot","BlobStartCopyFromURLHeaders","BlobCopyFromURLHeaders","BlobAbortCopyFromURLHeaders","BlobSetTierHeaders","BlobGetAccountInfoHeaders","BlockBlobStageBlockHeaders","xMsContentCrc64","BlockBlobStageBlockFromURLHeaders","BlockBlobCommitBlockListHeaders","BlockBlobGetBlockListHeaders","blobContentLength","PageBlobUploadPagesHeaders","PageBlobClearPagesHeaders","PageBlobUploadPagesFromURLHeaders","PageBlobGetPageRangesHeaders","PageBlobGetPageRangesDiffHeaders","PageBlobResizeHeaders","PageBlobUpdateSequenceNumberHeaders","PageBlobCopyIncrementalHeaders","AppendBlobAppendBlockHeaders","blobAppendOffset","AppendBlobAppendBlockFromUrlHeaders","properties","etag","publicAccess","allowedOrigins","allowedMethods","allowedHeaders","exposedHeaders","maxAgeInSeconds","lastSyncTime","deleteProperty","read","write","retentionPolicy","enabled","includeAPIs","days","indexDocument","errorDocument404Path","access","action0","action1","action2","action3","action4","appendPosition","blobCacheControl","blobContentDisposition","blobContentEncoding","blobContentLanguage","blobContentType","blockId","breakPeriod","comp0","comp12","comp13","comp15","comp16","comp17","comp2","comp5","comp6","comp7","duration","encryptionAlgorithm","encryptionKey","ifMatch","ifModifiedSince","ifNoneMatch","ifSequenceNumberEqualTo","ifSequenceNumberLessThan","ifSequenceNumberLessThanOrEqualTo","ifUnmodifiedSince","include1","msRest.QueryCollectionFormat","Csv","leaseId0","leaseId1","marker0","maxresults","maxSize","pageWrite0","posixPermissions","proposedLeaseId0","proposedLeaseId1","range0","rehydratePriority","restype0","restype1","restype2","sourceContentCrc64","sourceContentMD5","sourceIfMatch","sourceIfModifiedSince","sourceIfNoneMatch","sourceIfUnmodifiedSince","sourceRange1","sourceUrl","tier0","transactionalContentCrc64","transactionalContentMD5","client","Service","storageServiceProperties","sendOperationRequest","setPropertiesOperationSpec","getPropertiesOperationSpec","getStatisticsOperationSpec","listContainersSegmentOperationSpec","keyInfo","getUserDelegationKeyOperationSpec","getAccountInfoOperationSpec","multipartContentType","submitBatchOperationSpec","msRest.Serializer","Mappers","Parameters.url","Parameters.timeout","Parameters.restype0","Parameters.comp0","Parameters.version","Parameters.requestId","Mappers.StorageServiceProperties","202","Mappers.ServiceSetPropertiesHeaders","Mappers.StorageError","200","Mappers.ServiceGetPropertiesHeaders","Mappers.StorageServiceStats","Mappers.ServiceGetStatisticsHeaders","Parameters.prefix","Parameters.marker0","Parameters.maxresults","Parameters.comp2","Mappers.ListContainersSegmentResponse","Mappers.ServiceListContainersSegmentHeaders","Mappers.KeyInfo","Mappers.UserDelegationKey","Mappers.ServiceGetUserDelegationKeyHeaders","Parameters.restype1","Mappers.ServiceGetAccountInfoHeaders","Parameters.contentLength","Mappers.ServiceSubmitBatchHeaders","permission","blobItems","blobPrefixes","deleted","encrypted","serverEncrypted","incrementalCopy","deletedTime","remainingRetentionDays","customerProvidedKeySha256","id","accessPolicy","Container","createOperationSpec","deleteMethodOperationSpec","setMetadataOperationSpec","getAccessPolicyOperationSpec","setAccessPolicyOperationSpec","acquireLeaseOperationSpec","releaseLeaseOperationSpec","renewLeaseOperationSpec","breakLeaseOperationSpec","proposedLeaseId","changeLeaseOperationSpec","listBlobFlatSegmentOperationSpec","listBlobHierarchySegmentOperationSpec","Parameters.restype2","Parameters.metadata","Parameters.access","201","Mappers.ContainerCreateHeaders","Parameters.leaseId0","Mappers.ContainerGetPropertiesHeaders","Parameters.ifModifiedSince","Parameters.ifUnmodifiedSince","Mappers.ContainerDeleteHeaders","Parameters.comp5","Mappers.ContainerSetMetadataHeaders","Parameters.comp6","Mappers.ContainerGetAccessPolicyHeaders","Mappers.ContainerSetAccessPolicyHeaders","Parameters.comp7","Parameters.duration","Parameters.proposedLeaseId0","Parameters.action0","Mappers.ContainerAcquireLeaseHeaders","Parameters.leaseId1","Parameters.action1","Mappers.ContainerReleaseLeaseHeaders","Parameters.action2","Mappers.ContainerRenewLeaseHeaders","Parameters.breakPeriod","Parameters.action3","Mappers.ContainerBreakLeaseHeaders","Parameters.proposedLeaseId1","Parameters.action4","Mappers.ContainerChangeLeaseHeaders","Parameters.include1","Mappers.ListBlobsFlatSegmentResponse","Mappers.ContainerListBlobFlatSegmentHeaders","Mappers.ListBlobsHierarchySegmentResponse","Mappers.ContainerListBlobHierarchySegmentHeaders","Mappers.ContainerGetAccountInfoHeaders","downloadOperationSpec","setAccessControlOperationSpec","getAccessControlOperationSpec","renameSource","renameOperationSpec","undeleteOperationSpec","setHTTPHeadersOperationSpec","createSnapshotOperationSpec","startCopyFromURLOperationSpec","copyFromURLOperationSpec","abortCopyFromURLOperationSpec","tier","setTierOperationSpec","Parameters.snapshot","Parameters.range0","Parameters.encryptionKey","Parameters.encryptionKeySha256","Parameters.encryptionAlgorithm","Parameters.ifMatch","Parameters.ifNoneMatch","Mappers.BlobDownloadHeaders","206","Mappers.BlobGetPropertiesHeaders","Mappers.BlobDeleteHeaders","Parameters.posixPermissions","Mappers.BlobSetAccessControlHeaders","Mappers.DataLakeStorageError","Mappers.BlobGetAccessControlHeaders","Parameters.sourceIfModifiedSince","Parameters.sourceIfUnmodifiedSince","Parameters.sourceIfMatch","Parameters.sourceIfNoneMatch","Mappers.BlobRenameHeaders","Mappers.BlobUndeleteHeaders","Parameters.blobCacheControl","Parameters.blobContentType","Parameters.blobContentMD5","Parameters.blobContentEncoding","Parameters.blobContentLanguage","Parameters.blobContentDisposition","Mappers.BlobSetHTTPHeadersHeaders","Mappers.BlobSetMetadataHeaders","Mappers.BlobAcquireLeaseHeaders","Mappers.BlobReleaseLeaseHeaders","Mappers.BlobRenewLeaseHeaders","Mappers.BlobChangeLeaseHeaders","Mappers.BlobBreakLeaseHeaders","Mappers.BlobCreateSnapshotHeaders","Parameters.tier0","Parameters.rehydratePriority","Parameters.copySource","Mappers.BlobStartCopyFromURLHeaders","Mappers.BlobCopyFromURLHeaders","204","Mappers.BlobAbortCopyFromURLHeaders","Mappers.BlobSetTierHeaders","Mappers.BlobGetAccountInfoHeaders","end","PageBlob","uploadPagesOperationSpec","clearPagesOperationSpec","sourceRange","range","uploadPagesFromURLOperationSpec","getPageRangesOperationSpec","getPageRangesDiffOperationSpec","resizeOperationSpec","sequenceNumberAction","updateSequenceNumberOperationSpec","copyIncrementalOperationSpec","Parameters.blobContentLength","Parameters.blobSequenceNumber","Mappers.PageBlobCreateHeaders","Parameters.comp12","Parameters.transactionalContentMD5","Parameters.transactionalContentCrc64","Parameters.pageWrite0","Parameters.ifSequenceNumberLessThanOrEqualTo","Parameters.ifSequenceNumberLessThan","Parameters.ifSequenceNumberEqualTo","Mappers.PageBlobUploadPagesHeaders","Mappers.PageBlobClearPagesHeaders","Parameters.sourceUrl","Parameters.sourceContentMD5","Parameters.sourceContentCrc64","Mappers.PageBlobUploadPagesFromURLHeaders","Parameters.comp13","Mappers.PageList","Mappers.PageBlobGetPageRangesHeaders","Mappers.PageBlobGetPageRangesDiffHeaders","Mappers.PageBlobResizeHeaders","Mappers.PageBlobUpdateSequenceNumberHeaders","Mappers.PageBlobCopyIncrementalHeaders","AppendBlob","appendBlockOperationSpec","appendBlockFromUrlOperationSpec","Mappers.AppendBlobCreateHeaders","Parameters.comp15","Parameters.maxSize","Parameters.appendPosition","Mappers.AppendBlobAppendBlockHeaders","Parameters.sourceRange1","Mappers.AppendBlobAppendBlockFromUrlHeaders","size","BlockBlob","uploadOperationSpec","stageBlockOperationSpec","stageBlockFromURLOperationSpec","blocks","commitBlockListOperationSpec","listType","getBlockListOperationSpec","Mappers.BlockBlobUploadHeaders","Parameters.blockId","Parameters.comp16","Mappers.BlockBlobStageBlockHeaders","Mappers.BlockBlobStageBlockFromURLHeaders","Parameters.comp17","Mappers.BlockLookupList","Mappers.BlockBlobCommitBlockListHeaders","Mappers.BlockList","Mappers.BlockBlobGetBlockListHeaders","rangeToString","iRange","RangeError","count","BlockBlobTier","PremiumPageBlobTier","BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES","BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES","BLOCK_BLOB_MAX_BLOCKS","DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES","URLConstants","FORCE_BROWSER_NO_CACHE","SIGNATURE","SNAPSHOT","TIMEOUT","HTTPURLConnection","CONTENT_ENCODING","CONTENT_ID","CONTENT_LANGUAGE","CONTENT_LENGTH","CONTENT_MD5","CONTENT_TRANSFER_ENCODING","CONTENT_TYPE","COOKIE","DATE","IF_MATCH","IF_MODIFIED_SINCE","IF_NONE_MATCH","IF_UNMODIFIED_SINCE","PREFIX_FOR_STORAGE","RANGE","X_MS_CLIENT_REQUEST_ID","X_MS_DATE","X_MS_ERROR_CODE","X_MS_VERSION","HTTP_LINE_ENDING","EncryptionAlgorithmAES25","toAccessTier","ensureCpkIfSpecified","cpk","isHttps","escapeURLPath","urlParsed","appendToURLPath","setURLParameter","getURLPathAndQuery","pathString","queryString","truncatedISO8061Date","withMilliseconds","dateString","generateBlockID","blockIDPrefix","blockIndex","maxSourceStringLength","content","currentString","targetLength","padString","padStart","repeat","Buffer","from","timeInMs","aborter","abortError","abortHandler","iEqual","str1","str2","toLocaleLowerCase","RetryPolicyType","BrowserPolicy","BrowserPolicyFactory","Credential","packageName","packageVersion","defaultUserAgent","msRest.getDefaultUserAgentValue","pathRenameMode","msRest.ServiceClient","keepAliveOptions","KeepAlivePolicy","enable","KeepAlivePolicyFactory","DEFAULT_REQUEST_LOG_OPTIONS","logWarningIfTryOverThreshold","loggingOptions","LoggingPolicy","tryCount","requestStartTime","operationStartTime","getQueryParameterValue","getURLParameter","safeURL","INFO","requestEndTime","requestCompletionTime","operationDuration","currentLevel","logMessage","WARNING","errorString","ERROR","messageInfo","err_1","LoggingPolicyFactory","Pipeline","HTTPClient","logger","MutexLockStatus","DEFAULT_RETRY_OPTIONS","maxRetryDelayInMs","maxTries","retryDelayInMs","retryPolicyType","EXPONENTIAL","secondaryHost","tryTimeoutInMs","RETRY_ABORT_ERROR","retryOptions","RetryPolicy","attemptSendRequest","secondaryHas404","attempt","newRequest","isPrimaryRetry","setURLHost","logf","retriableErrors_1","retriableError","_level","_message","delayTimeInMs","FIXED","RetryPolicyFactory","telemetry","TelemetryPolicy","telemetryString","TelemetryPolicyFactory","UniqueRequestIDPolicy","UniqueRequestIDPolicyFactory","CredentialPolicy","AnonymousCredential","AnonymousCredentialPolicy","pipeline","storageClientContext","StorageClientContext","toServiceClientOptions","getURLScheme","credential","factory","StorageURL","pipelineOptions","blobContext","BlobURL","containerURL","blobName","blobAccessConditions","modifiedAccessConditions","customerProvidedKey","download","leaseAccessConditions","progress","rangeGetContentMD5","rangeGetContentCRC64","rangeGetContentCrc64","cpkInfo","maxRetryRequests","updatedOptions","getProperties","deleteMethod","deleteSnapshots","undelete","blobHTTPHeaders","setHTTPHeaders","setMetadata","acquireLease","releaseLease","renewLease","changeLease","breakLease","createSnapshot","sourceModifiedAccessConditions","startCopyFromURL","abortCopyFromURL","copyFromURL","setTier","appendBlobContext","AppendBlobURL","blobURL","accessConditions","appendBlock","appendPositionAccessConditions","sourceURL","sourceOffset","appendBlockFromUrl","ReflectOwnKeys","Mutex","UNLOCKED","LOCKED","onUnlockEvent","emitUnlockEvent","handler","listeners","handler_1","shift","setImmediate","batchRequest","InnerBatchRequest","BatchRequest","getMultipartContentType","getHttpRequestBody","getSubRequests","subRequest","assembleSubRequestFunc","lock","batch","preAddSubRequest","postAddSubRequest","unlock","BatchDeleteRequest","urlOrBlobURL","credentialOrOptions","addSubRequestInternal","createPipeline","delete","none","BatchSetTierRequest","credentialOrTier","tierOrOptions","operationCount","tempGuid","boundary","subRequestPrefix","batchRequestEnding","subRequests","Map","isAnonymousCreds","policyFactoryLength","BatchHeaderFilterPolicyFactory","BatchRequestAssemblePolicyFactory","getURLPath","BatchRequestAssemblePolicy","appendSubRequestToBody","dummyResponse","BatchHeaderFilterPolicy","xMsHeaderName","blockBlobContext","BlockBlobURL","stageBlock","stageBlockFromURL","commitBlockList","getBlockList","containerContext","ContainerURL","serviceURL","containerAccessConditions","getAccessPolicy","signedIdentifiers","response_1","identifier","containerAcl","acl","setAccessPolicy","period","listBlobFlatSegment","listBlobHierarchySegment","tokenCredential","authorizationScheme","TokenCredentialPolicy","TokenCredential","R","Reflect","ReflectApply","target","receiver","args","Function","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","EventEmitter","init","_events","_eventsCount","_maxListeners","defaultMaxListeners","$getMaxListeners","that","_addListener","prepend","m","events","existing","warning","newListener","emit","unshift","warned","w","emitter","console","warn","_onceWrap","fired","wrapFn","wrapped","removeListener","_listeners","unwrap","evlistener","ret","unwrapListeners","arrayClone","listenerCount","copy","enumerable","arg","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","context","addListener","on","prependListener","once","prependOnceListener","list","position","originalListener","spliceOne","off","removeAllListeners","rawListeners","eventNames","BatchStates","concurrency","Good","Batch","operation","operations","actives","completed","parallelExecute","error_1","nextOperation","UploadSeekableBlobToBlockBlob","blobFactory","blockBlobURL","blockSize","maxSingleShotSize","ceil","numBlocks","blockList","transferProgress","parallelism","addOperation","blockID","do","pageBlobContext","PageBlobURL","uploadPages","sequenceNumberAccessConditions","destOffset","uploadPagesFromURL","clearPages","getPageRanges","prevSnapshot","getPageRangesDiff","prevsnapshot","resize","sequenceNumber","updateSequenceNumber","copyIncremental","blobToString","blob","fileReader","FileReader","onloadend","ev","onerror","readAsText","getBodyAsText","batchResponse","responseBatchBoundary","perResponsePrefix","batchResponseEnding","BatchResponseParser","responseBodyAsText","subResponses","subResponseCount","deserializedSubResponses","subResponsesSucceededCount","subResponsesFailedCount","subResponse","deserializedSubResponse","responseLines","subRespHeaderStartFound","subRespHeaderEndFound","subRespFailed","contentId","responseLines_1","responseLine","tokens","statusMessage","_request","serviceContext","ServiceURL","setProperties","getStatistics","getAccountInfo","listContainersSegment","getUserDelegationKey","userDelegationKey","batchRequestBody","submitBatch","getMultiPartContentType","rawBatchResponse","parseBatchResponse","responseSummary","browserData","browserBlob"],"mappings":"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"}