/******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 1641: /***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { "use strict"; __nccwpck_require__.r(__webpack_exports__); /* harmony export */ __nccwpck_require__.d(__webpack_exports__, { /* harmony export */ "DEFAULT_CACHE_VERSION": () => (/* binding */ DEFAULT_CACHE_VERSION), /* harmony export */ "detectGemfiles": () => (/* binding */ detectGemfiles), /* harmony export */ "installBundler": () => (/* binding */ installBundler), /* harmony export */ "bundleInstall": () => (/* binding */ bundleInstall) /* harmony export */ }); const fs = __nccwpck_require__(5747) const path = __nccwpck_require__(5622) const core = __nccwpck_require__(2186) const exec = __nccwpck_require__(1514) const cache = __nccwpck_require__(7799) const common = __nccwpck_require__(4717) const DEFAULT_CACHE_VERSION = '0' // The returned gemfile is guaranteed to exist, the lockfile might not exist function detectGemfiles() { const gemfilePath = process.env['BUNDLE_GEMFILE'] || 'Gemfile' if (fs.existsSync(gemfilePath)) { return [gemfilePath, `${gemfilePath}.lock`] } else if (process.env['BUNDLE_GEMFILE']) { throw new Error(`$BUNDLE_GEMFILE is set to ${gemfilePath} but does not exist`) } if (fs.existsSync("gems.rb")) { return ["gems.rb", "gems.locked"] } return [null, null] } function readBundledWithFromGemfileLock(lockFile) { if (lockFile !== null && fs.existsSync(lockFile)) { const contents = fs.readFileSync(lockFile, 'utf8') const lines = contents.split(/\r?\n/) const bundledWithLine = lines.findIndex(line => /^BUNDLED WITH$/.test(line.trim())) if (bundledWithLine !== -1) { const nextLine = lines[bundledWithLine+1] if (nextLine && /^\d+/.test(nextLine.trim())) { const bundlerVersion = nextLine.trim() console.log(`Using Bundler ${bundlerVersion} from ${lockFile} BUNDLED WITH ${bundlerVersion}`) return bundlerVersion } } } return null } async function afterLockFile(lockFile, platform, engine) { if (engine === 'truffleruby' && platform.startsWith('ubuntu-')) { const contents = fs.readFileSync(lockFile, 'utf8') if (contents.includes('nokogiri')) { await common.measure('Installing libxml2-dev libxslt-dev, required to install nokogiri on TruffleRuby', async () => exec.exec('sudo', ['apt-get', '-yqq', 'install', 'libxml2-dev', 'libxslt-dev'], { silent: true })) } } } async function installBundler(bundlerVersionInput, lockFile, platform, rubyPrefix, engine, rubyVersion) { let bundlerVersion = bundlerVersionInput if (bundlerVersion === 'default' || bundlerVersion === 'Gemfile.lock') { bundlerVersion = readBundledWithFromGemfileLock(lockFile) if (!bundlerVersion) { bundlerVersion = 'latest' } } if (bundlerVersion === 'latest') { bundlerVersion = '2' } if (/^\d+/.test(bundlerVersion)) { // OK } else { throw new Error(`Cannot parse bundler input: ${bundlerVersion}`) } if (engine === 'ruby' && rubyVersion.match(/^2\.[012]/)) { console.log('Bundler 2 requires Ruby 2.3+, using Bundler 1 on Ruby <= 2.2') bundlerVersion = '1' } else if (engine === 'ruby' && rubyVersion.match(/^2\.3\.[01]/)) { console.log('Ruby 2.3.0 and 2.3.1 have shipped with an old rubygems that only works with Bundler 1') bundlerVersion = '1' } else if (engine === 'jruby' && rubyVersion.startsWith('9.1')) { // JRuby 9.1 targets Ruby 2.3, treat it the same console.log('JRuby 9.1 has a bug with Bundler 2 (https://github.com/ruby/setup-ruby/issues/108), using Bundler 1 instead on JRuby 9.1') bundlerVersion = '1' } if (common.isHeadVersion(rubyVersion) && common.isBundler2Default(engine, rubyVersion) && bundlerVersion.startsWith('2')) { // Avoid installing a newer Bundler version for head versions as it might not work. // For releases, even if they ship with Bundler 2 we install the latest Bundler. console.log(`Using Bundler 2 shipped with ${engine}-${rubyVersion}`) } else if (engine === 'truffleruby' && !common.isHeadVersion(rubyVersion) && bundlerVersion.startsWith('1')) { console.log(`Using Bundler 1 shipped with ${engine}`) } else { const gem = path.join(rubyPrefix, 'bin', 'gem') const bundlerVersionConstraint = bundlerVersion.match(/^\d+\.\d+\.\d+/) ? bundlerVersion : `~> ${bundlerVersion}` await exec.exec(gem, ['install', 'bundler', '-v', bundlerVersionConstraint, '--no-document']) } return bundlerVersion } async function bundleInstall(gemfile, lockFile, platform, engine, rubyVersion, bundlerVersion, cacheVersion) { if (gemfile === null) { console.log('Could not determine gemfile path, skipping "bundle install" and caching') return false } let envOptions = {} if (bundlerVersion.startsWith('1') && common.isBundler2Default(engine, rubyVersion)) { // If Bundler 1 is specified on Rubies which ship with Bundler 2, // we need to specify which Bundler version to use explicitly until the lockfile exists. console.log(`Setting BUNDLER_VERSION=${bundlerVersion} for "bundle config|lock" commands below to ensure Bundler 1 is used`) envOptions = { env: { ...process.env, BUNDLER_VERSION: bundlerVersion } } } // config const cachePath = 'vendor/bundle' // An absolute path, so it is reliably under $PWD/vendor/bundle, and not relative to the gemfile's directory const bundleCachePath = path.join(process.cwd(), cachePath) await exec.exec('bundle', ['config', '--local', 'path', bundleCachePath], envOptions) if (fs.existsSync(lockFile)) { await exec.exec('bundle', ['config', '--local', 'deployment', 'true'], envOptions) } else { // Generate the lockfile so we can use it to compute the cache key. // This will also automatically pick up the latest gem versions compatible with the Gemfile. await exec.exec('bundle', ['lock'], envOptions) } await afterLockFile(lockFile, platform, engine) // cache key const paths = [cachePath] const baseKey = await computeBaseKey(platform, engine, rubyVersion, lockFile, cacheVersion) const key = `${baseKey}-${await common.hashFile(lockFile)}` // If only Gemfile.lock changes we can reuse part of the cache, and clean old gem versions below const restoreKeys = [`${baseKey}-`] console.log(`Cache key: ${key}`) // restore cache & install let cachedKey = null try { cachedKey = await cache.restoreCache(paths, key, restoreKeys) } catch (error) { if (error.name === cache.ValidationError.name) { throw error; } else { core.info(`[warning] There was an error restoring the cache ${error.message}`) } } if (cachedKey) { console.log(`Found cache for key: ${cachedKey}`) } // Always run 'bundle install' to list the gems await exec.exec('bundle', ['install', '--jobs', '4']) // @actions/cache only allows to save for non-existing keys if (cachedKey !== key) { if (cachedKey) { // existing cache but Gemfile.lock differs, clean old gems await exec.exec('bundle', ['clean']) } // Error handling from https://github.com/actions/cache/blob/master/src/save.ts console.log('Saving cache') try { await cache.saveCache(paths, key) } catch (error) { if (error.name === cache.ValidationError.name) { throw error; } else if (error.name === cache.ReserveCacheError.name) { core.info(error.message); } else { core.info(`[warning]${error.message}`) } } } return true } async function computeBaseKey(platform, engine, version, lockFile, cacheVersion) { const cacheVersionSuffix = DEFAULT_CACHE_VERSION === cacheVersion ? '' : `-cachever:${cacheVersion}` let key = `setup-ruby-bundler-cache-v3-${platform}-${engine}-${version}${cacheVersionSuffix}` if (engine !== 'jruby' && common.isHeadVersion(version)) { let revision = ''; await exec.exec('ruby', ['-e', 'print RUBY_REVISION'], { silent: true, listeners: { stdout: (data) => { revision += data.toString(); } } }); key += `-revision-${revision}` } key += `-${lockFile}` return key } /***/ }), /***/ 4717: /***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { "use strict"; __nccwpck_require__.r(__webpack_exports__); /* harmony export */ __nccwpck_require__.d(__webpack_exports__, { /* harmony export */ "windows": () => (/* binding */ windows), /* harmony export */ "drive": () => (/* binding */ drive), /* harmony export */ "partition": () => (/* binding */ partition), /* harmony export */ "measure": () => (/* binding */ measure), /* harmony export */ "isHeadVersion": () => (/* binding */ isHeadVersion), /* harmony export */ "isStableVersion": () => (/* binding */ isStableVersion), /* harmony export */ "isBundler2Default": () => (/* binding */ isBundler2Default), /* harmony export */ "floatVersion": () => (/* binding */ floatVersion), /* harmony export */ "hashFile": () => (/* binding */ hashFile), /* harmony export */ "getVirtualEnvironmentName": () => (/* binding */ getVirtualEnvironmentName), /* harmony export */ "shouldUseToolCache": () => (/* binding */ shouldUseToolCache), /* harmony export */ "getToolCacheRubyPrefix": () => (/* binding */ getToolCacheRubyPrefix), /* harmony export */ "createToolCacheCompleteFile": () => (/* binding */ createToolCacheCompleteFile), /* harmony export */ "win2nix": () => (/* binding */ win2nix), /* harmony export */ "setupPath": () => (/* binding */ setupPath) /* harmony export */ }); const os = __nccwpck_require__(2087) const path = __nccwpck_require__(5622) const fs = __nccwpck_require__(5747) const util = __nccwpck_require__(1669) const stream = __nccwpck_require__(2413) const crypto = __nccwpck_require__(6417) const core = __nccwpck_require__(2186) const { performance } = __nccwpck_require__(630) const windows = (os.platform() === 'win32') // Extract to SSD on Windows, see https://github.com/ruby/setup-ruby/pull/14 const drive = (windows ? (process.env['GITHUB_WORKSPACE'] || 'C')[0] : undefined) function partition(string, separator) { const i = string.indexOf(separator) if (i === -1) { throw new Error(`No separator ${separator} in string ${string}`) } return [string.slice(0, i), string.slice(i + separator.length, string.length)] } let inGroup = false async function measure(name, block) { const body = async () => { const start = performance.now() try { return await block() } finally { const end = performance.now() const duration = (end - start) / 1000.0 console.log(`Took ${duration.toFixed(2).padStart(6)} seconds`) } } if (inGroup) { // Nested groups are not yet supported on GitHub Actions console.log(`> ${name}`) return await body() } else { inGroup = true try { return await core.group(name, body) } finally { inGroup = false } } } function isHeadVersion(rubyVersion) { return rubyVersion === 'head' || rubyVersion === 'debug' || rubyVersion === 'mingw' || rubyVersion === 'mswin' } function isStableVersion(rubyVersion) { return /^\d+(\.\d+)*$/.test(rubyVersion) } function isBundler2Default(engine, rubyVersion) { if (engine === 'ruby') { return isHeadVersion(rubyVersion) || floatVersion(rubyVersion) >= 2.7 } else if (engine === 'truffleruby') { return isHeadVersion(rubyVersion) || floatVersion(rubyVersion) >= 21.0 } else if (engine === 'jruby') { return isHeadVersion(rubyVersion) || floatVersion(rubyVersion) >= 9.3 } else { return false } } function floatVersion(rubyVersion) { const match = rubyVersion.match(/^\d+\.\d+/) if (match) { return parseFloat(match[0]) } else { return 0.0 } } async function hashFile(file) { // See https://github.com/actions/runner/blob/master/src/Misc/expressionFunc/hashFiles/src/hashFiles.ts const hash = crypto.createHash('sha256') const pipeline = util.promisify(stream.pipeline) await pipeline(fs.createReadStream(file), hash) return hash.digest('hex') } function getImageOS() { const imageOS = process.env['ImageOS'] if (!imageOS) { throw new Error('The environment variable ImageOS must be set') } return imageOS } function getVirtualEnvironmentName() { const imageOS = getImageOS() let match = imageOS.match(/^ubuntu(\d+)/) // e.g. ubuntu18 if (match) { return `ubuntu-${match[1]}.04` } match = imageOS.match(/^macos(\d{2})(\d+)?/) // e.g. macos1015, macos11 if (match) { return `macos-${match[1]}.${match[2] || '0'}` } match = imageOS.match(/^win(\d+)/) // e.g. win19 if (match) { return `windows-20${match[1]}` } throw new Error(`Unknown ImageOS ${imageOS}`) } function shouldUseToolCache(engine, version) { return engine === 'ruby' && !isHeadVersion(version) } function getPlatformToolCache(platform) { // Hardcode paths rather than using $RUNNER_TOOL_CACHE because the prebuilt Rubies cannot be moved anyway if (platform.startsWith('ubuntu-')) { return '/opt/hostedtoolcache' } else if (platform.startsWith('macos-')) { return '/Users/runner/hostedtoolcache' } else if (platform.startsWith('windows-')) { return 'C:/hostedtoolcache/windows' } else { throw new Error('Unknown platform') } } function getToolCacheRubyPrefix(platform, version) { const toolCache = getPlatformToolCache(platform) return path.join(toolCache, 'Ruby', version, 'x64') } function createToolCacheCompleteFile(toolCacheRubyPrefix) { const completeFile = `${toolCacheRubyPrefix}.complete` fs.writeFileSync(completeFile, '') } // convert windows path like C:\Users\runneradmin to /c/Users/runneradmin function win2nix(path) { if (/^[A-Z]:/i.test(path)) { // path starts with drive path = `/${path[0].toLowerCase()}${partition(path, ':')[1]}` } return path.replace(/\\/g, '/').replace(/ /g, '\\ ') } function setupPath(newPathEntries) { const envPath = windows ? 'Path' : 'PATH' const originalPath = process.env[envPath].split(path.delimiter) let cleanPath = originalPath.filter(entry => !/\bruby\b/i.test(entry)) core.startGroup(`Modifying ${envPath}`) // First remove the conflicting path entries if (cleanPath.length !== originalPath.length) { console.log(`Entries removed from ${envPath} to avoid conflicts with default Ruby:`) for (const entry of originalPath) { if (!cleanPath.includes(entry)) { console.log(` ${entry}`) } } core.exportVariable(envPath, cleanPath.join(path.delimiter)) } // Then add new path entries using core.addPath() let newPath if (windows) { // add MSYS2 in path for all Rubies on Windows, as it provides a better bash shell and a native toolchain const msys2 = ['C:\\msys64\\mingw64\\bin', 'C:\\msys64\\usr\\bin'] newPath = [...newPathEntries, ...msys2] } else { newPath = newPathEntries } console.log(`Entries added to ${envPath} to use selected Ruby:`) for (const entry of newPath) { console.log(` ${entry}`) } core.endGroup() core.addPath(newPath.join(path.delimiter)) } /***/ }), /***/ 7799: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", ({ value: true })); const core = __importStar(__nccwpck_require__(2186)); const path = __importStar(__nccwpck_require__(5622)); const utils = __importStar(__nccwpck_require__(1518)); const cacheHttpClient = __importStar(__nccwpck_require__(8245)); const tar_1 = __nccwpck_require__(6490); class ValidationError extends Error { constructor(message) { super(message); this.name = 'ValidationError'; Object.setPrototypeOf(this, ValidationError.prototype); } } exports.ValidationError = ValidationError; class ReserveCacheError extends Error { constructor(message) { super(message); this.name = 'ReserveCacheError'; Object.setPrototypeOf(this, ReserveCacheError.prototype); } } exports.ReserveCacheError = ReserveCacheError; function checkPaths(paths) { if (!paths || paths.length === 0) { throw new ValidationError(`Path Validation Error: At least one directory or file path is required`); } } function checkKey(key) { if (key.length > 512) { throw new ValidationError(`Key Validation Error: ${key} cannot be larger than 512 characters.`); } const regex = /^[^,]*$/; if (!regex.test(key)) { throw new ValidationError(`Key Validation Error: ${key} cannot contain commas.`); } } /** * Restores cache from keys * * @param paths a list of file paths to restore from the cache * @param primaryKey an explicit key for restoring the cache * @param restoreKeys an optional ordered list of keys to use for restoring the cache if no cache hit occurred for key * @param downloadOptions cache download options * @returns string returns the key for the cache hit, otherwise returns undefined */ function restoreCache(paths, primaryKey, restoreKeys, options) { return __awaiter(this, void 0, void 0, function* () { checkPaths(paths); restoreKeys = restoreKeys || []; const keys = [primaryKey, ...restoreKeys]; core.debug('Resolved Keys:'); core.debug(JSON.stringify(keys)); if (keys.length > 10) { throw new ValidationError(`Key Validation Error: Keys are limited to a maximum of 10.`); } for (const key of keys) { checkKey(key); } const compressionMethod = yield utils.getCompressionMethod(); // path are needed to compute version const cacheEntry = yield cacheHttpClient.getCacheEntry(keys, paths, { compressionMethod }); if (!(cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.archiveLocation)) { // Cache not found return undefined; } const archivePath = path.join(yield utils.createTempDirectory(), utils.getCacheFileName(compressionMethod)); core.debug(`Archive Path: ${archivePath}`); try { // Download the cache from the cache entry yield cacheHttpClient.downloadCache(cacheEntry.archiveLocation, archivePath, options); if (core.isDebug()) { yield tar_1.listTar(archivePath, compressionMethod); } const archiveFileSize = utils.getArchiveFileSizeIsBytes(archivePath); core.info(`Cache Size: ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B)`); yield tar_1.extractTar(archivePath, compressionMethod); core.info('Cache restored successfully'); } finally { // Try to delete the archive to save space try { yield utils.unlinkFile(archivePath); } catch (error) { core.debug(`Failed to delete archive: ${error}`); } } return cacheEntry.cacheKey; }); } exports.restoreCache = restoreCache; /** * Saves a list of files with the specified key * * @param paths a list of file paths to be cached * @param key an explicit key for restoring the cache * @param options cache upload options * @returns number returns cacheId if the cache was saved successfully and throws an error if save fails */ function saveCache(paths, key, options) { return __awaiter(this, void 0, void 0, function* () { checkPaths(paths); checkKey(key); const compressionMethod = yield utils.getCompressionMethod(); core.debug('Reserving Cache'); const cacheId = yield cacheHttpClient.reserveCache(key, paths, { compressionMethod }); if (cacheId === -1) { throw new ReserveCacheError(`Unable to reserve cache with key ${key}, another job may be creating this cache.`); } core.debug(`Cache ID: ${cacheId}`); const cachePaths = yield utils.resolvePaths(paths); core.debug('Cache Paths:'); core.debug(`${JSON.stringify(cachePaths)}`); const archiveFolder = yield utils.createTempDirectory(); const archivePath = path.join(archiveFolder, utils.getCacheFileName(compressionMethod)); core.debug(`Archive Path: ${archivePath}`); yield tar_1.createTar(archiveFolder, cachePaths, compressionMethod); if (core.isDebug()) { yield tar_1.listTar(archivePath, compressionMethod); } const fileSizeLimit = 5 * 1024 * 1024 * 1024; // 5GB per repo limit const archiveFileSize = utils.getArchiveFileSizeIsBytes(archivePath); core.debug(`File Size: ${archiveFileSize}`); if (archiveFileSize > fileSizeLimit) { throw new Error(`Cache size of ~${Math.round(archiveFileSize / (1024 * 1024))} MB (${archiveFileSize} B) is over the 5GB limit, not saving cache.`); } core.debug(`Saving Cache (ID: ${cacheId})`); yield cacheHttpClient.saveCache(cacheId, archivePath, options); return cacheId; }); } exports.saveCache = saveCache; //# sourceMappingURL=cache.js.map /***/ }), /***/ 8245: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", ({ value: true })); const core = __importStar(__nccwpck_require__(2186)); const http_client_1 = __nccwpck_require__(9925); const auth_1 = __nccwpck_require__(3702); const crypto = __importStar(__nccwpck_require__(6417)); const fs = __importStar(__nccwpck_require__(5747)); const url_1 = __nccwpck_require__(8835); const utils = __importStar(__nccwpck_require__(1518)); const constants_1 = __nccwpck_require__(8840); const downloadUtils_1 = __nccwpck_require__(5500); const options_1 = __nccwpck_require__(6215); const requestUtils_1 = __nccwpck_require__(3981); const versionSalt = '1.0'; function getCacheApiUrl(resource) { // Ideally we just use ACTIONS_CACHE_URL const baseUrl = (process.env['ACTIONS_CACHE_URL'] || process.env['ACTIONS_RUNTIME_URL'] || '').replace('pipelines', 'artifactcache'); if (!baseUrl) { throw new Error('Cache Service Url not found, unable to restore cache.'); } const url = `${baseUrl}_apis/artifactcache/${resource}`; core.debug(`Resource Url: ${url}`); return url; } function createAcceptHeader(type, apiVersion) { return `${type};api-version=${apiVersion}`; } function getRequestOptions() { const requestOptions = { headers: { Accept: createAcceptHeader('application/json', '6.0-preview.1') } }; return requestOptions; } function createHttpClient() { const token = process.env['ACTIONS_RUNTIME_TOKEN'] || ''; const bearerCredentialHandler = new auth_1.BearerCredentialHandler(token); return new http_client_1.HttpClient('actions/cache', [bearerCredentialHandler], getRequestOptions()); } function getCacheVersion(paths, compressionMethod) { const components = paths.concat(!compressionMethod || compressionMethod === constants_1.CompressionMethod.Gzip ? [] : [compressionMethod]); // Add salt to cache version to support breaking changes in cache entry components.push(versionSalt); return crypto .createHash('sha256') .update(components.join('|')) .digest('hex'); } exports.getCacheVersion = getCacheVersion; function getCacheEntry(keys, paths, options) { return __awaiter(this, void 0, void 0, function* () { const httpClient = createHttpClient(); const version = getCacheVersion(paths, options === null || options === void 0 ? void 0 : options.compressionMethod); const resource = `cache?keys=${encodeURIComponent(keys.join(','))}&version=${version}`; const response = yield requestUtils_1.retryTypedResponse('getCacheEntry', () => __awaiter(this, void 0, void 0, function* () { return httpClient.getJson(getCacheApiUrl(resource)); })); if (response.statusCode === 204) { return null; } if (!requestUtils_1.isSuccessStatusCode(response.statusCode)) { throw new Error(`Cache service responded with ${response.statusCode}`); } const cacheResult = response.result; const cacheDownloadUrl = cacheResult === null || cacheResult === void 0 ? void 0 : cacheResult.archiveLocation; if (!cacheDownloadUrl) { throw new Error('Cache not found.'); } core.setSecret(cacheDownloadUrl); core.debug(`Cache Result:`); core.debug(JSON.stringify(cacheResult)); return cacheResult; }); } exports.getCacheEntry = getCacheEntry; function downloadCache(archiveLocation, archivePath, options) { return __awaiter(this, void 0, void 0, function* () { const archiveUrl = new url_1.URL(archiveLocation); const downloadOptions = options_1.getDownloadOptions(options); if (downloadOptions.useAzureSdk && archiveUrl.hostname.endsWith('.blob.core.windows.net')) { // Use Azure storage SDK to download caches hosted on Azure to improve speed and reliability. yield downloadUtils_1.downloadCacheStorageSDK(archiveLocation, archivePath, downloadOptions); } else { // Otherwise, download using the Actions http-client. yield downloadUtils_1.downloadCacheHttpClient(archiveLocation, archivePath); } }); } exports.downloadCache = downloadCache; // Reserve Cache function reserveCache(key, paths, options) { var _a, _b; return __awaiter(this, void 0, void 0, function* () { const httpClient = createHttpClient(); const version = getCacheVersion(paths, options === null || options === void 0 ? void 0 : options.compressionMethod); const reserveCacheRequest = { key, version }; const response = yield requestUtils_1.retryTypedResponse('reserveCache', () => __awaiter(this, void 0, void 0, function* () { return httpClient.postJson(getCacheApiUrl('caches'), reserveCacheRequest); })); return (_b = (_a = response === null || response === void 0 ? void 0 : response.result) === null || _a === void 0 ? void 0 : _a.cacheId) !== null && _b !== void 0 ? _b : -1; }); } exports.reserveCache = reserveCache; function getContentRange(start, end) { // Format: `bytes start-end/filesize // start and end are inclusive // filesize can be * // For a 200 byte chunk starting at byte 0: // Content-Range: bytes 0-199/* return `bytes ${start}-${end}/*`; } function uploadChunk(httpClient, resourceUrl, openStream, start, end) { return __awaiter(this, void 0, void 0, function* () { core.debug(`Uploading chunk of size ${end - start + 1} bytes at offset ${start} with content range: ${getContentRange(start, end)}`); const additionalHeaders = { 'Content-Type': 'application/octet-stream', 'Content-Range': getContentRange(start, end) }; const uploadChunkResponse = yield requestUtils_1.retryHttpClientResponse(`uploadChunk (start: ${start}, end: ${end})`, () => __awaiter(this, void 0, void 0, function* () { return httpClient.sendStream('PATCH', resourceUrl, openStream(), additionalHeaders); })); if (!requestUtils_1.isSuccessStatusCode(uploadChunkResponse.message.statusCode)) { throw new Error(`Cache service responded with ${uploadChunkResponse.message.statusCode} during upload chunk.`); } }); } function uploadFile(httpClient, cacheId, archivePath, options) { return __awaiter(this, void 0, void 0, function* () { // Upload Chunks const fileSize = fs.statSync(archivePath).size; const resourceUrl = getCacheApiUrl(`caches/${cacheId.toString()}`); const fd = fs.openSync(archivePath, 'r'); const uploadOptions = options_1.getUploadOptions(options); const concurrency = utils.assertDefined('uploadConcurrency', uploadOptions.uploadConcurrency); const maxChunkSize = utils.assertDefined('uploadChunkSize', uploadOptions.uploadChunkSize); const parallelUploads = [...new Array(concurrency).keys()]; core.debug('Awaiting all uploads'); let offset = 0; try { yield Promise.all(parallelUploads.map(() => __awaiter(this, void 0, void 0, function* () { while (offset < fileSize) { const chunkSize = Math.min(fileSize - offset, maxChunkSize); const start = offset; const end = offset + chunkSize - 1; offset += maxChunkSize; yield uploadChunk(httpClient, resourceUrl, () => fs .createReadStream(archivePath, { fd, start, end, autoClose: false }) .on('error', error => { throw new Error(`Cache upload failed because file read failed with ${error.message}`); }), start, end); } }))); } finally { fs.closeSync(fd); } return; }); } function commitCache(httpClient, cacheId, filesize) { return __awaiter(this, void 0, void 0, function* () { const commitCacheRequest = { size: filesize }; return yield requestUtils_1.retryTypedResponse('commitCache', () => __awaiter(this, void 0, void 0, function* () { return httpClient.postJson(getCacheApiUrl(`caches/${cacheId.toString()}`), commitCacheRequest); })); }); } function saveCache(cacheId, archivePath, options) { return __awaiter(this, void 0, void 0, function* () { const httpClient = createHttpClient(); core.debug('Upload cache'); yield uploadFile(httpClient, cacheId, archivePath, options); // Commit Cache core.debug('Commiting cache'); const cacheSize = utils.getArchiveFileSizeIsBytes(archivePath); core.info(`Cache Size: ~${Math.round(cacheSize / (1024 * 1024))} MB (${cacheSize} B)`); const commitCacheResponse = yield commitCache(httpClient, cacheId, cacheSize); if (!requestUtils_1.isSuccessStatusCode(commitCacheResponse.statusCode)) { throw new Error(`Cache service responded with ${commitCacheResponse.statusCode} during commit cache.`); } core.info('Cache saved successfully'); }); } exports.saveCache = saveCache; //# sourceMappingURL=cacheHttpClient.js.map /***/ }), /***/ 1518: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator], i; 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); 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); }); }; } function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", ({ value: true })); const core = __importStar(__nccwpck_require__(2186)); const exec = __importStar(__nccwpck_require__(1514)); const glob = __importStar(__nccwpck_require__(8090)); const io = __importStar(__nccwpck_require__(7436)); const fs = __importStar(__nccwpck_require__(5747)); const path = __importStar(__nccwpck_require__(5622)); const semver = __importStar(__nccwpck_require__(5911)); const util = __importStar(__nccwpck_require__(1669)); const uuid_1 = __nccwpck_require__(2155); const constants_1 = __nccwpck_require__(8840); // From https://github.com/actions/toolkit/blob/main/packages/tool-cache/src/tool-cache.ts#L23 function createTempDirectory() { return __awaiter(this, void 0, void 0, function* () { const IS_WINDOWS = process.platform === 'win32'; let tempDirectory = process.env['RUNNER_TEMP'] || ''; if (!tempDirectory) { let baseLocation; if (IS_WINDOWS) { // On Windows use the USERPROFILE env variable baseLocation = process.env['USERPROFILE'] || 'C:\\'; } else { if (process.platform === 'darwin') { baseLocation = '/Users'; } else { baseLocation = '/home'; } } tempDirectory = path.join(baseLocation, 'actions', 'temp'); } const dest = path.join(tempDirectory, uuid_1.v4()); yield io.mkdirP(dest); return dest; }); } exports.createTempDirectory = createTempDirectory; function getArchiveFileSizeIsBytes(filePath) { return fs.statSync(filePath).size; } exports.getArchiveFileSizeIsBytes = getArchiveFileSizeIsBytes; function resolvePaths(patterns) { var e_1, _a; var _b; return __awaiter(this, void 0, void 0, function* () { const paths = []; const workspace = (_b = process.env['GITHUB_WORKSPACE']) !== null && _b !== void 0 ? _b : process.cwd(); const globber = yield glob.create(patterns.join('\n'), { implicitDescendants: false }); try { for (var _c = __asyncValues(globber.globGenerator()), _d; _d = yield _c.next(), !_d.done;) { const file = _d.value; const relativeFile = path .relative(workspace, file) .replace(new RegExp(`\\${path.sep}`, 'g'), '/'); core.debug(`Matched: ${relativeFile}`); // Paths are made relative so the tar entries are all relative to the root of the workspace. paths.push(`${relativeFile}`); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_d && !_d.done && (_a = _c.return)) yield _a.call(_c); } finally { if (e_1) throw e_1.error; } } return paths; }); } exports.resolvePaths = resolvePaths; function unlinkFile(filePath) { return __awaiter(this, void 0, void 0, function* () { return util.promisify(fs.unlink)(filePath); }); } exports.unlinkFile = unlinkFile; function getVersion(app) { return __awaiter(this, void 0, void 0, function* () { core.debug(`Checking ${app} --version`); let versionOutput = ''; try { yield exec.exec(`${app} --version`, [], { ignoreReturnCode: true, silent: true, listeners: { stdout: (data) => (versionOutput += data.toString()), stderr: (data) => (versionOutput += data.toString()) } }); } catch (err) { core.debug(err.message); } versionOutput = versionOutput.trim(); core.debug(versionOutput); return versionOutput; }); } // Use zstandard if possible to maximize cache performance function getCompressionMethod() { return __awaiter(this, void 0, void 0, function* () { if (process.platform === 'win32' && !(yield isGnuTarInstalled())) { // Disable zstd due to bug https://github.com/actions/cache/issues/301 return constants_1.CompressionMethod.Gzip; } const versionOutput = yield getVersion('zstd'); const version = semver.clean(versionOutput); if (!versionOutput.toLowerCase().includes('zstd command line interface')) { // zstd is not installed return constants_1.CompressionMethod.Gzip; } else if (!version || semver.lt(version, 'v1.3.2')) { // zstd is installed but using a version earlier than v1.3.2 // v1.3.2 is required to use the `--long` options in zstd return constants_1.CompressionMethod.ZstdWithoutLong; } else { return constants_1.CompressionMethod.Zstd; } }); } exports.getCompressionMethod = getCompressionMethod; function getCacheFileName(compressionMethod) { return compressionMethod === constants_1.CompressionMethod.Gzip ? constants_1.CacheFilename.Gzip : constants_1.CacheFilename.Zstd; } exports.getCacheFileName = getCacheFileName; function isGnuTarInstalled() { return __awaiter(this, void 0, void 0, function* () { const versionOutput = yield getVersion('tar'); return versionOutput.toLowerCase().includes('gnu tar'); }); } exports.isGnuTarInstalled = isGnuTarInstalled; function assertDefined(name, value) { if (value === undefined) { throw Error(`Expected ${name} but value was undefiend`); } return value; } exports.assertDefined = assertDefined; //# sourceMappingURL=cacheUtils.js.map /***/ }), /***/ 8840: /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); var CacheFilename; (function (CacheFilename) { CacheFilename["Gzip"] = "cache.tgz"; CacheFilename["Zstd"] = "cache.tzst"; })(CacheFilename = exports.CacheFilename || (exports.CacheFilename = {})); var CompressionMethod; (function (CompressionMethod) { CompressionMethod["Gzip"] = "gzip"; // Long range mode was added to zstd in v1.3.2. // This enum is for earlier version of zstd that does not have --long support CompressionMethod["ZstdWithoutLong"] = "zstd-without-long"; CompressionMethod["Zstd"] = "zstd"; })(CompressionMethod = exports.CompressionMethod || (exports.CompressionMethod = {})); // The default number of retry attempts. exports.DefaultRetryAttempts = 2; // The default delay in milliseconds between retry attempts. exports.DefaultRetryDelay = 5000; // Socket timeout in milliseconds during download. If no traffic is received // over the socket during this period, the socket is destroyed and the download // is aborted. exports.SocketTimeout = 5000; //# sourceMappingURL=constants.js.map /***/ }), /***/ 5500: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", ({ value: true })); const core = __importStar(__nccwpck_require__(2186)); const http_client_1 = __nccwpck_require__(9925); const storage_blob_1 = __nccwpck_require__(4100); const buffer = __importStar(__nccwpck_require__(4293)); const fs = __importStar(__nccwpck_require__(5747)); const stream = __importStar(__nccwpck_require__(2413)); const util = __importStar(__nccwpck_require__(1669)); const utils = __importStar(__nccwpck_require__(1518)); const constants_1 = __nccwpck_require__(8840); const requestUtils_1 = __nccwpck_require__(3981); /** * Pipes the body of a HTTP response to a stream * * @param response the HTTP response * @param output the writable stream */ function pipeResponseToStream(response, output) { return __awaiter(this, void 0, void 0, function* () { const pipeline = util.promisify(stream.pipeline); yield pipeline(response.message, output); }); } /** * Class for tracking the download state and displaying stats. */ class DownloadProgress { constructor(contentLength) { this.contentLength = contentLength; this.segmentIndex = 0; this.segmentSize = 0; this.segmentOffset = 0; this.receivedBytes = 0; this.displayedComplete = false; this.startTime = Date.now(); } /** * Progress to the next segment. Only call this method when the previous segment * is complete. * * @param segmentSize the length of the next segment */ nextSegment(segmentSize) { this.segmentOffset = this.segmentOffset + this.segmentSize; this.segmentIndex = this.segmentIndex + 1; this.segmentSize = segmentSize; this.receivedBytes = 0; core.debug(`Downloading segment at offset ${this.segmentOffset} with length ${this.segmentSize}...`); } /** * Sets the number of bytes received for the current segment. * * @param receivedBytes the number of bytes received */ setReceivedBytes(receivedBytes) { this.receivedBytes = receivedBytes; } /** * Returns the total number of bytes transferred. */ getTransferredBytes() { return this.segmentOffset + this.receivedBytes; } /** * Returns true if the download is complete. */ isDone() { return this.getTransferredBytes() === this.contentLength; } /** * Prints the current download stats. Once the download completes, this will print one * last line and then stop. */ display() { if (this.displayedComplete) { return; } const transferredBytes = this.segmentOffset + this.receivedBytes; const percentage = (100 * (transferredBytes / this.contentLength)).toFixed(1); const elapsedTime = Date.now() - this.startTime; const downloadSpeed = (transferredBytes / (1024 * 1024) / (elapsedTime / 1000)).toFixed(1); core.info(`Received ${transferredBytes} of ${this.contentLength} (${percentage}%), ${downloadSpeed} MBs/sec`); if (this.isDone()) { this.displayedComplete = true; } } /** * Returns a function used to handle TransferProgressEvents. */ onProgress() { return (progress) => { this.setReceivedBytes(progress.loadedBytes); }; } /** * Starts the timer that displays the stats. * * @param delayInMs the delay between each write */ startDisplayTimer(delayInMs = 1000) { const displayCallback = () => { this.display(); if (!this.isDone()) { this.timeoutHandle = setTimeout(displayCallback, delayInMs); } }; this.timeoutHandle = setTimeout(displayCallback, delayInMs); } /** * Stops the timer that displays the stats. As this typically indicates the download * is complete, this will display one last line, unless the last line has already * been written. */ stopDisplayTimer() { if (this.timeoutHandle) { clearTimeout(this.timeoutHandle); this.timeoutHandle = undefined; } this.display(); } } exports.DownloadProgress = DownloadProgress; /** * Download the cache using the Actions toolkit http-client * * @param archiveLocation the URL for the cache * @param archivePath the local path where the cache is saved */ function downloadCacheHttpClient(archiveLocation, archivePath) { return __awaiter(this, void 0, void 0, function* () { const writeStream = fs.createWriteStream(archivePath); const httpClient = new http_client_1.HttpClient('actions/cache'); const downloadResponse = yield requestUtils_1.retryHttpClientResponse('downloadCache', () => __awaiter(this, void 0, void 0, function* () { return httpClient.get(archiveLocation); })); // Abort download if no traffic received over the socket. downloadResponse.message.socket.setTimeout(constants_1.SocketTimeout, () => { downloadResponse.message.destroy(); core.debug(`Aborting download, socket timed out after ${constants_1.SocketTimeout} ms`); }); yield pipeResponseToStream(downloadResponse, writeStream); // Validate download size. const contentLengthHeader = downloadResponse.message.headers['content-length']; if (contentLengthHeader) { const expectedLength = parseInt(contentLengthHeader); const actualLength = utils.getArchiveFileSizeIsBytes(archivePath); if (actualLength !== expectedLength) { throw new Error(`Incomplete download. Expected file size: ${expectedLength}, actual file size: ${actualLength}`); } } else { core.debug('Unable to validate download, no Content-Length header'); } }); } exports.downloadCacheHttpClient = downloadCacheHttpClient; /** * Download the cache using the Azure Storage SDK. Only call this method if the * URL points to an Azure Storage endpoint. * * @param archiveLocation the URL for the cache * @param archivePath the local path where the cache is saved * @param options the download options with the defaults set */ function downloadCacheStorageSDK(archiveLocation, archivePath, options) { var _a; return __awaiter(this, void 0, void 0, function* () { const client = new storage_blob_1.BlockBlobClient(archiveLocation, undefined, { retryOptions: { // Override the timeout used when downloading each 4 MB chunk // The default is 2 min / MB, which is way too slow tryTimeoutInMs: options.timeoutInMs } }); const properties = yield client.getProperties(); const contentLength = (_a = properties.contentLength) !== null && _a !== void 0 ? _a : -1; if (contentLength < 0) { // We should never hit this condition, but just in case fall back to downloading the // file as one large stream core.debug('Unable to determine content length, downloading file with http-client...'); yield downloadCacheHttpClient(archiveLocation, archivePath); } else { // Use downloadToBuffer for faster downloads, since internally it splits the // file into 4 MB chunks which can then be parallelized and retried independently // // If the file exceeds the buffer maximum length (~1 GB on 32-bit systems and ~2 GB // on 64-bit systems), split the download into multiple segments const maxSegmentSize = buffer.constants.MAX_LENGTH; const downloadProgress = new DownloadProgress(contentLength); const fd = fs.openSync(archivePath, 'w'); try { downloadProgress.startDisplayTimer(); while (!downloadProgress.isDone()) { const segmentStart = downloadProgress.segmentOffset + downloadProgress.segmentSize; const segmentSize = Math.min(maxSegmentSize, contentLength - segmentStart); downloadProgress.nextSegment(segmentSize); const result = yield client.downloadToBuffer(segmentStart, segmentSize, { concurrency: options.downloadConcurrency, onProgress: downloadProgress.onProgress() }); fs.writeFileSync(fd, result); } } finally { downloadProgress.stopDisplayTimer(); fs.closeSync(fd); } } }); } exports.downloadCacheStorageSDK = downloadCacheStorageSDK; //# sourceMappingURL=downloadUtils.js.map /***/ }), /***/ 3981: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", ({ value: true })); const core = __importStar(__nccwpck_require__(2186)); const http_client_1 = __nccwpck_require__(9925); const constants_1 = __nccwpck_require__(8840); function isSuccessStatusCode(statusCode) { if (!statusCode) { return false; } return statusCode >= 200 && statusCode < 300; } exports.isSuccessStatusCode = isSuccessStatusCode; function isServerErrorStatusCode(statusCode) { if (!statusCode) { return true; } return statusCode >= 500; } exports.isServerErrorStatusCode = isServerErrorStatusCode; function isRetryableStatusCode(statusCode) { if (!statusCode) { return false; } const retryableStatusCodes = [ http_client_1.HttpCodes.BadGateway, http_client_1.HttpCodes.ServiceUnavailable, http_client_1.HttpCodes.GatewayTimeout ]; return retryableStatusCodes.includes(statusCode); } exports.isRetryableStatusCode = isRetryableStatusCode; function sleep(milliseconds) { return __awaiter(this, void 0, void 0, function* () { return new Promise(resolve => setTimeout(resolve, milliseconds)); }); } function retry(name, method, getStatusCode, maxAttempts = constants_1.DefaultRetryAttempts, delay = constants_1.DefaultRetryDelay, onError = undefined) { return __awaiter(this, void 0, void 0, function* () { let errorMessage = ''; let attempt = 1; while (attempt <= maxAttempts) { let response = undefined; let statusCode = undefined; let isRetryable = false; try { response = yield method(); } catch (error) { if (onError) { response = onError(error); } isRetryable = true; errorMessage = error.message; } if (response) { statusCode = getStatusCode(response); if (!isServerErrorStatusCode(statusCode)) { return response; } } if (statusCode) { isRetryable = isRetryableStatusCode(statusCode); errorMessage = `Cache service responded with ${statusCode}`; } core.debug(`${name} - Attempt ${attempt} of ${maxAttempts} failed with error: ${errorMessage}`); if (!isRetryable) { core.debug(`${name} - Error is not retryable`); break; } yield sleep(delay); attempt++; } throw Error(`${name} failed: ${errorMessage}`); }); } exports.retry = retry; function retryTypedResponse(name, method, maxAttempts = constants_1.DefaultRetryAttempts, delay = constants_1.DefaultRetryDelay) { return __awaiter(this, void 0, void 0, function* () { return yield retry(name, method, (response) => response.statusCode, maxAttempts, delay, // If the error object contains the statusCode property, extract it and return // an ITypedResponse so it can be processed by the retry logic. (error) => { if (error instanceof http_client_1.HttpClientError) { return { statusCode: error.statusCode, result: null, headers: {} }; } else { return undefined; } }); }); } exports.retryTypedResponse = retryTypedResponse; function retryHttpClientResponse(name, method, maxAttempts = constants_1.DefaultRetryAttempts, delay = constants_1.DefaultRetryDelay) { return __awaiter(this, void 0, void 0, function* () { return yield retry(name, method, (response) => response.message.statusCode, maxAttempts, delay); }); } exports.retryHttpClientResponse = retryHttpClientResponse; //# sourceMappingURL=requestUtils.js.map /***/ }), /***/ 6490: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", ({ value: true })); const exec_1 = __nccwpck_require__(1514); const io = __importStar(__nccwpck_require__(7436)); const fs_1 = __nccwpck_require__(5747); const path = __importStar(__nccwpck_require__(5622)); const utils = __importStar(__nccwpck_require__(1518)); const constants_1 = __nccwpck_require__(8840); function getTarPath(args, compressionMethod) { return __awaiter(this, void 0, void 0, function* () { switch (process.platform) { case 'win32': { const systemTar = `${process.env['windir']}\\System32\\tar.exe`; if (compressionMethod !== constants_1.CompressionMethod.Gzip) { // We only use zstandard compression on windows when gnu tar is installed due to // a bug with compressing large files with bsdtar + zstd args.push('--force-local'); } else if (fs_1.existsSync(systemTar)) { return systemTar; } else if (yield utils.isGnuTarInstalled()) { args.push('--force-local'); } break; } case 'darwin': { const gnuTar = yield io.which('gtar', false); if (gnuTar) { // fix permission denied errors when extracting BSD tar archive with GNU tar - https://github.com/actions/cache/issues/527 args.push('--delay-directory-restore'); return gnuTar; } break; } default: break; } return yield io.which('tar', true); }); } function execTar(args, compressionMethod, cwd) { return __awaiter(this, void 0, void 0, function* () { try { yield exec_1.exec(`"${yield getTarPath(args, compressionMethod)}"`, args, { cwd }); } catch (error) { throw new Error(`Tar failed with error: ${error === null || error === void 0 ? void 0 : error.message}`); } }); } function getWorkingDirectory() { var _a; return (_a = process.env['GITHUB_WORKSPACE']) !== null && _a !== void 0 ? _a : process.cwd(); } function extractTar(archivePath, compressionMethod) { return __awaiter(this, void 0, void 0, function* () { // Create directory to extract tar into const workingDirectory = getWorkingDirectory(); yield io.mkdirP(workingDirectory); // --d: Decompress. // --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit. // Using 30 here because we also support 32-bit self-hosted runners. function getCompressionProgram() { switch (compressionMethod) { case constants_1.CompressionMethod.Zstd: return ['--use-compress-program', 'zstd -d --long=30']; case constants_1.CompressionMethod.ZstdWithoutLong: return ['--use-compress-program', 'zstd -d']; default: return ['-z']; } } const args = [ ...getCompressionProgram(), '-xf', archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/'), '-P', '-C', workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/') ]; yield execTar(args, compressionMethod); }); } exports.extractTar = extractTar; function createTar(archiveFolder, sourceDirectories, compressionMethod) { return __awaiter(this, void 0, void 0, function* () { // Write source directories to manifest.txt to avoid command length limits const manifestFilename = 'manifest.txt'; const cacheFileName = utils.getCacheFileName(compressionMethod); fs_1.writeFileSync(path.join(archiveFolder, manifestFilename), sourceDirectories.join('\n')); const workingDirectory = getWorkingDirectory(); // -T#: Compress using # working thread. If # is 0, attempt to detect and use the number of physical CPU cores. // --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit. // Using 30 here because we also support 32-bit self-hosted runners. // Long range mode is added to zstd in v1.3.2 release, so we will not use --long in older version of zstd. function getCompressionProgram() { switch (compressionMethod) { case constants_1.CompressionMethod.Zstd: return ['--use-compress-program', 'zstd -T0 --long=30']; case constants_1.CompressionMethod.ZstdWithoutLong: return ['--use-compress-program', 'zstd -T0']; default: return ['-z']; } } const args = [ '--posix', ...getCompressionProgram(), '-cf', cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'), '-P', '-C', workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/'), '--files-from', manifestFilename ]; yield execTar(args, compressionMethod, archiveFolder); }); } exports.createTar = createTar; function listTar(archivePath, compressionMethod) { return __awaiter(this, void 0, void 0, function* () { // --d: Decompress. // --long=#: Enables long distance matching with # bits. // Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit. // Using 30 here because we also support 32-bit self-hosted runners. function getCompressionProgram() { switch (compressionMethod) { case constants_1.CompressionMethod.Zstd: return ['--use-compress-program', 'zstd -d --long=30']; case constants_1.CompressionMethod.ZstdWithoutLong: return ['--use-compress-program', 'zstd -d']; default: return ['-z']; } } const args = [ ...getCompressionProgram(), '-tf', archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/'), '-P' ]; yield execTar(args, compressionMethod); }); } exports.listTar = listTar; //# sourceMappingURL=tar.js.map /***/ }), /***/ 6215: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", ({ value: true })); const core = __importStar(__nccwpck_require__(2186)); /** * Returns a copy of the upload options with defaults filled in. * * @param copy the original upload options */ function getUploadOptions(copy) { const result = { uploadConcurrency: 4, uploadChunkSize: 32 * 1024 * 1024 }; if (copy) { if (typeof copy.uploadConcurrency === 'number') { result.uploadConcurrency = copy.uploadConcurrency; } if (typeof copy.uploadChunkSize === 'number') { result.uploadChunkSize = copy.uploadChunkSize; } } core.debug(`Upload concurrency: ${result.uploadConcurrency}`); core.debug(`Upload chunk size: ${result.uploadChunkSize}`); return result; } exports.getUploadOptions = getUploadOptions; /** * Returns a copy of the download options with defaults filled in. * * @param copy the original download options */ function getDownloadOptions(copy) { const result = { useAzureSdk: true, downloadConcurrency: 8, timeoutInMs: 30000 }; if (copy) { if (typeof copy.useAzureSdk === 'boolean') { result.useAzureSdk = copy.useAzureSdk; } if (typeof copy.downloadConcurrency === 'number') { result.downloadConcurrency = copy.downloadConcurrency; } if (typeof copy.timeoutInMs === 'number') { result.timeoutInMs = copy.timeoutInMs; } } core.debug(`Use Azure SDK: ${result.useAzureSdk}`); core.debug(`Download concurrency: ${result.downloadConcurrency}`); core.debug(`Request timeout (ms): ${result.timeoutInMs}`); return result; } exports.getDownloadOptions = getDownloadOptions; //# sourceMappingURL=options.js.map /***/ }), /***/ 7351: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.issue = exports.issueCommand = void 0; const os = __importStar(__nccwpck_require__(2087)); const utils_1 = __nccwpck_require__(5278); /** * Commands * * Command Format: * ::name key=value,key=value::message * * Examples: * ::warning::This is the message * ::set-env name=MY_VAR::some value */ function issueCommand(command, properties, message) { const cmd = new Command(command, properties, message); process.stdout.write(cmd.toString() + os.EOL); } exports.issueCommand = issueCommand; function issue(name, message = '') { issueCommand(name, {}, message); } exports.issue = issue; const CMD_STRING = '::'; class Command { constructor(command, properties, message) { if (!command) { command = 'missing.command'; } this.command = command; this.properties = properties; this.message = message; } toString() { let cmdStr = CMD_STRING + this.command; if (this.properties && Object.keys(this.properties).length > 0) { cmdStr += ' '; let first = true; for (const key in this.properties) { if (this.properties.hasOwnProperty(key)) { const val = this.properties[key]; if (val) { if (first) { first = false; } else { cmdStr += ','; } cmdStr += `${key}=${escapeProperty(val)}`; } } } } cmdStr += `${CMD_STRING}${escapeData(this.message)}`; return cmdStr; } } function escapeData(s) { return utils_1.toCommandValue(s) .replace(/%/g, '%25') .replace(/\r/g, '%0D') .replace(/\n/g, '%0A'); } function escapeProperty(s) { return utils_1.toCommandValue(s) .replace(/%/g, '%25') .replace(/\r/g, '%0D') .replace(/\n/g, '%0A') .replace(/:/g, '%3A') .replace(/,/g, '%2C'); } //# sourceMappingURL=command.js.map /***/ }), /***/ 2186: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0; const command_1 = __nccwpck_require__(7351); const file_command_1 = __nccwpck_require__(717); const utils_1 = __nccwpck_require__(5278); const os = __importStar(__nccwpck_require__(2087)); const path = __importStar(__nccwpck_require__(5622)); /** * The code to exit an action */ var ExitCode; (function (ExitCode) { /** * A code indicating that the action was successful */ ExitCode[ExitCode["Success"] = 0] = "Success"; /** * A code indicating that the action was a failure */ ExitCode[ExitCode["Failure"] = 1] = "Failure"; })(ExitCode = exports.ExitCode || (exports.ExitCode = {})); //----------------------------------------------------------------------- // Variables //----------------------------------------------------------------------- /** * Sets env variable for this action and future actions in the job * @param name the name of the variable to set * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify */ // eslint-disable-next-line @typescript-eslint/no-explicit-any function exportVariable(name, val) { const convertedVal = utils_1.toCommandValue(val); process.env[name] = convertedVal; const filePath = process.env['GITHUB_ENV'] || ''; if (filePath) { const delimiter = '_GitHubActionsFileCommandDelimeter_'; const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`; file_command_1.issueCommand('ENV', commandValue); } else { command_1.issueCommand('set-env', { name }, convertedVal); } } exports.exportVariable = exportVariable; /** * Registers a secret which will get masked from logs * @param secret value of the secret */ function setSecret(secret) { command_1.issueCommand('add-mask', {}, secret); } exports.setSecret = setSecret; /** * Prepends inputPath to the PATH (for this action and future actions) * @param inputPath */ function addPath(inputPath) { const filePath = process.env['GITHUB_PATH'] || ''; if (filePath) { file_command_1.issueCommand('PATH', inputPath); } else { command_1.issueCommand('add-path', {}, inputPath); } process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`; } exports.addPath = addPath; /** * Gets the value of an input. * Unless trimWhitespace is set to false in InputOptions, the value is also trimmed. * Returns an empty string if the value is not defined. * * @param name name of the input to get * @param options optional. See InputOptions. * @returns string */ function getInput(name, options) { const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || ''; if (options && options.required && !val) { throw new Error(`Input required and not supplied: ${name}`); } if (options && options.trimWhitespace === false) { return val; } return val.trim(); } exports.getInput = getInput; /** * Gets the values of an multiline input. Each value is also trimmed. * * @param name name of the input to get * @param options optional. See InputOptions. * @returns string[] * */ function getMultilineInput(name, options) { const inputs = getInput(name, options) .split('\n') .filter(x => x !== ''); return inputs; } exports.getMultilineInput = getMultilineInput; /** * Gets the input value of the boolean type in the YAML 1.2 "core schema" specification. * Support boolean input list: `true | True | TRUE | false | False | FALSE` . * The return value is also in boolean type. * ref: https://yaml.org/spec/1.2/spec.html#id2804923 * * @param name name of the input to get * @param options optional. See InputOptions. * @returns boolean */ function getBooleanInput(name, options) { const trueValue = ['true', 'True', 'TRUE']; const falseValue = ['false', 'False', 'FALSE']; const val = getInput(name, options); if (trueValue.includes(val)) return true; if (falseValue.includes(val)) return false; throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${name}\n` + `Support boolean input list: \`true | True | TRUE | false | False | FALSE\``); } exports.getBooleanInput = getBooleanInput; /** * Sets the value of an output. * * @param name name of the output to set * @param value value to store. Non-string values will be converted to a string via JSON.stringify */ // eslint-disable-next-line @typescript-eslint/no-explicit-any function setOutput(name, value) { process.stdout.write(os.EOL); command_1.issueCommand('set-output', { name }, value); } exports.setOutput = setOutput; /** * Enables or disables the echoing of commands into stdout for the rest of the step. * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set. * */ function setCommandEcho(enabled) { command_1.issue('echo', enabled ? 'on' : 'off'); } exports.setCommandEcho = setCommandEcho; //----------------------------------------------------------------------- // Results //----------------------------------------------------------------------- /** * Sets the action status to failed. * When the action exits it will be with an exit code of 1 * @param message add error issue message */ function setFailed(message) { process.exitCode = ExitCode.Failure; error(message); } exports.setFailed = setFailed; //----------------------------------------------------------------------- // Logging Commands //----------------------------------------------------------------------- /** * Gets whether Actions Step Debug is on or not */ function isDebug() { return process.env['RUNNER_DEBUG'] === '1'; } exports.isDebug = isDebug; /** * Writes debug message to user log * @param message debug message */ function debug(message) { command_1.issueCommand('debug', {}, message); } exports.debug = debug; /** * Adds an error issue * @param message error issue message. Errors will be converted to string via toString() */ function error(message) { command_1.issue('error', message instanceof Error ? message.toString() : message); } exports.error = error; /** * Adds an warning issue * @param message warning issue message. Errors will be converted to string via toString() */ function warning(message) { command_1.issue('warning', message instanceof Error ? message.toString() : message); } exports.warning = warning; /** * Writes info to log with console.log. * @param message info message */ function info(message) { process.stdout.write(message + os.EOL); } exports.info = info; /** * Begin an output group. * * Output until the next `groupEnd` will be foldable in this group * * @param name The name of the output group */ function startGroup(name) { command_1.issue('group', name); } exports.startGroup = startGroup; /** * End an output group. */ function endGroup() { command_1.issue('endgroup'); } exports.endGroup = endGroup; /** * Wrap an asynchronous function call in a group. * * Returns the same type as the function itself. * * @param name The name of the group * @param fn The function to wrap in the group */ function group(name, fn) { return __awaiter(this, void 0, void 0, function* () { startGroup(name); let result; try { result = yield fn(); } finally { endGroup(); } return result; }); } exports.group = group; //----------------------------------------------------------------------- // Wrapper action state //----------------------------------------------------------------------- /** * Saves state for current action, the state can only be retrieved by this action's post job execution. * * @param name name of the state to store * @param value value to store. Non-string values will be converted to a string via JSON.stringify */ // eslint-disable-next-line @typescript-eslint/no-explicit-any function saveState(name, value) { command_1.issueCommand('save-state', { name }, value); } exports.saveState = saveState; /** * Gets the value of an state set by this action's main execution. * * @param name name of the state to get * @returns string */ function getState(name) { return process.env[`STATE_${name}`] || ''; } exports.getState = getState; //# sourceMappingURL=core.js.map /***/ }), /***/ 717: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; // For internal use, subject to change. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.issueCommand = void 0; // We use any as a valid input type /* eslint-disable @typescript-eslint/no-explicit-any */ const fs = __importStar(__nccwpck_require__(5747)); const os = __importStar(__nccwpck_require__(2087)); const utils_1 = __nccwpck_require__(5278); function issueCommand(command, message) { const filePath = process.env[`GITHUB_${command}`]; if (!filePath) { throw new Error(`Unable to find environment variable for file command ${command}`); } if (!fs.existsSync(filePath)) { throw new Error(`Missing file at path: ${filePath}`); } fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, { encoding: 'utf8' }); } exports.issueCommand = issueCommand; //# sourceMappingURL=file-command.js.map /***/ }), /***/ 5278: /***/ ((__unused_webpack_module, exports) => { "use strict"; // We use any as a valid input type /* eslint-disable @typescript-eslint/no-explicit-any */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.toCommandValue = void 0; /** * Sanitizes an input into a string so it can be passed into issueCommand safely * @param input input to sanitize into a string */ function toCommandValue(input) { if (input === null || input === undefined) { return ''; } else if (typeof input === 'string' || input instanceof String) { return input; } return JSON.stringify(input); } exports.toCommandValue = toCommandValue; //# sourceMappingURL=utils.js.map /***/ }), /***/ 1514: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getExecOutput = exports.exec = void 0; const string_decoder_1 = __nccwpck_require__(4304); const tr = __importStar(__nccwpck_require__(8159)); /** * Exec a command. * Output will be streamed to the live console. * Returns promise with return code * * @param commandLine command to execute (can include additional args). Must be correctly escaped. * @param args optional arguments for tool. Escaping is handled by the lib. * @param options optional exec options. See ExecOptions * @returns Promise exit code */ function exec(commandLine, args, options) { return __awaiter(this, void 0, void 0, function* () { const commandArgs = tr.argStringToArray(commandLine); if (commandArgs.length === 0) { throw new Error(`Parameter 'commandLine' cannot be null or empty.`); } // Path to tool to execute should be first arg const toolPath = commandArgs[0]; args = commandArgs.slice(1).concat(args || []); const runner = new tr.ToolRunner(toolPath, args, options); return runner.exec(); }); } exports.exec = exec; /** * Exec a command and get the output. * Output will be streamed to the live console. * Returns promise with the exit code and collected stdout and stderr * * @param commandLine command to execute (can include additional args). Must be correctly escaped. * @param args optional arguments for tool. Escaping is handled by the lib. * @param options optional exec options. See ExecOptions * @returns Promise exit code, stdout, and stderr */ function getExecOutput(commandLine, args, options) { var _a, _b; return __awaiter(this, void 0, void 0, function* () { let stdout = ''; let stderr = ''; //Using string decoder covers the case where a mult-byte character is split const stdoutDecoder = new string_decoder_1.StringDecoder('utf8'); const stderrDecoder = new string_decoder_1.StringDecoder('utf8'); const originalStdoutListener = (_a = options === null || options === void 0 ? void 0 : options.listeners) === null || _a === void 0 ? void 0 : _a.stdout; const originalStdErrListener = (_b = options === null || options === void 0 ? void 0 : options.listeners) === null || _b === void 0 ? void 0 : _b.stderr; const stdErrListener = (data) => { stderr += stderrDecoder.write(data); if (originalStdErrListener) { originalStdErrListener(data); } }; const stdOutListener = (data) => { stdout += stdoutDecoder.write(data); if (originalStdoutListener) { originalStdoutListener(data); } }; const listeners = Object.assign(Object.assign({}, options === null || options === void 0 ? void 0 : options.listeners), { stdout: stdOutListener, stderr: stdErrListener }); const exitCode = yield exec(commandLine, args, Object.assign(Object.assign({}, options), { listeners })); //flush any remaining characters stdout += stdoutDecoder.end(); stderr += stderrDecoder.end(); return { exitCode, stdout, stderr }; }); } exports.getExecOutput = getExecOutput; //# sourceMappingURL=exec.js.map /***/ }), /***/ 8159: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.argStringToArray = exports.ToolRunner = void 0; const os = __importStar(__nccwpck_require__(2087)); const events = __importStar(__nccwpck_require__(8614)); const child = __importStar(__nccwpck_require__(3129)); const path = __importStar(__nccwpck_require__(5622)); const io = __importStar(__nccwpck_require__(7436)); const ioUtil = __importStar(__nccwpck_require__(1962)); const timers_1 = __nccwpck_require__(8213); /* eslint-disable @typescript-eslint/unbound-method */ const IS_WINDOWS = process.platform === 'win32'; /* * Class for running command line tools. Handles quoting and arg parsing in a platform agnostic way. */ class ToolRunner extends events.EventEmitter { constructor(toolPath, args, options) { super(); if (!toolPath) { throw new Error("Parameter 'toolPath' cannot be null or empty."); } this.toolPath = toolPath; this.args = args || []; this.options = options || {}; } _debug(message) { if (this.options.listeners && this.options.listeners.debug) { this.options.listeners.debug(message); } } _getCommandString(options, noPrefix) { const toolPath = this._getSpawnFileName(); const args = this._getSpawnArgs(options); let cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool if (IS_WINDOWS) { // Windows + cmd file if (this._isCmdFile()) { cmd += toolPath; for (const a of args) { cmd += ` ${a}`; } } // Windows + verbatim else if (options.windowsVerbatimArguments) { cmd += `"${toolPath}"`; for (const a of args) { cmd += ` ${a}`; } } // Windows (regular) else { cmd += this._windowsQuoteCmdArg(toolPath); for (const a of args) { cmd += ` ${this._windowsQuoteCmdArg(a)}`; } } } else { // OSX/Linux - this can likely be improved with some form of quoting. // creating processes on Unix is fundamentally different than Windows. // on Unix, execvp() takes an arg array. cmd += toolPath; for (const a of args) { cmd += ` ${a}`; } } return cmd; } _processLineBuffer(data, strBuffer, onLine) { try { let s = strBuffer + data.toString(); let n = s.indexOf(os.EOL); while (n > -1) { const line = s.substring(0, n); onLine(line); // the rest of the string ... s = s.substring(n + os.EOL.length); n = s.indexOf(os.EOL); } return s; } catch (err) { // streaming lines to console is best effort. Don't fail a build. this._debug(`error processing line. Failed with error ${err}`); return ''; } } _getSpawnFileName() { if (IS_WINDOWS) { if (this._isCmdFile()) { return process.env['COMSPEC'] || 'cmd.exe'; } } return this.toolPath; } _getSpawnArgs(options) { if (IS_WINDOWS) { if (this._isCmdFile()) { let argline = `/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`; for (const a of this.args) { argline += ' '; argline += options.windowsVerbatimArguments ? a : this._windowsQuoteCmdArg(a); } argline += '"'; return [argline]; } } return this.args; } _endsWith(str, end) { return str.endsWith(end); } _isCmdFile() { const upperToolPath = this.toolPath.toUpperCase(); return (this._endsWith(upperToolPath, '.CMD') || this._endsWith(upperToolPath, '.BAT')); } _windowsQuoteCmdArg(arg) { // for .exe, apply the normal quoting rules that libuv applies if (!this._isCmdFile()) { return this._uvQuoteCmdArg(arg); } // otherwise apply quoting rules specific to the cmd.exe command line parser. // the libuv rules are generic and are not designed specifically for cmd.exe // command line parser. // // for a detailed description of the cmd.exe command line parser, refer to // http://stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/7970912#7970912 // need quotes for empty arg if (!arg) { return '""'; } // determine whether the arg needs to be quoted const cmdSpecialChars = [ ' ', '\t', '&', '(', ')', '[', ']', '{', '}', '^', '=', ';', '!', "'", '+', ',', '`', '~', '|', '<', '>', '"' ]; let needsQuotes = false; for (const char of arg) { if (cmdSpecialChars.some(x => x === char)) { needsQuotes = true; break; } } // short-circuit if quotes not needed if (!needsQuotes) { return arg; } // the following quoting rules are very similar to the rules that by libuv applies. // // 1) wrap the string in quotes // // 2) double-up quotes - i.e. " => "" // // this is different from the libuv quoting rules. libuv replaces " with \", which unfortunately // doesn't work well with a cmd.exe command line. // // note, replacing " with "" also works well if the arg is passed to a downstream .NET console app. // for example, the command line: // foo.exe "myarg:""my val""" // is parsed by a .NET console app into an arg array: // [ "myarg:\"my val\"" ] // which is the same end result when applying libuv quoting rules. although the actual // command line from libuv quoting rules would look like: // foo.exe "myarg:\"my val\"" // // 3) double-up slashes that precede a quote, // e.g. hello \world => "hello \world" // hello\"world => "hello\\""world" // hello\\"world => "hello\\\\""world" // hello world\ => "hello world\\" // // technically this is not required for a cmd.exe command line, or the batch argument parser. // the reasons for including this as a .cmd quoting rule are: // // a) this is optimized for the scenario where the argument is passed from the .cmd file to an // external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule. // // b) it's what we've been doing previously (by deferring to node default behavior) and we // haven't heard any complaints about that aspect. // // note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be // escaped when used on the command line directly - even though within a .cmd file % can be escaped // by using %%. // // the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts // the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing. // // one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would // often work, since it is unlikely that var^ would exist, and the ^ character is removed when the // variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args // to an external program. // // an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file. // % can be escaped within a .cmd file. let reverse = '"'; let quoteHit = true; for (let i = arg.length; i > 0; i--) { // walk the string in reverse reverse += arg[i - 1]; if (quoteHit && arg[i - 1] === '\\') { reverse += '\\'; // double the slash } else if (arg[i - 1] === '"') { quoteHit = true; reverse += '"'; // double the quote } else { quoteHit = false; } } reverse += '"'; return reverse .split('') .reverse() .join(''); } _uvQuoteCmdArg(arg) { // Tool runner wraps child_process.spawn() and needs to apply the same quoting as // Node in certain cases where the undocumented spawn option windowsVerbatimArguments // is used. // // Since this function is a port of quote_cmd_arg from Node 4.x (technically, lib UV, // see https://github.com/nodejs/node/blob/v4.x/deps/uv/src/win/process.c for details), // pasting copyright notice from Node within this function: // // Copyright Joyent, Inc. and other Node contributors. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to // deal in the Software without restriction, including without limitation the // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or // sell copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // IN THE SOFTWARE. if (!arg) { // Need double quotation for empty argument return '""'; } if (!arg.includes(' ') && !arg.includes('\t') && !arg.includes('"')) { // No quotation needed return arg; } if (!arg.includes('"') && !arg.includes('\\')) { // No embedded double quotes or backslashes, so I can just wrap // quote marks around the whole thing. return `"${arg}"`; } // Expected input/output: // input : hello"world // output: "hello\"world" // input : hello""world // output: "hello\"\"world" // input : hello\world // output: hello\world // input : hello\\world // output: hello\\world // input : hello\"world // output: "hello\\\"world" // input : hello\\"world // output: "hello\\\\\"world" // input : hello world\ // output: "hello world\\" - note the comment in libuv actually reads "hello world\" // but it appears the comment is wrong, it should be "hello world\\" let reverse = '"'; let quoteHit = true; for (let i = arg.length; i > 0; i--) { // walk the string in reverse reverse += arg[i - 1]; if (quoteHit && arg[i - 1] === '\\') { reverse += '\\'; } else if (arg[i - 1] === '"') { quoteHit = true; reverse += '\\'; } else { quoteHit = false; } } reverse += '"'; return reverse .split('') .reverse() .join(''); } _cloneExecOptions(options) { options = options || {}; const result = { cwd: options.cwd || process.cwd(), env: options.env || process.env, silent: options.silent || false, windowsVerbatimArguments: options.windowsVerbatimArguments || false, failOnStdErr: options.failOnStdErr || false, ignoreReturnCode: options.ignoreReturnCode || false, delay: options.delay || 10000 }; result.outStream = options.outStream || process.stdout; result.errStream = options.errStream || process.stderr; return result; } _getSpawnOptions(options, toolPath) { options = options || {}; const result = {}; result.cwd = options.cwd; result.env = options.env; result['windowsVerbatimArguments'] = options.windowsVerbatimArguments || this._isCmdFile(); if (options.windowsVerbatimArguments) { result.argv0 = `"${toolPath}"`; } return result; } /** * Exec a tool. * Output will be streamed to the live console. * Returns promise with return code * * @param tool path to tool to exec * @param options optional exec options. See ExecOptions * @returns number */ exec() { return __awaiter(this, void 0, void 0, function* () { // root the tool path if it is unrooted and contains relative pathing if (!ioUtil.isRooted(this.toolPath) && (this.toolPath.includes('/') || (IS_WINDOWS && this.toolPath.includes('\\')))) { // prefer options.cwd if it is specified, however options.cwd may also need to be rooted this.toolPath = path.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath); } // if the tool is only a file name, then resolve it from the PATH // otherwise verify it exists (add extension on Windows if necessary) this.toolPath = yield io.which(this.toolPath, true); return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { this._debug(`exec tool: ${this.toolPath}`); this._debug('arguments:'); for (const arg of this.args) { this._debug(` ${arg}`); } const optionsNonNull = this._cloneExecOptions(this.options); if (!optionsNonNull.silent && optionsNonNull.outStream) { optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL); } const state = new ExecState(optionsNonNull, this.toolPath); state.on('debug', (message) => { this._debug(message); }); if (this.options.cwd && !(yield ioUtil.exists(this.options.cwd))) { return reject(new Error(`The cwd: ${this.options.cwd} does not exist!`)); } const fileName = this._getSpawnFileName(); const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName)); let stdbuffer = ''; if (cp.stdout) { cp.stdout.on('data', (data) => { if (this.options.listeners && this.options.listeners.stdout) { this.options.listeners.stdout(data); } if (!optionsNonNull.silent && optionsNonNull.outStream) { optionsNonNull.outStream.write(data); } stdbuffer = this._processLineBuffer(data, stdbuffer, (line) => { if (this.options.listeners && this.options.listeners.stdline) { this.options.listeners.stdline(line); } }); }); } let errbuffer = ''; if (cp.stderr) { cp.stderr.on('data', (data) => { state.processStderr = true; if (this.options.listeners && this.options.listeners.stderr) { this.options.listeners.stderr(data); } if (!optionsNonNull.silent && optionsNonNull.errStream && optionsNonNull.outStream) { const s = optionsNonNull.failOnStdErr ? optionsNonNull.errStream : optionsNonNull.outStream; s.write(data); } errbuffer = this._processLineBuffer(data, errbuffer, (line) => { if (this.options.listeners && this.options.listeners.errline) { this.options.listeners.errline(line); } }); }); } cp.on('error', (err) => { state.processError = err.message; state.processExited = true; state.processClosed = true; state.CheckComplete(); }); cp.on('exit', (code) => { state.processExitCode = code; state.processExited = true; this._debug(`Exit code ${code} received from tool '${this.toolPath}'`); state.CheckComplete(); }); cp.on('close', (code) => { state.processExitCode = code; state.processExited = true; state.processClosed = true; this._debug(`STDIO streams have closed for tool '${this.toolPath}'`); state.CheckComplete(); }); state.on('done', (error, exitCode) => { if (stdbuffer.length > 0) { this.emit('stdline', stdbuffer); } if (errbuffer.length > 0) { this.emit('errline', errbuffer); } cp.removeAllListeners(); if (error) { reject(error); } else { resolve(exitCode); } }); if (this.options.input) { if (!cp.stdin) { throw new Error('child process missing stdin'); } cp.stdin.end(this.options.input); } })); }); } } exports.ToolRunner = ToolRunner; /** * Convert an arg string to an array of args. Handles escaping * * @param argString string of arguments * @returns string[] array of arguments */ function argStringToArray(argString) { const args = []; let inQuotes = false; let escaped = false; let arg = ''; function append(c) { // we only escape double quotes. if (escaped && c !== '"') { arg += '\\'; } arg += c; escaped = false; } for (let i = 0; i < argString.length; i++) { const c = argString.charAt(i); if (c === '"') { if (!escaped) { inQuotes = !inQuotes; } else { append(c); } continue; } if (c === '\\' && escaped) { append(c); continue; } if (c === '\\' && inQuotes) { escaped = true; continue; } if (c === ' ' && !inQuotes) { if (arg.length > 0) { args.push(arg); arg = ''; } continue; } append(c); } if (arg.length > 0) { args.push(arg.trim()); } return args; } exports.argStringToArray = argStringToArray; class ExecState extends events.EventEmitter { constructor(options, toolPath) { super(); this.processClosed = false; // tracks whether the process has exited and stdio is closed this.processError = ''; this.processExitCode = 0; this.processExited = false; // tracks whether the process has exited this.processStderr = false; // tracks whether stderr was written to this.delay = 10000; // 10 seconds this.done = false; this.timeout = null; if (!toolPath) { throw new Error('toolPath must not be empty'); } this.options = options; this.toolPath = toolPath; if (options.delay) { this.delay = options.delay; } } CheckComplete() { if (this.done) { return; } if (this.processClosed) { this._setResult(); } else if (this.processExited) { this.timeout = timers_1.setTimeout(ExecState.HandleTimeout, this.delay, this); } } _debug(message) { this.emit('debug', message); } _setResult() { // determine whether there is an error let error; if (this.processExited) { if (this.processError) { error = new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`); } else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) { error = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`); } else if (this.processStderr && this.options.failOnStdErr) { error = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`); } } // clear the timeout if (this.timeout) { clearTimeout(this.timeout); this.timeout = null; } this.done = true; this.emit('done', error, this.processExitCode); } static HandleTimeout(state) { if (state.done) { return; } if (!state.processClosed && state.processExited) { const message = `The STDIO streams did not close within ${state.delay / 1000} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`; state._debug(message); } state._setResult(); } } //# sourceMappingURL=toolrunner.js.map /***/ }), /***/ 8090: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.create = void 0; const internal_globber_1 = __nccwpck_require__(8298); /** * Constructs a globber * * @param patterns Patterns separated by newlines * @param options Glob options */ function create(patterns, options) { return __awaiter(this, void 0, void 0, function* () { return yield internal_globber_1.DefaultGlobber.create(patterns, options); }); } exports.create = create; //# sourceMappingURL=glob.js.map /***/ }), /***/ 1026: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getOptions = void 0; const core = __importStar(__nccwpck_require__(2186)); /** * Returns a copy with defaults filled in. */ function getOptions(copy) { const result = { followSymbolicLinks: true, implicitDescendants: true, omitBrokenSymbolicLinks: true }; if (copy) { if (typeof copy.followSymbolicLinks === 'boolean') { result.followSymbolicLinks = copy.followSymbolicLinks; core.debug(`followSymbolicLinks '${result.followSymbolicLinks}'`); } if (typeof copy.implicitDescendants === 'boolean') { result.implicitDescendants = copy.implicitDescendants; core.debug(`implicitDescendants '${result.implicitDescendants}'`); } if (typeof copy.omitBrokenSymbolicLinks === 'boolean') { result.omitBrokenSymbolicLinks = copy.omitBrokenSymbolicLinks; core.debug(`omitBrokenSymbolicLinks '${result.omitBrokenSymbolicLinks}'`); } } return result; } exports.getOptions = getOptions; //# sourceMappingURL=internal-glob-options-helper.js.map /***/ }), /***/ 8298: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __asyncValues = (this && this.__asyncValues) || function (o) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var m = o[Symbol.asyncIterator], i; 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); 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); }); }; } function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); } var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); var g = generator.apply(thisArg, _arguments || []), i, q = []; return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; 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); }); }; } function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } function fulfill(value) { resume("next", value); } function reject(value) { resume("throw", value); } function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.DefaultGlobber = void 0; const core = __importStar(__nccwpck_require__(2186)); const fs = __importStar(__nccwpck_require__(5747)); const globOptionsHelper = __importStar(__nccwpck_require__(1026)); const path = __importStar(__nccwpck_require__(5622)); const patternHelper = __importStar(__nccwpck_require__(9005)); const internal_match_kind_1 = __nccwpck_require__(1063); const internal_pattern_1 = __nccwpck_require__(4536); const internal_search_state_1 = __nccwpck_require__(9117); const IS_WINDOWS = process.platform === 'win32'; class DefaultGlobber { constructor(options) { this.patterns = []; this.searchPaths = []; this.options = globOptionsHelper.getOptions(options); } getSearchPaths() { // Return a copy return this.searchPaths.slice(); } glob() { var e_1, _a; return __awaiter(this, void 0, void 0, function* () { const result = []; try { for (var _b = __asyncValues(this.globGenerator()), _c; _c = yield _b.next(), !_c.done;) { const itemPath = _c.value; result.push(itemPath); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_c && !_c.done && (_a = _b.return)) yield _a.call(_b); } finally { if (e_1) throw e_1.error; } } return result; }); } globGenerator() { return __asyncGenerator(this, arguments, function* globGenerator_1() { // Fill in defaults options const options = globOptionsHelper.getOptions(this.options); // Implicit descendants? const patterns = []; for (const pattern of this.patterns) { patterns.push(pattern); if (options.implicitDescendants && (pattern.trailingSeparator || pattern.segments[pattern.segments.length - 1] !== '**')) { patterns.push(new internal_pattern_1.Pattern(pattern.negate, true, pattern.segments.concat('**'))); } } // Push the search paths const stack = []; for (const searchPath of patternHelper.getSearchPaths(patterns)) { core.debug(`Search path '${searchPath}'`); // Exists? try { // Intentionally using lstat. Detection for broken symlink // will be performed later (if following symlinks). yield __await(fs.promises.lstat(searchPath)); } catch (err) { if (err.code === 'ENOENT') { continue; } throw err; } stack.unshift(new internal_search_state_1.SearchState(searchPath, 1)); } // Search const traversalChain = []; // used to detect cycles while (stack.length) { // Pop const item = stack.pop(); // Match? const match = patternHelper.match(patterns, item.path); const partialMatch = !!match || patternHelper.partialMatch(patterns, item.path); if (!match && !partialMatch) { continue; } // Stat const stats = yield __await(DefaultGlobber.stat(item, options, traversalChain) // Broken symlink, or symlink cycle detected, or no longer exists ); // Broken symlink, or symlink cycle detected, or no longer exists if (!stats) { continue; } // Directory if (stats.isDirectory()) { // Matched if (match & internal_match_kind_1.MatchKind.Directory) { yield yield __await(item.path); } // Descend? else if (!partialMatch) { continue; } // Push the child items in reverse const childLevel = item.level + 1; const childItems = (yield __await(fs.promises.readdir(item.path))).map(x => new internal_search_state_1.SearchState(path.join(item.path, x), childLevel)); stack.push(...childItems.reverse()); } // File else if (match & internal_match_kind_1.MatchKind.File) { yield yield __await(item.path); } } }); } /** * Constructs a DefaultGlobber */ static create(patterns, options) { return __awaiter(this, void 0, void 0, function* () { const result = new DefaultGlobber(options); if (IS_WINDOWS) { patterns = patterns.replace(/\r\n/g, '\n'); patterns = patterns.replace(/\r/g, '\n'); } const lines = patterns.split('\n').map(x => x.trim()); for (const line of lines) { // Empty or comment if (!line || line.startsWith('#')) { continue; } // Pattern else { result.patterns.push(new internal_pattern_1.Pattern(line)); } } result.searchPaths.push(...patternHelper.getSearchPaths(result.patterns)); return result; }); } static stat(item, options, traversalChain) { return __awaiter(this, void 0, void 0, function* () { // Note: // `stat` returns info about the target of a symlink (or symlink chain) // `lstat` returns info about a symlink itself let stats; if (options.followSymbolicLinks) { try { // Use `stat` (following symlinks) stats = yield fs.promises.stat(item.path); } catch (err) { if (err.code === 'ENOENT') { if (options.omitBrokenSymbolicLinks) { core.debug(`Broken symlink '${item.path}'`); return undefined; } throw new Error(`No information found for the path '${item.path}'. This may indicate a broken symbolic link.`); } throw err; } } else { // Use `lstat` (not following symlinks) stats = yield fs.promises.lstat(item.path); } // Note, isDirectory() returns false for the lstat of a symlink if (stats.isDirectory() && options.followSymbolicLinks) { // Get the realpath const realPath = yield fs.promises.realpath(item.path); // Fixup the traversal chain to match the item level while (traversalChain.length >= item.level) { traversalChain.pop(); } // Test for a cycle if (traversalChain.some((x) => x === realPath)) { core.debug(`Symlink cycle detected for path '${item.path}' and realpath '${realPath}'`); return undefined; } // Update the traversal chain traversalChain.push(realPath); } return stats; }); } } exports.DefaultGlobber = DefaultGlobber; //# sourceMappingURL=internal-globber.js.map /***/ }), /***/ 1063: /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.MatchKind = void 0; /** * Indicates whether a pattern matches a path */ var MatchKind; (function (MatchKind) { /** Not matched */ MatchKind[MatchKind["None"] = 0] = "None"; /** Matched if the path is a directory */ MatchKind[MatchKind["Directory"] = 1] = "Directory"; /** Matched if the path is a regular file */ MatchKind[MatchKind["File"] = 2] = "File"; /** Matched */ MatchKind[MatchKind["All"] = 3] = "All"; })(MatchKind = exports.MatchKind || (exports.MatchKind = {})); //# sourceMappingURL=internal-match-kind.js.map /***/ }), /***/ 1849: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.safeTrimTrailingSeparator = exports.normalizeSeparators = exports.hasRoot = exports.hasAbsoluteRoot = exports.ensureAbsoluteRoot = exports.dirname = void 0; const path = __importStar(__nccwpck_require__(5622)); const assert_1 = __importDefault(__nccwpck_require__(2357)); const IS_WINDOWS = process.platform === 'win32'; /** * Similar to path.dirname except normalizes the path separators and slightly better handling for Windows UNC paths. * * For example, on Linux/macOS: * - `/ => /` * - `/hello => /` * * For example, on Windows: * - `C:\ => C:\` * - `C:\hello => C:\` * - `C: => C:` * - `C:hello => C:` * - `\ => \` * - `\hello => \` * - `\\hello => \\hello` * - `\\hello\world => \\hello\world` */ function dirname(p) { // Normalize slashes and trim unnecessary trailing slash p = safeTrimTrailingSeparator(p); // Windows UNC root, e.g. \\hello or \\hello\world if (IS_WINDOWS && /^\\\\[^\\]+(\\[^\\]+)?$/.test(p)) { return p; } // Get dirname let result = path.dirname(p); // Trim trailing slash for Windows UNC root, e.g. \\hello\world\ if (IS_WINDOWS && /^\\\\[^\\]+\\[^\\]+\\$/.test(result)) { result = safeTrimTrailingSeparator(result); } return result; } exports.dirname = dirname; /** * Roots the path if not already rooted. On Windows, relative roots like `\` * or `C:` are expanded based on the current working directory. */ function ensureAbsoluteRoot(root, itemPath) { assert_1.default(root, `ensureAbsoluteRoot parameter 'root' must not be empty`); assert_1.default(itemPath, `ensureAbsoluteRoot parameter 'itemPath' must not be empty`); // Already rooted if (hasAbsoluteRoot(itemPath)) { return itemPath; } // Windows if (IS_WINDOWS) { // Check for itemPath like C: or C:foo if (itemPath.match(/^[A-Z]:[^\\/]|^[A-Z]:$/i)) { let cwd = process.cwd(); assert_1.default(cwd.match(/^[A-Z]:\\/i), `Expected current directory to start with an absolute drive root. Actual '${cwd}'`); // Drive letter matches cwd? Expand to cwd if (itemPath[0].toUpperCase() === cwd[0].toUpperCase()) { // Drive only, e.g. C: if (itemPath.length === 2) { // Preserve specified drive letter case (upper or lower) return `${itemPath[0]}:\\${cwd.substr(3)}`; } // Drive + path, e.g. C:foo else { if (!cwd.endsWith('\\')) { cwd += '\\'; } // Preserve specified drive letter case (upper or lower) return `${itemPath[0]}:\\${cwd.substr(3)}${itemPath.substr(2)}`; } } // Different drive else { return `${itemPath[0]}:\\${itemPath.substr(2)}`; } } // Check for itemPath like \ or \foo else if (normalizeSeparators(itemPath).match(/^\\$|^\\[^\\]/)) { const cwd = process.cwd(); assert_1.default(cwd.match(/^[A-Z]:\\/i), `Expected current directory to start with an absolute drive root. Actual '${cwd}'`); return `${cwd[0]}:\\${itemPath.substr(1)}`; } } assert_1.default(hasAbsoluteRoot(root), `ensureAbsoluteRoot parameter 'root' must have an absolute root`); // Otherwise ensure root ends with a separator if (root.endsWith('/') || (IS_WINDOWS && root.endsWith('\\'))) { // Intentionally empty } else { // Append separator root += path.sep; } return root + itemPath; } exports.ensureAbsoluteRoot = ensureAbsoluteRoot; /** * On Linux/macOS, true if path starts with `/`. On Windows, true for paths like: * `\\hello\share` and `C:\hello` (and using alternate separator). */ function hasAbsoluteRoot(itemPath) { assert_1.default(itemPath, `hasAbsoluteRoot parameter 'itemPath' must not be empty`); // Normalize separators itemPath = normalizeSeparators(itemPath); // Windows if (IS_WINDOWS) { // E.g. \\hello\share or C:\hello return itemPath.startsWith('\\\\') || /^[A-Z]:\\/i.test(itemPath); } // E.g. /hello return itemPath.startsWith('/'); } exports.hasAbsoluteRoot = hasAbsoluteRoot; /** * On Linux/macOS, true if path starts with `/`. On Windows, true for paths like: * `\`, `\hello`, `\\hello\share`, `C:`, and `C:\hello` (and using alternate separator). */ function hasRoot(itemPath) { assert_1.default(itemPath, `isRooted parameter 'itemPath' must not be empty`); // Normalize separators itemPath = normalizeSeparators(itemPath); // Windows if (IS_WINDOWS) { // E.g. \ or \hello or \\hello // E.g. C: or C:\hello return itemPath.startsWith('\\') || /^[A-Z]:/i.test(itemPath); } // E.g. /hello return itemPath.startsWith('/'); } exports.hasRoot = hasRoot; /** * Removes redundant slashes and converts `/` to `\` on Windows */ function normalizeSeparators(p) { p = p || ''; // Windows if (IS_WINDOWS) { // Convert slashes on Windows p = p.replace(/\//g, '\\'); // Remove redundant slashes const isUnc = /^\\\\+[^\\]/.test(p); // e.g. \\hello return (isUnc ? '\\' : '') + p.replace(/\\\\+/g, '\\'); // preserve leading \\ for UNC } // Remove redundant slashes return p.replace(/\/\/+/g, '/'); } exports.normalizeSeparators = normalizeSeparators; /** * Normalizes the path separators and trims the trailing separator (when safe). * For example, `/foo/ => /foo` but `/ => /` */ function safeTrimTrailingSeparator(p) { // Short-circuit if empty if (!p) { return ''; } // Normalize separators p = normalizeSeparators(p); // No trailing slash if (!p.endsWith(path.sep)) { return p; } // Check '/' on Linux/macOS and '\' on Windows if (p === path.sep) { return p; } // On Windows check if drive root. E.g. C:\ if (IS_WINDOWS && /^[A-Z]:\\$/i.test(p)) { return p; } // Otherwise trim trailing slash return p.substr(0, p.length - 1); } exports.safeTrimTrailingSeparator = safeTrimTrailingSeparator; //# sourceMappingURL=internal-path-helper.js.map /***/ }), /***/ 6836: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Path = void 0; const path = __importStar(__nccwpck_require__(5622)); const pathHelper = __importStar(__nccwpck_require__(1849)); const assert_1 = __importDefault(__nccwpck_require__(2357)); const IS_WINDOWS = process.platform === 'win32'; /** * Helper class for parsing paths into segments */ class Path { /** * Constructs a Path * @param itemPath Path or array of segments */ constructor(itemPath) { this.segments = []; // String if (typeof itemPath === 'string') { assert_1.default(itemPath, `Parameter 'itemPath' must not be empty`); // Normalize slashes and trim unnecessary trailing slash itemPath = pathHelper.safeTrimTrailingSeparator(itemPath); // Not rooted if (!pathHelper.hasRoot(itemPath)) { this.segments = itemPath.split(path.sep); } // Rooted else { // Add all segments, while not at the root let remaining = itemPath; let dir = pathHelper.dirname(remaining); while (dir !== remaining) { // Add the segment const basename = path.basename(remaining); this.segments.unshift(basename); // Truncate the last segment remaining = dir; dir = pathHelper.dirname(remaining); } // Remainder is the root this.segments.unshift(remaining); } } // Array else { // Must not be empty assert_1.default(itemPath.length > 0, `Parameter 'itemPath' must not be an empty array`); // Each segment for (let i = 0; i < itemPath.length; i++) { let segment = itemPath[i]; // Must not be empty assert_1.default(segment, `Parameter 'itemPath' must not contain any empty segments`); // Normalize slashes segment = pathHelper.normalizeSeparators(itemPath[i]); // Root segment if (i === 0 && pathHelper.hasRoot(segment)) { segment = pathHelper.safeTrimTrailingSeparator(segment); assert_1.default(segment === pathHelper.dirname(segment), `Parameter 'itemPath' root segment contains information for multiple segments`); this.segments.push(segment); } // All other segments else { // Must not contain slash assert_1.default(!segment.includes(path.sep), `Parameter 'itemPath' contains unexpected path separators`); this.segments.push(segment); } } } } /** * Converts the path to it's string representation */ toString() { // First segment let result = this.segments[0]; // All others let skipSlash = result.endsWith(path.sep) || (IS_WINDOWS && /^[A-Z]:$/i.test(result)); for (let i = 1; i < this.segments.length; i++) { if (skipSlash) { skipSlash = false; } else { result += path.sep; } result += this.segments[i]; } return result; } } exports.Path = Path; //# sourceMappingURL=internal-path.js.map /***/ }), /***/ 9005: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.partialMatch = exports.match = exports.getSearchPaths = void 0; const pathHelper = __importStar(__nccwpck_require__(1849)); const internal_match_kind_1 = __nccwpck_require__(1063); const IS_WINDOWS = process.platform === 'win32'; /** * Given an array of patterns, returns an array of paths to search. * Duplicates and paths under other included paths are filtered out. */ function getSearchPaths(patterns) { // Ignore negate patterns patterns = patterns.filter(x => !x.negate); // Create a map of all search paths const searchPathMap = {}; for (const pattern of patterns) { const key = IS_WINDOWS ? pattern.searchPath.toUpperCase() : pattern.searchPath; searchPathMap[key] = 'candidate'; } const result = []; for (const pattern of patterns) { // Check if already included const key = IS_WINDOWS ? pattern.searchPath.toUpperCase() : pattern.searchPath; if (searchPathMap[key] === 'included') { continue; } // Check for an ancestor search path let foundAncestor = false; let tempKey = key; let parent = pathHelper.dirname(tempKey); while (parent !== tempKey) { if (searchPathMap[parent]) { foundAncestor = true; break; } tempKey = parent; parent = pathHelper.dirname(tempKey); } // Include the search pattern in the result if (!foundAncestor) { result.push(pattern.searchPath); searchPathMap[key] = 'included'; } } return result; } exports.getSearchPaths = getSearchPaths; /** * Matches the patterns against the path */ function match(patterns, itemPath) { let result = internal_match_kind_1.MatchKind.None; for (const pattern of patterns) { if (pattern.negate) { result &= ~pattern.match(itemPath); } else { result |= pattern.match(itemPath); } } return result; } exports.match = match; /** * Checks whether to descend further into the directory */ function partialMatch(patterns, itemPath) { return patterns.some(x => !x.negate && x.partialMatch(itemPath)); } exports.partialMatch = partialMatch; //# sourceMappingURL=internal-pattern-helper.js.map /***/ }), /***/ 4536: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Pattern = void 0; const os = __importStar(__nccwpck_require__(2087)); const path = __importStar(__nccwpck_require__(5622)); const pathHelper = __importStar(__nccwpck_require__(1849)); const assert_1 = __importDefault(__nccwpck_require__(2357)); const minimatch_1 = __nccwpck_require__(3973); const internal_match_kind_1 = __nccwpck_require__(1063); const internal_path_1 = __nccwpck_require__(6836); const IS_WINDOWS = process.platform === 'win32'; class Pattern { constructor(patternOrNegate, isImplicitPattern = false, segments, homedir) { /** * Indicates whether matches should be excluded from the result set */ this.negate = false; // Pattern overload let pattern; if (typeof patternOrNegate === 'string') { pattern = patternOrNegate.trim(); } // Segments overload else { // Convert to pattern segments = segments || []; assert_1.default(segments.length, `Parameter 'segments' must not empty`); const root = Pattern.getLiteral(segments[0]); assert_1.default(root && pathHelper.hasAbsoluteRoot(root), `Parameter 'segments' first element must be a root path`); pattern = new internal_path_1.Path(segments).toString().trim(); if (patternOrNegate) { pattern = `!${pattern}`; } } // Negate while (pattern.startsWith('!')) { this.negate = !this.negate; pattern = pattern.substr(1).trim(); } // Normalize slashes and ensures absolute root pattern = Pattern.fixupPattern(pattern, homedir); // Segments this.segments = new internal_path_1.Path(pattern).segments; // Trailing slash indicates the pattern should only match directories, not regular files this.trailingSeparator = pathHelper .normalizeSeparators(pattern) .endsWith(path.sep); pattern = pathHelper.safeTrimTrailingSeparator(pattern); // Search path (literal path prior to the first glob segment) let foundGlob = false; const searchSegments = this.segments .map(x => Pattern.getLiteral(x)) .filter(x => !foundGlob && !(foundGlob = x === '')); this.searchPath = new internal_path_1.Path(searchSegments).toString(); // Root RegExp (required when determining partial match) this.rootRegExp = new RegExp(Pattern.regExpEscape(searchSegments[0]), IS_WINDOWS ? 'i' : ''); this.isImplicitPattern = isImplicitPattern; // Create minimatch const minimatchOptions = { dot: true, nobrace: true, nocase: IS_WINDOWS, nocomment: true, noext: true, nonegate: true }; pattern = IS_WINDOWS ? pattern.replace(/\\/g, '/') : pattern; this.minimatch = new minimatch_1.Minimatch(pattern, minimatchOptions); } /** * Matches the pattern against the specified path */ match(itemPath) { // Last segment is globstar? if (this.segments[this.segments.length - 1] === '**') { // Normalize slashes itemPath = pathHelper.normalizeSeparators(itemPath); // Append a trailing slash. Otherwise Minimatch will not match the directory immediately // preceding the globstar. For example, given the pattern `/foo/**`, Minimatch returns // false for `/foo` but returns true for `/foo/`. Append a trailing slash to handle that quirk. if (!itemPath.endsWith(path.sep) && this.isImplicitPattern === false) { // Note, this is safe because the constructor ensures the pattern has an absolute root. // For example, formats like C: and C:foo on Windows are resolved to an absolute root. itemPath = `${itemPath}${path.sep}`; } } else { // Normalize slashes and trim unnecessary trailing slash itemPath = pathHelper.safeTrimTrailingSeparator(itemPath); } // Match if (this.minimatch.match(itemPath)) { return this.trailingSeparator ? internal_match_kind_1.MatchKind.Directory : internal_match_kind_1.MatchKind.All; } return internal_match_kind_1.MatchKind.None; } /** * Indicates whether the pattern may match descendants of the specified path */ partialMatch(itemPath) { // Normalize slashes and trim unnecessary trailing slash itemPath = pathHelper.safeTrimTrailingSeparator(itemPath); // matchOne does not handle root path correctly if (pathHelper.dirname(itemPath) === itemPath) { return this.rootRegExp.test(itemPath); } return this.minimatch.matchOne(itemPath.split(IS_WINDOWS ? /\\+/ : /\/+/), this.minimatch.set[0], true); } /** * Escapes glob patterns within a path */ static globEscape(s) { return (IS_WINDOWS ? s : s.replace(/\\/g, '\\\\')) // escape '\' on Linux/macOS .replace(/(\[)(?=[^/]+\])/g, '[[]') // escape '[' when ']' follows within the path segment .replace(/\?/g, '[?]') // escape '?' .replace(/\*/g, '[*]'); // escape '*' } /** * Normalizes slashes and ensures absolute root */ static fixupPattern(pattern, homedir) { // Empty assert_1.default(pattern, 'pattern cannot be empty'); // Must not contain `.` segment, unless first segment // Must not contain `..` segment const literalSegments = new internal_path_1.Path(pattern).segments.map(x => Pattern.getLiteral(x)); assert_1.default(literalSegments.every((x, i) => (x !== '.' || i === 0) && x !== '..'), `Invalid pattern '${pattern}'. Relative pathing '.' and '..' is not allowed.`); // Must not contain globs in root, e.g. Windows UNC path \\foo\b*r assert_1.default(!pathHelper.hasRoot(pattern) || literalSegments[0], `Invalid pattern '${pattern}'. Root segment must not contain globs.`); // Normalize slashes pattern = pathHelper.normalizeSeparators(pattern); // Replace leading `.` segment if (pattern === '.' || pattern.startsWith(`.${path.sep}`)) { pattern = Pattern.globEscape(process.cwd()) + pattern.substr(1); } // Replace leading `~` segment else if (pattern === '~' || pattern.startsWith(`~${path.sep}`)) { homedir = homedir || os.homedir(); assert_1.default(homedir, 'Unable to determine HOME directory'); assert_1.default(pathHelper.hasAbsoluteRoot(homedir), `Expected HOME directory to be a rooted path. Actual '${homedir}'`); pattern = Pattern.globEscape(homedir) + pattern.substr(1); } // Replace relative drive root, e.g. pattern is C: or C:foo else if (IS_WINDOWS && (pattern.match(/^[A-Z]:$/i) || pattern.match(/^[A-Z]:[^\\]/i))) { let root = pathHelper.ensureAbsoluteRoot('C:\\dummy-root', pattern.substr(0, 2)); if (pattern.length > 2 && !root.endsWith('\\')) { root += '\\'; } pattern = Pattern.globEscape(root) + pattern.substr(2); } // Replace relative root, e.g. pattern is \ or \foo else if (IS_WINDOWS && (pattern === '\\' || pattern.match(/^\\[^\\]/))) { let root = pathHelper.ensureAbsoluteRoot('C:\\dummy-root', '\\'); if (!root.endsWith('\\')) { root += '\\'; } pattern = Pattern.globEscape(root) + pattern.substr(1); } // Otherwise ensure absolute root else { pattern = pathHelper.ensureAbsoluteRoot(Pattern.globEscape(process.cwd()), pattern); } return pathHelper.normalizeSeparators(pattern); } /** * Attempts to unescape a pattern segment to create a literal path segment. * Otherwise returns empty string. */ static getLiteral(segment) { let literal = ''; for (let i = 0; i < segment.length; i++) { const c = segment[i]; // Escape if (c === '\\' && !IS_WINDOWS && i + 1 < segment.length) { literal += segment[++i]; continue; } // Wildcard else if (c === '*' || c === '?') { return ''; } // Character set else if (c === '[' && i + 1 < segment.length) { let set = ''; let closed = -1; for (let i2 = i + 1; i2 < segment.length; i2++) { const c2 = segment[i2]; // Escape if (c2 === '\\' && !IS_WINDOWS && i2 + 1 < segment.length) { set += segment[++i2]; continue; } // Closed else if (c2 === ']') { closed = i2; break; } // Otherwise else { set += c2; } } // Closed? if (closed >= 0) { // Cannot convert if (set.length > 1) { return ''; } // Convert to literal if (set) { literal += set; i = closed; continue; } } // Otherwise fall thru } // Append literal += c; } return literal; } /** * Escapes regexp special characters * https://javascript.info/regexp-escaping */ static regExpEscape(s) { return s.replace(/[[\\^$.|?*+()]/g, '\\$&'); } } exports.Pattern = Pattern; //# sourceMappingURL=internal-pattern.js.map /***/ }), /***/ 9117: /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.SearchState = void 0; class SearchState { constructor(path, level) { this.path = path; this.level = level; } } exports.SearchState = SearchState; //# sourceMappingURL=internal-search-state.js.map /***/ }), /***/ 3702: /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); class BasicCredentialHandler { constructor(username, password) { this.username = username; this.password = password; } prepareRequest(options) { options.headers['Authorization'] = 'Basic ' + Buffer.from(this.username + ':' + this.password).toString('base64'); } // This handler cannot handle 401 canHandleAuthentication(response) { return false; } handleAuthentication(httpClient, requestInfo, objs) { return null; } } exports.BasicCredentialHandler = BasicCredentialHandler; class BearerCredentialHandler { constructor(token) { this.token = token; } // currently implements pre-authorization // TODO: support preAuth = false where it hooks on 401 prepareRequest(options) { options.headers['Authorization'] = 'Bearer ' + this.token; } // This handler cannot handle 401 canHandleAuthentication(response) { return false; } handleAuthentication(httpClient, requestInfo, objs) { return null; } } exports.BearerCredentialHandler = BearerCredentialHandler; class PersonalAccessTokenCredentialHandler { constructor(token) { this.token = token; } // currently implements pre-authorization // TODO: support preAuth = false where it hooks on 401 prepareRequest(options) { options.headers['Authorization'] = 'Basic ' + Buffer.from('PAT:' + this.token).toString('base64'); } // This handler cannot handle 401 canHandleAuthentication(response) { return false; } handleAuthentication(httpClient, requestInfo, objs) { return null; } } exports.PersonalAccessTokenCredentialHandler = PersonalAccessTokenCredentialHandler; /***/ }), /***/ 9925: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); const http = __nccwpck_require__(8605); const https = __nccwpck_require__(7211); const pm = __nccwpck_require__(6443); let tunnel; var HttpCodes; (function (HttpCodes) { HttpCodes[HttpCodes["OK"] = 200] = "OK"; HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests"; HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; })(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); var Headers; (function (Headers) { Headers["Accept"] = "accept"; Headers["ContentType"] = "content-type"; })(Headers = exports.Headers || (exports.Headers = {})); var MediaTypes; (function (MediaTypes) { MediaTypes["ApplicationJson"] = "application/json"; })(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {})); /** * Returns the proxy URL, depending upon the supplied url and proxy environment variables. * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com */ function getProxyUrl(serverUrl) { let proxyUrl = pm.getProxyUrl(new URL(serverUrl)); return proxyUrl ? proxyUrl.href : ''; } exports.getProxyUrl = getProxyUrl; const HttpRedirectCodes = [ HttpCodes.MovedPermanently, HttpCodes.ResourceMoved, HttpCodes.SeeOther, HttpCodes.TemporaryRedirect, HttpCodes.PermanentRedirect ]; const HttpResponseRetryCodes = [ HttpCodes.BadGateway, HttpCodes.ServiceUnavailable, HttpCodes.GatewayTimeout ]; const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; const ExponentialBackoffCeiling = 10; const ExponentialBackoffTimeSlice = 5; class HttpClientError extends Error { constructor(message, statusCode) { super(message); this.name = 'HttpClientError'; this.statusCode = statusCode; Object.setPrototypeOf(this, HttpClientError.prototype); } } exports.HttpClientError = HttpClientError; class HttpClientResponse { constructor(message) { this.message = message; } readBody() { return new Promise(async (resolve, reject) => { let output = Buffer.alloc(0); this.message.on('data', (chunk) => { output = Buffer.concat([output, chunk]); }); this.message.on('end', () => { resolve(output.toString()); }); }); } } exports.HttpClientResponse = HttpClientResponse; function isHttps(requestUrl) { let parsedUrl = new URL(requestUrl); return parsedUrl.protocol === 'https:'; } exports.isHttps = isHttps; class HttpClient { constructor(userAgent, handlers, requestOptions) { this._ignoreSslError = false; this._allowRedirects = true; this._allowRedirectDowngrade = false; this._maxRedirects = 50; this._allowRetries = false; this._maxRetries = 1; this._keepAlive = false; this._disposed = false; this.userAgent = userAgent; this.handlers = handlers || []; this.requestOptions = requestOptions; if (requestOptions) { if (requestOptions.ignoreSslError != null) { this._ignoreSslError = requestOptions.ignoreSslError; } this._socketTimeout = requestOptions.socketTimeout; if (requestOptions.allowRedirects != null) { this._allowRedirects = requestOptions.allowRedirects; } if (requestOptions.allowRedirectDowngrade != null) { this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade; } if (requestOptions.maxRedirects != null) { this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); } if (requestOptions.keepAlive != null) { this._keepAlive = requestOptions.keepAlive; } if (requestOptions.allowRetries != null) { this._allowRetries = requestOptions.allowRetries; } if (requestOptions.maxRetries != null) { this._maxRetries = requestOptions.maxRetries; } } } options(requestUrl, additionalHeaders) { return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); } get(requestUrl, additionalHeaders) { return this.request('GET', requestUrl, null, additionalHeaders || {}); } del(requestUrl, additionalHeaders) { return this.request('DELETE', requestUrl, null, additionalHeaders || {}); } post(requestUrl, data, additionalHeaders) { return this.request('POST', requestUrl, data, additionalHeaders || {}); } patch(requestUrl, data, additionalHeaders) { return this.request('PATCH', requestUrl, data, additionalHeaders || {}); } put(requestUrl, data, additionalHeaders) { return this.request('PUT', requestUrl, data, additionalHeaders || {}); } head(requestUrl, additionalHeaders) { return this.request('HEAD', requestUrl, null, additionalHeaders || {}); } sendStream(verb, requestUrl, stream, additionalHeaders) { return this.request(verb, requestUrl, stream, additionalHeaders); } /** * Gets a typed object from an endpoint * Be aware that not found returns a null. Other errors (4xx, 5xx) reject the promise */ async getJson(requestUrl, additionalHeaders = {}) { additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); let res = await this.get(requestUrl, additionalHeaders); return this._processResponse(res, this.requestOptions); } async postJson(requestUrl, obj, additionalHeaders = {}) { let data = JSON.stringify(obj, null, 2); additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); let res = await this.post(requestUrl, data, additionalHeaders); return this._processResponse(res, this.requestOptions); } async putJson(requestUrl, obj, additionalHeaders = {}) { let data = JSON.stringify(obj, null, 2); additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); let res = await this.put(requestUrl, data, additionalHeaders); return this._processResponse(res, this.requestOptions); } async patchJson(requestUrl, obj, additionalHeaders = {}) { let data = JSON.stringify(obj, null, 2); additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson); additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson); let res = await this.patch(requestUrl, data, additionalHeaders); return this._processResponse(res, this.requestOptions); } /** * Makes a raw http request. * All other methods such as get, post, patch, and request ultimately call this. * Prefer get, del, post and patch */ async request(verb, requestUrl, data, headers) { if (this._disposed) { throw new Error('Client has already been disposed.'); } let parsedUrl = new URL(requestUrl); let info = this._prepareRequest(verb, parsedUrl, headers); // Only perform retries on reads since writes may not be idempotent. let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1 ? this._maxRetries + 1 : 1; let numTries = 0; let response; while (numTries < maxTries) { response = await this.requestRaw(info, data); // Check if it's an authentication challenge if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) { let authenticationHandler; for (let i = 0; i < this.handlers.length; i++) { if (this.handlers[i].canHandleAuthentication(response)) { authenticationHandler = this.handlers[i]; break; } } if (authenticationHandler) { return authenticationHandler.handleAuthentication(this, info, data); } else { // We have received an unauthorized response but have no handlers to handle it. // Let the response return to the caller. return response; } } let redirectsRemaining = this._maxRedirects; while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 && this._allowRedirects && redirectsRemaining > 0) { const redirectUrl = response.message.headers['location']; if (!redirectUrl) { // if there's no location to redirect to, we won't break; } let parsedRedirectUrl = new URL(redirectUrl); if (parsedUrl.protocol == 'https:' && parsedUrl.protocol != parsedRedirectUrl.protocol && !this._allowRedirectDowngrade) { throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.'); } // we need to finish reading the response before reassigning response // which will leak the open socket. await response.readBody(); // strip authorization header if redirected to a different hostname if (parsedRedirectUrl.hostname !== parsedUrl.hostname) { for (let header in headers) { // header names are case insensitive if (header.toLowerCase() === 'authorization') { delete headers[header]; } } } // let's make the request with the new redirectUrl info = this._prepareRequest(verb, parsedRedirectUrl, headers); response = await this.requestRaw(info, data); redirectsRemaining--; } if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) { // If not a retry code, return immediately instead of retrying return response; } numTries += 1; if (numTries < maxTries) { await response.readBody(); await this._performExponentialBackoff(numTries); } } return response; } /** * Needs to be called if keepAlive is set to true in request options. */ dispose() { if (this._agent) { this._agent.destroy(); } this._disposed = true; } /** * Raw request. * @param info * @param data */ requestRaw(info, data) { return new Promise((resolve, reject) => { let callbackForResult = function (err, res) { if (err) { reject(err); } resolve(res); }; this.requestRawWithCallback(info, data, callbackForResult); }); } /** * Raw request with callback. * @param info * @param data * @param onResult */ requestRawWithCallback(info, data, onResult) { let socket; if (typeof data === 'string') { info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8'); } let callbackCalled = false; let handleResult = (err, res) => { if (!callbackCalled) { callbackCalled = true; onResult(err, res); } }; let req = info.httpModule.request(info.options, (msg) => { let res = new HttpClientResponse(msg); handleResult(null, res); }); req.on('socket', sock => { socket = sock; }); // If we ever get disconnected, we want the socket to timeout eventually req.setTimeout(this._socketTimeout || 3 * 60000, () => { if (socket) { socket.end(); } handleResult(new Error('Request timeout: ' + info.options.path), null); }); req.on('error', function (err) { // err has statusCode property // res should have headers handleResult(err, null); }); if (data && typeof data === 'string') { req.write(data, 'utf8'); } if (data && typeof data !== 'string') { data.on('close', function () { req.end(); }); data.pipe(req); } else { req.end(); } } /** * Gets an http agent. This function is useful when you need an http agent that handles * routing through a proxy server - depending upon the url and proxy environment variables. * @param serverUrl The server URL where the request will be sent. For example, https://api.github.com */ getAgent(serverUrl) { let parsedUrl = new URL(serverUrl); return this._getAgent(parsedUrl); } _prepareRequest(method, requestUrl, headers) { const info = {}; info.parsedUrl = requestUrl; const usingSsl = info.parsedUrl.protocol === 'https:'; info.httpModule = usingSsl ? https : http; const defaultPort = usingSsl ? 443 : 80; info.options = {}; info.options.host = info.parsedUrl.hostname; info.options.port = info.parsedUrl.port ? parseInt(info.parsedUrl.port) : defaultPort; info.options.path = (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); info.options.method = method; info.options.headers = this._mergeHeaders(headers); if (this.userAgent != null) { info.options.headers['user-agent'] = this.userAgent; } info.options.agent = this._getAgent(info.parsedUrl); // gives handlers an opportunity to participate if (this.handlers) { this.handlers.forEach(handler => { handler.prepareRequest(info.options); }); } return info; } _mergeHeaders(headers) { const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); if (this.requestOptions && this.requestOptions.headers) { return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers)); } return lowercaseKeys(headers || {}); } _getExistingOrDefaultHeader(additionalHeaders, header, _default) { const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {}); let clientHeader; if (this.requestOptions && this.requestOptions.headers) { clientHeader = lowercaseKeys(this.requestOptions.headers)[header]; } return additionalHeaders[header] || clientHeader || _default; } _getAgent(parsedUrl) { let agent; let proxyUrl = pm.getProxyUrl(parsedUrl); let useProxy = proxyUrl && proxyUrl.hostname; if (this._keepAlive && useProxy) { agent = this._proxyAgent; } if (this._keepAlive && !useProxy) { agent = this._agent; } // if agent is already assigned use that agent. if (!!agent) { return agent; } const usingSsl = parsedUrl.protocol === 'https:'; let maxSockets = 100; if (!!this.requestOptions) { maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; } if (useProxy) { // If using proxy, need tunnel if (!tunnel) { tunnel = __nccwpck_require__(4294); } const agentOptions = { maxSockets: maxSockets, keepAlive: this._keepAlive, proxy: { ...((proxyUrl.username || proxyUrl.password) && { proxyAuth: `${proxyUrl.username}:${proxyUrl.password}` }), host: proxyUrl.hostname, port: proxyUrl.port } }; let tunnelAgent; const overHttps = proxyUrl.protocol === 'https:'; if (usingSsl) { tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; } else { tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; } agent = tunnelAgent(agentOptions); this._proxyAgent = agent; } // if reusing agent across request and tunneling agent isn't assigned create a new agent if (this._keepAlive && !agent) { const options = { keepAlive: this._keepAlive, maxSockets: maxSockets }; agent = usingSsl ? new https.Agent(options) : new http.Agent(options); this._agent = agent; } // if not using private agent and tunnel agent isn't setup then use global agent if (!agent) { agent = usingSsl ? https.globalAgent : http.globalAgent; } if (usingSsl && this._ignoreSslError) { // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options // we have to cast it to any and change it directly agent.options = Object.assign(agent.options || {}, { rejectUnauthorized: false }); } return agent; } _performExponentialBackoff(retryNumber) { retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); return new Promise(resolve => setTimeout(() => resolve(), ms)); } static dateTimeDeserializer(key, value) { if (typeof value === 'string') { let a = new Date(value); if (!isNaN(a.valueOf())) { return a; } } return value; } async _processResponse(res, options) { return new Promise(async (resolve, reject) => { const statusCode = res.message.statusCode; const response = { statusCode: statusCode, result: null, headers: {} }; // not found leads to null obj returned if (statusCode == HttpCodes.NotFound) { resolve(response); } let obj; let contents; // get the result from the body try { contents = await res.readBody(); if (contents && contents.length > 0) { if (options && options.deserializeDates) { obj = JSON.parse(contents, HttpClient.dateTimeDeserializer); } else { obj = JSON.parse(contents); } response.result = obj; } response.headers = res.message.headers; } catch (err) { // Invalid resource (contents not json); leaving result obj null } // note that 3xx redirects are handled by the http layer. if (statusCode > 299) { let msg; // if exception/error in body, attempt to get better error if (obj && obj.message) { msg = obj.message; } else if (contents && contents.length > 0) { // it may be the case that the exception is in the body message as string msg = contents; } else { msg = 'Failed request: (' + statusCode + ')'; } let err = new HttpClientError(msg, statusCode); err.result = response.result; reject(err); } else { resolve(response); } }); } } exports.HttpClient = HttpClient; /***/ }), /***/ 6443: /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function getProxyUrl(reqUrl) { let usingSsl = reqUrl.protocol === 'https:'; let proxyUrl; if (checkBypass(reqUrl)) { return proxyUrl; } let proxyVar; if (usingSsl) { proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY']; } else { proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY']; } if (proxyVar) { proxyUrl = new URL(proxyVar); } return proxyUrl; } exports.getProxyUrl = getProxyUrl; function checkBypass(reqUrl) { if (!reqUrl.hostname) { return false; } let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || ''; if (!noProxy) { return false; } // Determine the request port let reqPort; if (reqUrl.port) { reqPort = Number(reqUrl.port); } else if (reqUrl.protocol === 'http:') { reqPort = 80; } else if (reqUrl.protocol === 'https:') { reqPort = 443; } // Format the request hostname and hostname with port let upperReqHosts = [reqUrl.hostname.toUpperCase()]; if (typeof reqPort === 'number') { upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`); } // Compare request host against noproxy for (let upperNoProxyItem of noProxy .split(',') .map(x => x.trim().toUpperCase()) .filter(x => x)) { if (upperReqHosts.some(x => x === upperNoProxyItem)) { return true; } } return false; } exports.checkBypass = checkBypass; /***/ }), /***/ 1962: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var _a; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getCmdPath = exports.tryGetExecutablePath = exports.isRooted = exports.isDirectory = exports.exists = exports.IS_WINDOWS = exports.unlink = exports.symlink = exports.stat = exports.rmdir = exports.rename = exports.readlink = exports.readdir = exports.mkdir = exports.lstat = exports.copyFile = exports.chmod = void 0; const fs = __importStar(__nccwpck_require__(5747)); const path = __importStar(__nccwpck_require__(5622)); _a = fs.promises, exports.chmod = _a.chmod, exports.copyFile = _a.copyFile, exports.lstat = _a.lstat, exports.mkdir = _a.mkdir, exports.readdir = _a.readdir, exports.readlink = _a.readlink, exports.rename = _a.rename, exports.rmdir = _a.rmdir, exports.stat = _a.stat, exports.symlink = _a.symlink, exports.unlink = _a.unlink; exports.IS_WINDOWS = process.platform === 'win32'; function exists(fsPath) { return __awaiter(this, void 0, void 0, function* () { try { yield exports.stat(fsPath); } catch (err) { if (err.code === 'ENOENT') { return false; } throw err; } return true; }); } exports.exists = exists; function isDirectory(fsPath, useStat = false) { return __awaiter(this, void 0, void 0, function* () { const stats = useStat ? yield exports.stat(fsPath) : yield exports.lstat(fsPath); return stats.isDirectory(); }); } exports.isDirectory = isDirectory; /** * On OSX/Linux, true if path starts with '/'. On Windows, true for paths like: * \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases). */ function isRooted(p) { p = normalizeSeparators(p); if (!p) { throw new Error('isRooted() parameter "p" cannot be empty'); } if (exports.IS_WINDOWS) { return (p.startsWith('\\') || /^[A-Z]:/i.test(p) // e.g. \ or \hello or \\hello ); // e.g. C: or C:\hello } return p.startsWith('/'); } exports.isRooted = isRooted; /** * Best effort attempt to determine whether a file exists and is executable. * @param filePath file path to check * @param extensions additional file extensions to try * @return if file exists and is executable, returns the file path. otherwise empty string. */ function tryGetExecutablePath(filePath, extensions) { return __awaiter(this, void 0, void 0, function* () { let stats = undefined; try { // test file exists stats = yield exports.stat(filePath); } catch (err) { if (err.code !== 'ENOENT') { // eslint-disable-next-line no-console console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); } } if (stats && stats.isFile()) { if (exports.IS_WINDOWS) { // on Windows, test for valid extension const upperExt = path.extname(filePath).toUpperCase(); if (extensions.some(validExt => validExt.toUpperCase() === upperExt)) { return filePath; } } else { if (isUnixExecutable(stats)) { return filePath; } } } // try each extension const originalFilePath = filePath; for (const extension of extensions) { filePath = originalFilePath + extension; stats = undefined; try { stats = yield exports.stat(filePath); } catch (err) { if (err.code !== 'ENOENT') { // eslint-disable-next-line no-console console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); } } if (stats && stats.isFile()) { if (exports.IS_WINDOWS) { // preserve the case of the actual file (since an extension was appended) try { const directory = path.dirname(filePath); const upperName = path.basename(filePath).toUpperCase(); for (const actualName of yield exports.readdir(directory)) { if (upperName === actualName.toUpperCase()) { filePath = path.join(directory, actualName); break; } } } catch (err) { // eslint-disable-next-line no-console console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`); } return filePath; } else { if (isUnixExecutable(stats)) { return filePath; } } } } return ''; }); } exports.tryGetExecutablePath = tryGetExecutablePath; function normalizeSeparators(p) { p = p || ''; if (exports.IS_WINDOWS) { // convert slashes on Windows p = p.replace(/\//g, '\\'); // remove redundant slashes return p.replace(/\\\\+/g, '\\'); } // remove redundant slashes return p.replace(/\/\/+/g, '/'); } // on Mac/Linux, test the execute bit // R W X R W X R W X // 256 128 64 32 16 8 4 2 1 function isUnixExecutable(stats) { return ((stats.mode & 1) > 0 || ((stats.mode & 8) > 0 && stats.gid === process.getgid()) || ((stats.mode & 64) > 0 && stats.uid === process.getuid())); } // Get the path of cmd.exe in windows function getCmdPath() { var _a; return (_a = process.env['COMSPEC']) !== null && _a !== void 0 ? _a : `cmd.exe`; } exports.getCmdPath = getCmdPath; //# sourceMappingURL=io-util.js.map /***/ }), /***/ 7436: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.findInPath = exports.which = exports.mkdirP = exports.rmRF = exports.mv = exports.cp = void 0; const assert_1 = __nccwpck_require__(2357); const childProcess = __importStar(__nccwpck_require__(3129)); const path = __importStar(__nccwpck_require__(5622)); const util_1 = __nccwpck_require__(1669); const ioUtil = __importStar(__nccwpck_require__(1962)); const exec = util_1.promisify(childProcess.exec); const execFile = util_1.promisify(childProcess.execFile); /** * Copies a file or folder. * Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js * * @param source source path * @param dest destination path * @param options optional. See CopyOptions. */ function cp(source, dest, options = {}) { return __awaiter(this, void 0, void 0, function* () { const { force, recursive, copySourceDirectory } = readCopyOptions(options); const destStat = (yield ioUtil.exists(dest)) ? yield ioUtil.stat(dest) : null; // Dest is an existing file, but not forcing if (destStat && destStat.isFile() && !force) { return; } // If dest is an existing directory, should copy inside. const newDest = destStat && destStat.isDirectory() && copySourceDirectory ? path.join(dest, path.basename(source)) : dest; if (!(yield ioUtil.exists(source))) { throw new Error(`no such file or directory: ${source}`); } const sourceStat = yield ioUtil.stat(source); if (sourceStat.isDirectory()) { if (!recursive) { throw new Error(`Failed to copy. ${source} is a directory, but tried to copy without recursive flag.`); } else { yield cpDirRecursive(source, newDest, 0, force); } } else { if (path.relative(source, newDest) === '') { // a file cannot be copied to itself throw new Error(`'${newDest}' and '${source}' are the same file`); } yield copyFile(source, newDest, force); } }); } exports.cp = cp; /** * Moves a path. * * @param source source path * @param dest destination path * @param options optional. See MoveOptions. */ function mv(source, dest, options = {}) { return __awaiter(this, void 0, void 0, function* () { if (yield ioUtil.exists(dest)) { let destExists = true; if (yield ioUtil.isDirectory(dest)) { // If dest is directory copy src into dest dest = path.join(dest, path.basename(source)); destExists = yield ioUtil.exists(dest); } if (destExists) { if (options.force == null || options.force) { yield rmRF(dest); } else { throw new Error('Destination already exists'); } } } yield mkdirP(path.dirname(dest)); yield ioUtil.rename(source, dest); }); } exports.mv = mv; /** * Remove a path recursively with force * * @param inputPath path to remove */ function rmRF(inputPath) { return __awaiter(this, void 0, void 0, function* () { if (ioUtil.IS_WINDOWS) { // Node doesn't provide a delete operation, only an unlink function. This means that if the file is being used by another // program (e.g. antivirus), it won't be deleted. To address this, we shell out the work to rd/del. // Check for invalid characters // https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file if (/[*"<>|]/.test(inputPath)) { throw new Error('File path must not contain `*`, `"`, `<`, `>` or `|` on Windows'); } try { const cmdPath = ioUtil.getCmdPath(); if (yield ioUtil.isDirectory(inputPath, true)) { yield exec(`${cmdPath} /s /c "rd /s /q "%inputPath%""`, { env: { inputPath } }); } else { yield exec(`${cmdPath} /s /c "del /f /a "%inputPath%""`, { env: { inputPath } }); } } catch (err) { // if you try to delete a file that doesn't exist, desired result is achieved // other errors are valid if (err.code !== 'ENOENT') throw err; } // Shelling out fails to remove a symlink folder with missing source, this unlink catches that try { yield ioUtil.unlink(inputPath); } catch (err) { // if you try to delete a file that doesn't exist, desired result is achieved // other errors are valid if (err.code !== 'ENOENT') throw err; } } else { let isDir = false; try { isDir = yield ioUtil.isDirectory(inputPath); } catch (err) { // if you try to delete a file that doesn't exist, desired result is achieved // other errors are valid if (err.code !== 'ENOENT') throw err; return; } if (isDir) { yield execFile(`rm`, [`-rf`, `${inputPath}`]); } else { yield ioUtil.unlink(inputPath); } } }); } exports.rmRF = rmRF; /** * Make a directory. Creates the full path with folders in between * Will throw if it fails * * @param fsPath path to create * @returns Promise */ function mkdirP(fsPath) { return __awaiter(this, void 0, void 0, function* () { assert_1.ok(fsPath, 'a path argument must be provided'); yield ioUtil.mkdir(fsPath, { recursive: true }); }); } exports.mkdirP = mkdirP; /** * Returns path of a tool had the tool actually been invoked. Resolves via paths. * If you check and the tool does not exist, it will throw. * * @param tool name of the tool * @param check whether to check if tool exists * @returns Promise path to tool */ function which(tool, check) { return __awaiter(this, void 0, void 0, function* () { if (!tool) { throw new Error("parameter 'tool' is required"); } // recursive when check=true if (check) { const result = yield which(tool, false); if (!result) { if (ioUtil.IS_WINDOWS) { throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`); } else { throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`); } } return result; } const matches = yield findInPath(tool); if (matches && matches.length > 0) { return matches[0]; } return ''; }); } exports.which = which; /** * Returns a list of all occurrences of the given tool on the system path. * * @returns Promise the paths of the tool */ function findInPath(tool) { return __awaiter(this, void 0, void 0, function* () { if (!tool) { throw new Error("parameter 'tool' is required"); } // build the list of extensions to try const extensions = []; if (ioUtil.IS_WINDOWS && process.env['PATHEXT']) { for (const extension of process.env['PATHEXT'].split(path.delimiter)) { if (extension) { extensions.push(extension); } } } // if it's rooted, return it if exists. otherwise return empty. if (ioUtil.isRooted(tool)) { const filePath = yield ioUtil.tryGetExecutablePath(tool, extensions); if (filePath) { return [filePath]; } return []; } // if any path separators, return empty if (tool.includes(path.sep)) { return []; } // build the list of directories // // Note, technically "where" checks the current directory on Windows. From a toolkit perspective, // it feels like we should not do this. Checking the current directory seems like more of a use // case of a shell, and the which() function exposed by the toolkit should strive for consistency // across platforms. const directories = []; if (process.env.PATH) { for (const p of process.env.PATH.split(path.delimiter)) { if (p) { directories.push(p); } } } // find all matches const matches = []; for (const directory of directories) { const filePath = yield ioUtil.tryGetExecutablePath(path.join(directory, tool), extensions); if (filePath) { matches.push(filePath); } } return matches; }); } exports.findInPath = findInPath; function readCopyOptions(options) { const force = options.force == null ? true : options.force; const recursive = Boolean(options.recursive); const copySourceDirectory = options.copySourceDirectory == null ? true : Boolean(options.copySourceDirectory); return { force, recursive, copySourceDirectory }; } function cpDirRecursive(sourceDir, destDir, currentDepth, force) { return __awaiter(this, void 0, void 0, function* () { // Ensure there is not a run away recursive copy if (currentDepth >= 255) return; currentDepth++; yield mkdirP(destDir); const files = yield ioUtil.readdir(sourceDir); for (const fileName of files) { const srcFile = `${sourceDir}/${fileName}`; const destFile = `${destDir}/${fileName}`; const srcFileStat = yield ioUtil.lstat(srcFile); if (srcFileStat.isDirectory()) { // Recurse yield cpDirRecursive(srcFile, destFile, currentDepth, force); } else { yield copyFile(srcFile, destFile, force); } } // Change the mode for the newly created directory yield ioUtil.chmod(destDir, (yield ioUtil.stat(sourceDir)).mode); }); } // Buffered file copy function copyFile(srcFile, destFile, force) { return __awaiter(this, void 0, void 0, function* () { if ((yield ioUtil.lstat(srcFile)).isSymbolicLink()) { // unlink/re-link it try { yield ioUtil.lstat(destFile); yield ioUtil.unlink(destFile); } catch (e) { // Try to override file permission if (e.code === 'EPERM') { yield ioUtil.chmod(destFile, '0666'); yield ioUtil.unlink(destFile); } // other errors = it doesn't exist, no work to do } // Copy over symlink const symlinkFull = yield ioUtil.readlink(srcFile); yield ioUtil.symlink(symlinkFull, destFile, ioUtil.IS_WINDOWS ? 'junction' : null); } else if (!(yield ioUtil.exists(destFile)) || force) { yield ioUtil.copyFile(srcFile, destFile); } }); } //# sourceMappingURL=io.js.map /***/ }), /***/ 2473: /***/ (function(module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports._readLinuxVersionFile = exports._getOsVersion = exports._findMatch = void 0; const semver = __importStar(__nccwpck_require__(5911)); const core_1 = __nccwpck_require__(2186); // needs to be require for core node modules to be mocked /* eslint @typescript-eslint/no-require-imports: 0 */ const os = __nccwpck_require__(2087); const cp = __nccwpck_require__(3129); const fs = __nccwpck_require__(5747); function _findMatch(versionSpec, stable, candidates, archFilter) { return __awaiter(this, void 0, void 0, function* () { const platFilter = os.platform(); let result; let match; let file; for (const candidate of candidates) { const version = candidate.version; core_1.debug(`check ${version} satisfies ${versionSpec}`); if (semver.satisfies(version, versionSpec) && (!stable || candidate.stable === stable)) { file = candidate.files.find(item => { core_1.debug(`${item.arch}===${archFilter} && ${item.platform}===${platFilter}`); let chk = item.arch === archFilter && item.platform === platFilter; if (chk && item.platform_version) { const osVersion = module.exports._getOsVersion(); if (osVersion === item.platform_version) { chk = true; } else { chk = semver.satisfies(osVersion, item.platform_version); } } return chk; }); if (file) { core_1.debug(`matched ${candidate.version}`); match = candidate; break; } } } if (match && file) { // clone since we're mutating the file list to be only the file that matches result = Object.assign({}, match); result.files = [file]; } return result; }); } exports._findMatch = _findMatch; function _getOsVersion() { // TODO: add windows and other linux, arm variants // right now filtering on version is only an ubuntu and macos scenario for tools we build for hosted (python) const plat = os.platform(); let version = ''; if (plat === 'darwin') { version = cp.execSync('sw_vers -productVersion').toString(); } else if (plat === 'linux') { // lsb_release process not in some containers, readfile // Run cat /etc/lsb-release // DISTRIB_ID=Ubuntu // DISTRIB_RELEASE=18.04 // DISTRIB_CODENAME=bionic // DISTRIB_DESCRIPTION="Ubuntu 18.04.4 LTS" const lsbContents = module.exports._readLinuxVersionFile(); if (lsbContents) { const lines = lsbContents.split('\n'); for (const line of lines) { const parts = line.split('='); if (parts.length === 2 && (parts[0].trim() === 'VERSION_ID' || parts[0].trim() === 'DISTRIB_RELEASE')) { version = parts[1] .trim() .replace(/^"/, '') .replace(/"$/, ''); break; } } } } return version; } exports._getOsVersion = _getOsVersion; function _readLinuxVersionFile() { const lsbReleaseFile = '/etc/lsb-release'; const osReleaseFile = '/etc/os-release'; let contents = ''; if (fs.existsSync(lsbReleaseFile)) { contents = fs.readFileSync(lsbReleaseFile).toString(); } else if (fs.existsSync(osReleaseFile)) { contents = fs.readFileSync(osReleaseFile).toString(); } return contents; } exports._readLinuxVersionFile = _readLinuxVersionFile; //# sourceMappingURL=manifest.js.map /***/ }), /***/ 8279: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.RetryHelper = void 0; const core = __importStar(__nccwpck_require__(2186)); /** * Internal class for retries */ class RetryHelper { constructor(maxAttempts, minSeconds, maxSeconds) { if (maxAttempts < 1) { throw new Error('max attempts should be greater than or equal to 1'); } this.maxAttempts = maxAttempts; this.minSeconds = Math.floor(minSeconds); this.maxSeconds = Math.floor(maxSeconds); if (this.minSeconds > this.maxSeconds) { throw new Error('min seconds should be less than or equal to max seconds'); } } execute(action, isRetryable) { return __awaiter(this, void 0, void 0, function* () { let attempt = 1; while (attempt < this.maxAttempts) { // Try try { return yield action(); } catch (err) { if (isRetryable && !isRetryable(err)) { throw err; } core.info(err.message); } // Sleep const seconds = this.getSleepAmount(); core.info(`Waiting ${seconds} seconds before trying again`); yield this.sleep(seconds); attempt++; } // Last attempt return yield action(); }); } getSleepAmount() { return (Math.floor(Math.random() * (this.maxSeconds - this.minSeconds + 1)) + this.minSeconds); } sleep(seconds) { return __awaiter(this, void 0, void 0, function* () { return new Promise(resolve => setTimeout(resolve, seconds * 1000)); }); } } exports.RetryHelper = RetryHelper; //# sourceMappingURL=retry-helper.js.map /***/ }), /***/ 7784: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.evaluateVersions = exports.isExplicitVersion = exports.findFromManifest = exports.getManifestFromRepo = exports.findAllVersions = exports.find = exports.cacheFile = exports.cacheDir = exports.extractZip = exports.extractXar = exports.extractTar = exports.extract7z = exports.downloadTool = exports.HTTPError = void 0; const core = __importStar(__nccwpck_require__(2186)); const io = __importStar(__nccwpck_require__(7436)); const fs = __importStar(__nccwpck_require__(5747)); const mm = __importStar(__nccwpck_require__(2473)); const os = __importStar(__nccwpck_require__(2087)); const path = __importStar(__nccwpck_require__(5622)); const httpm = __importStar(__nccwpck_require__(9925)); const semver = __importStar(__nccwpck_require__(5911)); const stream = __importStar(__nccwpck_require__(2413)); const util = __importStar(__nccwpck_require__(1669)); const v4_1 = __importDefault(__nccwpck_require__(824)); const exec_1 = __nccwpck_require__(1514); const assert_1 = __nccwpck_require__(2357); const retry_helper_1 = __nccwpck_require__(8279); class HTTPError extends Error { constructor(httpStatusCode) { super(`Unexpected HTTP response: ${httpStatusCode}`); this.httpStatusCode = httpStatusCode; Object.setPrototypeOf(this, new.target.prototype); } } exports.HTTPError = HTTPError; const IS_WINDOWS = process.platform === 'win32'; const IS_MAC = process.platform === 'darwin'; const userAgent = 'actions/tool-cache'; /** * Download a tool from an url and stream it into a file * * @param url url of tool to download * @param dest path to download tool * @param auth authorization header * @param headers other headers * @returns path to downloaded tool */ function downloadTool(url, dest, auth, headers) { return __awaiter(this, void 0, void 0, function* () { dest = dest || path.join(_getTempDirectory(), v4_1.default()); yield io.mkdirP(path.dirname(dest)); core.debug(`Downloading ${url}`); core.debug(`Destination ${dest}`); const maxAttempts = 3; const minSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MIN_SECONDS', 10); const maxSeconds = _getGlobal('TEST_DOWNLOAD_TOOL_RETRY_MAX_SECONDS', 20); const retryHelper = new retry_helper_1.RetryHelper(maxAttempts, minSeconds, maxSeconds); return yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () { return yield downloadToolAttempt(url, dest || '', auth, headers); }), (err) => { if (err instanceof HTTPError && err.httpStatusCode) { // Don't retry anything less than 500, except 408 Request Timeout and 429 Too Many Requests if (err.httpStatusCode < 500 && err.httpStatusCode !== 408 && err.httpStatusCode !== 429) { return false; } } // Otherwise retry return true; }); }); } exports.downloadTool = downloadTool; function downloadToolAttempt(url, dest, auth, headers) { return __awaiter(this, void 0, void 0, function* () { if (fs.existsSync(dest)) { throw new Error(`Destination file path ${dest} already exists`); } // Get the response headers const http = new httpm.HttpClient(userAgent, [], { allowRetries: false }); if (auth) { core.debug('set auth'); if (headers === undefined) { headers = {}; } headers.authorization = auth; } const response = yield http.get(url, headers); if (response.message.statusCode !== 200) { const err = new HTTPError(response.message.statusCode); core.debug(`Failed to download from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); throw err; } // Download the response body const pipeline = util.promisify(stream.pipeline); const responseMessageFactory = _getGlobal('TEST_DOWNLOAD_TOOL_RESPONSE_MESSAGE_FACTORY', () => response.message); const readStream = responseMessageFactory(); let succeeded = false; try { yield pipeline(readStream, fs.createWriteStream(dest)); core.debug('download complete'); succeeded = true; return dest; } finally { // Error, delete dest before retry if (!succeeded) { core.debug('download failed'); try { yield io.rmRF(dest); } catch (err) { core.debug(`Failed to delete '${dest}'. ${err.message}`); } } } }); } /** * Extract a .7z file * * @param file path to the .7z file * @param dest destination directory. Optional. * @param _7zPath path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this * problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will * gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is * bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line * interface, it is smaller than the full command line interface, and it does support long paths. At the * time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website. * Be sure to check the current license agreement. If 7zr.exe is bundled with your action, then the path * to 7zr.exe can be pass to this function. * @returns path to the destination directory */ function extract7z(file, dest, _7zPath) { return __awaiter(this, void 0, void 0, function* () { assert_1.ok(IS_WINDOWS, 'extract7z() not supported on current OS'); assert_1.ok(file, 'parameter "file" is required'); dest = yield _createExtractFolder(dest); const originalCwd = process.cwd(); process.chdir(dest); if (_7zPath) { try { const logLevel = core.isDebug() ? '-bb1' : '-bb0'; const args = [ 'x', logLevel, '-bd', '-sccUTF-8', file ]; const options = { silent: true }; yield exec_1.exec(`"${_7zPath}"`, args, options); } finally { process.chdir(originalCwd); } } else { const escapedScript = path .join(__dirname, '..', 'scripts', 'Invoke-7zdec.ps1') .replace(/'/g, "''") .replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); const escapedTarget = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); const command = `& '${escapedScript}' -Source '${escapedFile}' -Target '${escapedTarget}'`; const args = [ '-NoLogo', '-Sta', '-NoProfile', '-NonInteractive', '-ExecutionPolicy', 'Unrestricted', '-Command', command ]; const options = { silent: true }; try { const powershellPath = yield io.which('powershell', true); yield exec_1.exec(`"${powershellPath}"`, args, options); } finally { process.chdir(originalCwd); } } return dest; }); } exports.extract7z = extract7z; /** * Extract a compressed tar archive * * @param file path to the tar * @param dest destination directory. Optional. * @param flags flags for the tar command to use for extraction. Defaults to 'xz' (extracting gzipped tars). Optional. * @returns path to the destination directory */ function extractTar(file, dest, flags = 'xz') { return __awaiter(this, void 0, void 0, function* () { if (!file) { throw new Error("parameter 'file' is required"); } // Create dest dest = yield _createExtractFolder(dest); // Determine whether GNU tar core.debug('Checking tar --version'); let versionOutput = ''; yield exec_1.exec('tar --version', [], { ignoreReturnCode: true, silent: true, listeners: { stdout: (data) => (versionOutput += data.toString()), stderr: (data) => (versionOutput += data.toString()) } }); core.debug(versionOutput.trim()); const isGnuTar = versionOutput.toUpperCase().includes('GNU TAR'); // Initialize args let args; if (flags instanceof Array) { args = flags; } else { args = [flags]; } if (core.isDebug() && !flags.includes('v')) { args.push('-v'); } let destArg = dest; let fileArg = file; if (IS_WINDOWS && isGnuTar) { args.push('--force-local'); destArg = dest.replace(/\\/g, '/'); // Technically only the dest needs to have `/` but for aesthetic consistency // convert slashes in the file arg too. fileArg = file.replace(/\\/g, '/'); } if (isGnuTar) { // Suppress warnings when using GNU tar to extract archives created by BSD tar args.push('--warning=no-unknown-keyword'); args.push('--overwrite'); } args.push('-C', destArg, '-f', fileArg); yield exec_1.exec(`tar`, args); return dest; }); } exports.extractTar = extractTar; /** * Extract a xar compatible archive * * @param file path to the archive * @param dest destination directory. Optional. * @param flags flags for the xar. Optional. * @returns path to the destination directory */ function extractXar(file, dest, flags = []) { return __awaiter(this, void 0, void 0, function* () { assert_1.ok(IS_MAC, 'extractXar() not supported on current OS'); assert_1.ok(file, 'parameter "file" is required'); dest = yield _createExtractFolder(dest); let args; if (flags instanceof Array) { args = flags; } else { args = [flags]; } args.push('-x', '-C', dest, '-f', file); if (core.isDebug()) { args.push('-v'); } const xarPath = yield io.which('xar', true); yield exec_1.exec(`"${xarPath}"`, _unique(args)); return dest; }); } exports.extractXar = extractXar; /** * Extract a zip * * @param file path to the zip * @param dest destination directory. Optional. * @returns path to the destination directory */ function extractZip(file, dest) { return __awaiter(this, void 0, void 0, function* () { if (!file) { throw new Error("parameter 'file' is required"); } dest = yield _createExtractFolder(dest); if (IS_WINDOWS) { yield extractZipWin(file, dest); } else { yield extractZipNix(file, dest); } return dest; }); } exports.extractZip = extractZip; function extractZipWin(file, dest) { return __awaiter(this, void 0, void 0, function* () { // build the powershell command const escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines const escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); const pwshPath = yield io.which('pwsh', false); //To match the file overwrite behavior on nix systems, we use the overwrite = true flag for ExtractToDirectory //and the -Force flag for Expand-Archive as a fallback if (pwshPath) { //attempt to use pwsh with ExtractToDirectory, if this fails attempt Expand-Archive const pwshCommand = [ `$ErrorActionPreference = 'Stop' ;`, `try { Add-Type -AssemblyName System.IO.Compression.ZipFile } catch { } ;`, `try { [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}', $true) }`, `catch { if (($_.Exception.GetType().FullName -eq 'System.Management.Automation.MethodException') -or ($_.Exception.GetType().FullName -eq 'System.Management.Automation.RuntimeException') ){ Expand-Archive -LiteralPath '${escapedFile}' -DestinationPath '${escapedDest}' -Force } else { throw $_ } } ;` ].join(' '); const args = [ '-NoLogo', '-NoProfile', '-NonInteractive', '-ExecutionPolicy', 'Unrestricted', '-Command', pwshCommand ]; core.debug(`Using pwsh at path: ${pwshPath}`); yield exec_1.exec(`"${pwshPath}"`, args); } else { const powershellCommand = [ `$ErrorActionPreference = 'Stop' ;`, `try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ;`, `if ((Get-Command -Name Expand-Archive -Module Microsoft.PowerShell.Archive -ErrorAction Ignore)) { Expand-Archive -LiteralPath '${escapedFile}' -DestinationPath '${escapedDest}' -Force }`, `else {[System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}', $true) }` ].join(' '); const args = [ '-NoLogo', '-Sta', '-NoProfile', '-NonInteractive', '-ExecutionPolicy', 'Unrestricted', '-Command', powershellCommand ]; const powershellPath = yield io.which('powershell', true); core.debug(`Using powershell at path: ${powershellPath}`); yield exec_1.exec(`"${powershellPath}"`, args); } }); } function extractZipNix(file, dest) { return __awaiter(this, void 0, void 0, function* () { const unzipPath = yield io.which('unzip', true); const args = [file]; if (!core.isDebug()) { args.unshift('-q'); } args.unshift('-o'); //overwrite with -o, otherwise a prompt is shown which freezes the run yield exec_1.exec(`"${unzipPath}"`, args, { cwd: dest }); }); } /** * Caches a directory and installs it into the tool cacheDir * * @param sourceDir the directory to cache into tools * @param tool tool name * @param version version of the tool. semver format * @param arch architecture of the tool. Optional. Defaults to machine architecture */ function cacheDir(sourceDir, tool, version, arch) { return __awaiter(this, void 0, void 0, function* () { version = semver.clean(version) || version; arch = arch || os.arch(); core.debug(`Caching tool ${tool} ${version} ${arch}`); core.debug(`source dir: ${sourceDir}`); if (!fs.statSync(sourceDir).isDirectory()) { throw new Error('sourceDir is not a directory'); } // Create the tool dir const destPath = yield _createToolPath(tool, version, arch); // copy each child item. do not move. move can fail on Windows // due to anti-virus software having an open handle on a file. for (const itemName of fs.readdirSync(sourceDir)) { const s = path.join(sourceDir, itemName); yield io.cp(s, destPath, { recursive: true }); } // write .complete _completeToolPath(tool, version, arch); return destPath; }); } exports.cacheDir = cacheDir; /** * Caches a downloaded file (GUID) and installs it * into the tool cache with a given targetName * * @param sourceFile the file to cache into tools. Typically a result of downloadTool which is a guid. * @param targetFile the name of the file name in the tools directory * @param tool tool name * @param version version of the tool. semver format * @param arch architecture of the tool. Optional. Defaults to machine architecture */ function cacheFile(sourceFile, targetFile, tool, version, arch) { return __awaiter(this, void 0, void 0, function* () { version = semver.clean(version) || version; arch = arch || os.arch(); core.debug(`Caching tool ${tool} ${version} ${arch}`); core.debug(`source file: ${sourceFile}`); if (!fs.statSync(sourceFile).isFile()) { throw new Error('sourceFile is not a file'); } // create the tool dir const destFolder = yield _createToolPath(tool, version, arch); // copy instead of move. move can fail on Windows due to // anti-virus software having an open handle on a file. const destPath = path.join(destFolder, targetFile); core.debug(`destination file ${destPath}`); yield io.cp(sourceFile, destPath); // write .complete _completeToolPath(tool, version, arch); return destFolder; }); } exports.cacheFile = cacheFile; /** * Finds the path to a tool version in the local installed tool cache * * @param toolName name of the tool * @param versionSpec version of the tool * @param arch optional arch. defaults to arch of computer */ function find(toolName, versionSpec, arch) { if (!toolName) { throw new Error('toolName parameter is required'); } if (!versionSpec) { throw new Error('versionSpec parameter is required'); } arch = arch || os.arch(); // attempt to resolve an explicit version if (!isExplicitVersion(versionSpec)) { const localVersions = findAllVersions(toolName, arch); const match = evaluateVersions(localVersions, versionSpec); versionSpec = match; } // check for the explicit version in the cache let toolPath = ''; if (versionSpec) { versionSpec = semver.clean(versionSpec) || ''; const cachePath = path.join(_getCacheDirectory(), toolName, versionSpec, arch); core.debug(`checking cache: ${cachePath}`); if (fs.existsSync(cachePath) && fs.existsSync(`${cachePath}.complete`)) { core.debug(`Found tool in cache ${toolName} ${versionSpec} ${arch}`); toolPath = cachePath; } else { core.debug('not found'); } } return toolPath; } exports.find = find; /** * Finds the paths to all versions of a tool that are installed in the local tool cache * * @param toolName name of the tool * @param arch optional arch. defaults to arch of computer */ function findAllVersions(toolName, arch) { const versions = []; arch = arch || os.arch(); const toolPath = path.join(_getCacheDirectory(), toolName); if (fs.existsSync(toolPath)) { const children = fs.readdirSync(toolPath); for (const child of children) { if (isExplicitVersion(child)) { const fullPath = path.join(toolPath, child, arch || ''); if (fs.existsSync(fullPath) && fs.existsSync(`${fullPath}.complete`)) { versions.push(child); } } } } return versions; } exports.findAllVersions = findAllVersions; function getManifestFromRepo(owner, repo, auth, branch = 'master') { return __awaiter(this, void 0, void 0, function* () { let releases = []; const treeUrl = `https://api.github.com/repos/${owner}/${repo}/git/trees/${branch}`; const http = new httpm.HttpClient('tool-cache'); const headers = {}; if (auth) { core.debug('set auth'); headers.authorization = auth; } const response = yield http.getJson(treeUrl, headers); if (!response.result) { return releases; } let manifestUrl = ''; for (const item of response.result.tree) { if (item.path === 'versions-manifest.json') { manifestUrl = item.url; break; } } headers['accept'] = 'application/vnd.github.VERSION.raw'; let versionsRaw = yield (yield http.get(manifestUrl, headers)).readBody(); if (versionsRaw) { // shouldn't be needed but protects against invalid json saved with BOM versionsRaw = versionsRaw.replace(/^\uFEFF/, ''); try { releases = JSON.parse(versionsRaw); } catch (_a) { core.debug('Invalid json'); } } return releases; }); } exports.getManifestFromRepo = getManifestFromRepo; function findFromManifest(versionSpec, stable, manifest, archFilter = os.arch()) { return __awaiter(this, void 0, void 0, function* () { // wrap the internal impl const match = yield mm._findMatch(versionSpec, stable, manifest, archFilter); return match; }); } exports.findFromManifest = findFromManifest; function _createExtractFolder(dest) { return __awaiter(this, void 0, void 0, function* () { if (!dest) { // create a temp dir dest = path.join(_getTempDirectory(), v4_1.default()); } yield io.mkdirP(dest); return dest; }); } function _createToolPath(tool, version, arch) { return __awaiter(this, void 0, void 0, function* () { const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); core.debug(`destination ${folderPath}`); const markerPath = `${folderPath}.complete`; yield io.rmRF(folderPath); yield io.rmRF(markerPath); yield io.mkdirP(folderPath); return folderPath; }); } function _completeToolPath(tool, version, arch) { const folderPath = path.join(_getCacheDirectory(), tool, semver.clean(version) || version, arch || ''); const markerPath = `${folderPath}.complete`; fs.writeFileSync(markerPath, ''); core.debug('finished caching tool'); } /** * Check if version string is explicit * * @param versionSpec version string to check */ function isExplicitVersion(versionSpec) { const c = semver.clean(versionSpec) || ''; core.debug(`isExplicit: ${c}`); const valid = semver.valid(c) != null; core.debug(`explicit? ${valid}`); return valid; } exports.isExplicitVersion = isExplicitVersion; /** * Get the highest satisfiying semantic version in `versions` which satisfies `versionSpec` * * @param versions array of versions to evaluate * @param versionSpec semantic version spec to satisfy */ function evaluateVersions(versions, versionSpec) { let version = ''; core.debug(`evaluating ${versions.length} versions`); versions = versions.sort((a, b) => { if (semver.gt(a, b)) { return 1; } return -1; }); for (let i = versions.length - 1; i >= 0; i--) { const potential = versions[i]; const satisfied = semver.satisfies(potential, versionSpec); if (satisfied) { version = potential; break; } } if (version) { core.debug(`matched: ${version}`); } else { core.debug('match not found'); } return version; } exports.evaluateVersions = evaluateVersions; /** * Gets RUNNER_TOOL_CACHE */ function _getCacheDirectory() { const cacheDirectory = process.env['RUNNER_TOOL_CACHE'] || ''; assert_1.ok(cacheDirectory, 'Expected RUNNER_TOOL_CACHE to be defined'); return cacheDirectory; } /** * Gets RUNNER_TEMP */ function _getTempDirectory() { const tempDirectory = process.env['RUNNER_TEMP'] || ''; assert_1.ok(tempDirectory, 'Expected RUNNER_TEMP to be defined'); return tempDirectory; } /** * Gets a global variable */ function _getGlobal(key, defaultValue) { /* eslint-disable @typescript-eslint/no-explicit-any */ const value = global[key]; /* eslint-enable @typescript-eslint/no-explicit-any */ return value !== undefined ? value : defaultValue; } /** * Returns an array of unique values. * @param values Values to make unique. */ function _unique(values) { return Array.from(new Set(values)); } //# sourceMappingURL=tool-cache.js.map /***/ }), /***/ 2557: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); var tslib = __nccwpck_require__(4351); // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. var listenersMap = new WeakMap(); var abortedMap = new WeakMap(); /** * An aborter instance implements AbortSignal interface, can abort HTTP requests. * * - Call AbortSignal.none to create a new AbortSignal instance that cannot be cancelled. * Use `AbortSignal.none` when you are required to pass a cancellation token but the operation * cannot or will not ever be cancelled. * * @example * Abort without timeout * ```ts * await doAsyncWork(AbortSignal.none); * ``` */ var AbortSignal = /** @class */ (function () { function AbortSignal() { /** * onabort event listener. */ this.onabort = null; listenersMap.set(this, []); abortedMap.set(this, false); } Object.defineProperty(AbortSignal.prototype, "aborted", { /** * Status of whether aborted or not. * * @readonly */ get: function () { if (!abortedMap.has(this)) { throw new TypeError("Expected `this` to be an instance of AbortSignal."); } return abortedMap.get(this); }, enumerable: false, configurable: true }); Object.defineProperty(AbortSignal, "none", { /** * Creates a new AbortSignal instance that will never be aborted. * * @readonly */ get: function () { return new AbortSignal(); }, enumerable: false, configurable: true }); /** * Added new "abort" event listener, only support "abort" event. * * @param _type - Only support "abort" event * @param listener - The listener to be added */ AbortSignal.prototype.addEventListener = function ( // tslint:disable-next-line:variable-name _type, listener) { if (!listenersMap.has(this)) { throw new TypeError("Expected `this` to be an instance of AbortSignal."); } var listeners = listenersMap.get(this); listeners.push(listener); }; /** * Remove "abort" event listener, only support "abort" event. * * @param _type - Only support "abort" event * @param listener - The listener to be removed */ AbortSignal.prototype.removeEventListener = function ( // tslint:disable-next-line:variable-name _type, listener) { if (!listenersMap.has(this)) { throw new TypeError("Expected `this` to be an instance of AbortSignal."); } var listeners = listenersMap.get(this); var index = listeners.indexOf(listener); if (index > -1) { listeners.splice(index, 1); } }; /** * Dispatches a synthetic event to the AbortSignal. */ AbortSignal.prototype.dispatchEvent = function (_event) { throw new Error("This is a stub dispatchEvent implementation that should not be used. It only exists for type-checking purposes."); }; return AbortSignal; }()); /** * Helper to trigger an abort event immediately, the onabort and all abort event listeners will be triggered. * Will try to trigger abort event for all linked AbortSignal nodes. * * - If there is a timeout, the timer will be cancelled. * - If aborted is true, nothing will happen. * * @internal */ // eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters function abortSignal(signal) { if (signal.aborted) { return; } if (signal.onabort) { signal.onabort.call(signal); } var listeners = listenersMap.get(signal); if (listeners) { // Create a copy of listeners so mutations to the array // (e.g. via removeListener calls) don't affect the listeners // we invoke. listeners.slice().forEach(function (listener) { listener.call(signal, { type: "abort" }); }); } abortedMap.set(signal, true); } // Copyright (c) Microsoft Corporation. /** * This error is thrown when an asynchronous operation has been aborted. * Check for this error by testing the `name` that the name property of the * error matches `"AbortError"`. * * @example * ```ts * const controller = new AbortController(); * controller.abort(); * try { * doAsyncWork(controller.signal) * } catch (e) { * if (e.name === 'AbortError') { * // handle abort error here. * } * } * ``` */ var AbortError = /** @class */ (function (_super) { tslib.__extends(AbortError, _super); function AbortError(message) { var _this = _super.call(this, message) || this; _this.name = "AbortError"; return _this; } return AbortError; }(Error)); /** * An AbortController provides an AbortSignal and the associated controls to signal * that an asynchronous operation should be aborted. * * @example * Abort an operation when another event fires * ```ts * const controller = new AbortController(); * const signal = controller.signal; * doAsyncWork(signal); * button.addEventListener('click', () => controller.abort()); * ``` * * @example * Share aborter cross multiple operations in 30s * ```ts * // Upload the same data to 2 different data centers at the same time, * // abort another when any of them is finished * const controller = AbortController.withTimeout(30 * 1000); * doAsyncWork(controller.signal).then(controller.abort); * doAsyncWork(controller.signal).then(controller.abort); *``` * * @example * Cascaded aborting * ```ts * // All operations can't take more than 30 seconds * const aborter = Aborter.timeout(30 * 1000); * * // Following 2 operations can't take more than 25 seconds * await doAsyncWork(aborter.withTimeout(25 * 1000)); * await doAsyncWork(aborter.withTimeout(25 * 1000)); * ``` */ var AbortController = /** @class */ (function () { // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types function AbortController(parentSignals) { var _this = this; this._signal = new AbortSignal(); if (!parentSignals) { return; } // coerce parentSignals into an array if (!Array.isArray(parentSignals)) { // eslint-disable-next-line prefer-rest-params parentSignals = arguments; } for (var _i = 0, parentSignals_1 = parentSignals; _i < parentSignals_1.length; _i++) { var parentSignal = parentSignals_1[_i]; // if the parent signal has already had abort() called, // then call abort on this signal as well. if (parentSignal.aborted) { this.abort(); } else { // when the parent signal aborts, this signal should as well. parentSignal.addEventListener("abort", function () { _this.abort(); }); } } } Object.defineProperty(AbortController.prototype, "signal", { /** * The AbortSignal associated with this controller that will signal aborted * when the abort method is called on this controller. * * @readonly */ get: function () { return this._signal; }, enumerable: false, configurable: true }); /** * Signal that any operations passed this controller's associated abort signal * to cancel any remaining work and throw an `AbortError`. */ AbortController.prototype.abort = function () { abortSignal(this._signal); }; /** * Creates a new AbortSignal instance that will abort after the provided ms. * @param ms - Elapsed time in milliseconds to trigger an abort. */ AbortController.timeout = function (ms) { var signal = new AbortSignal(); var timer = setTimeout(abortSignal, ms, signal); // Prevent the active Timer from keeping the Node.js event loop active. if (typeof timer.unref === "function") { timer.unref(); } return signal; }; return AbortController; }()); exports.AbortController = AbortController; exports.AbortError = AbortError; exports.AbortSignal = AbortSignal; //# sourceMappingURL=index.js.map /***/ }), /***/ 6821: /***/ (() => { "use strict"; if (typeof Symbol === undefined || !Symbol.asyncIterator) { Symbol.asyncIterator = Symbol.for("Symbol.asyncIterator"); } //# sourceMappingURL=index.js.map /***/ }), /***/ 9645: /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. /** * A static-key-based credential that supports updating * the underlying key value. */ var AzureKeyCredential = /** @class */ (function () { /** * Create an instance of an AzureKeyCredential for use * with a service client. * * @param key - The initial value of the key to use in authentication */ function AzureKeyCredential(key) { if (!key) { throw new Error("key must be a non-empty string"); } this._key = key; } Object.defineProperty(AzureKeyCredential.prototype, "key", { /** * The value of the key to be used in authentication */ get: function () { return this._key; }, enumerable: false, configurable: true }); /** * Change the value of the key. * * Updates will take effect upon the next request after * updating the key value. * * @param newKey - The new key value to be used */ AzureKeyCredential.prototype.update = function (newKey) { this._key = newKey; }; return AzureKeyCredential; }()); // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. /** * Helper TypeGuard that checks if something is defined or not. * @param thing - Anything * @internal */ function isDefined(thing) { return typeof thing !== "undefined" && thing !== null; } /** * Helper TypeGuard that checks if the input is an object with the specified properties. * Note: The properties may be inherited. * @param thing - Anything. * @param properties - The name of the properties that should appear in the object. * @internal */ function isObjectWithProperties(thing, properties) { if (!isDefined(thing) || typeof thing !== "object") { return false; } for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) { var property = properties_1[_i]; if (!objectHasProperty(thing, property)) { return false; } } return true; } /** * Helper TypeGuard that checks if the input is an object with the specified property. * Note: The property may be inherited. * @param thing - Any object. * @param property - The name of the property that should appear in the object. * @internal */ function objectHasProperty(thing, property) { return typeof thing === "object" && property in thing; } // Copyright (c) Microsoft Corporation. /** * A static name/key-based credential that supports updating * the underlying name and key values. */ var AzureNamedKeyCredential = /** @class */ (function () { /** * Create an instance of an AzureNamedKeyCredential for use * with a service client. * * @param name - The initial value of the name to use in authentication. * @param key - The initial value of the key to use in authentication. */ function AzureNamedKeyCredential(name, key) { if (!name || !key) { throw new TypeError("name and key must be non-empty strings"); } this._name = name; this._key = key; } Object.defineProperty(AzureNamedKeyCredential.prototype, "key", { /** * The value of the key to be used in authentication. */ get: function () { return this._key; }, enumerable: false, configurable: true }); Object.defineProperty(AzureNamedKeyCredential.prototype, "name", { /** * The value of the name to be used in authentication. */ get: function () { return this._name; }, enumerable: false, configurable: true }); /** * Change the value of the key. * * Updates will take effect upon the next request after * updating the key value. * * @param newName - The new name value to be used. * @param newKey - The new key value to be used. */ AzureNamedKeyCredential.prototype.update = function (newName, newKey) { if (!newName || !newKey) { throw new TypeError("newName and newKey must be non-empty strings"); } this._name = newName; this._key = newKey; }; return AzureNamedKeyCredential; }()); /** * Tests an object to determine whether it implements NamedKeyCredential. * * @param credential - The assumed NamedKeyCredential to be tested. */ function isNamedKeyCredential(credential) { return (isObjectWithProperties(credential, ["name", "key"]) && typeof credential.key === "string" && typeof credential.name === "string"); } // Copyright (c) Microsoft Corporation. /** * A static-signature-based credential that supports updating * the underlying signature value. */ var AzureSASCredential = /** @class */ (function () { /** * Create an instance of an AzureSASCredential for use * with a service client. * * @param signature - The initial value of the shared access signature to use in authentication */ function AzureSASCredential(signature) { if (!signature) { throw new Error("shared access signature must be a non-empty string"); } this._signature = signature; } Object.defineProperty(AzureSASCredential.prototype, "signature", { /** * The value of the shared access signature to be used in authentication */ get: function () { return this._signature; }, enumerable: false, configurable: true }); /** * Change the value of the signature. * * Updates will take effect upon the next request after * updating the signature value. * * @param newSignature - The new shared access signature value to be used */ AzureSASCredential.prototype.update = function (newSignature) { if (!newSignature) { throw new Error("shared access signature must be a non-empty string"); } this._signature = newSignature; }; return AzureSASCredential; }()); /** * Tests an object to determine whether it implements SASCredential. * * @param credential - The assumed SASCredential to be tested. */ function isSASCredential(credential) { return (isObjectWithProperties(credential, ["signature"]) && typeof credential.signature === "string"); } // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. /** * Tests an object to determine whether it implements TokenCredential. * * @param credential - The assumed TokenCredential to be tested. */ function isTokenCredential(credential) { // Check for an object with a 'getToken' function and possibly with // a 'signRequest' function. We do this check to make sure that // a ServiceClientCredentials implementor (like TokenClientCredentials // in ms-rest-nodeauth) doesn't get mistaken for a TokenCredential if // it doesn't actually implement TokenCredential also. var castCredential = credential; return (castCredential && typeof castCredential.getToken === "function" && (castCredential.signRequest === undefined || castCredential.getToken.length > 0)); } exports.AzureKeyCredential = AzureKeyCredential; exports.AzureNamedKeyCredential = AzureNamedKeyCredential; exports.AzureSASCredential = AzureSASCredential; exports.isNamedKeyCredential = isNamedKeyCredential; exports.isSASCredential = isSASCredential; exports.isTokenCredential = isTokenCredential; //# sourceMappingURL=index.js.map /***/ }), /***/ 4607: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var tslib = __nccwpck_require__(4351); var uuid = __nccwpck_require__(3415); var tough = __nccwpck_require__(8165); var http = __nccwpck_require__(8605); var https = __nccwpck_require__(7211); var node_fetch = _interopDefault(__nccwpck_require__(467)); var abortController = __nccwpck_require__(2557); var FormData = _interopDefault(__nccwpck_require__(4334)); var util = __nccwpck_require__(1669); var url = __nccwpck_require__(8835); var stream = __nccwpck_require__(2413); var logger$1 = __nccwpck_require__(3233); var tunnel = __nccwpck_require__(4294); var coreAuth = __nccwpck_require__(9645); var xml2js = __nccwpck_require__(6189); var os = __nccwpck_require__(2087); var coreTracing = __nccwpck_require__(4175); __nccwpck_require__(6821); // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. /** * A collection of HttpHeaders that can be sent with a HTTP request. */ function getHeaderKey(headerName) { return headerName.toLowerCase(); } function isHttpHeadersLike(object) { if (object && typeof object === "object") { var castObject = object; if (typeof castObject.rawHeaders === "function" && typeof castObject.clone === "function" && typeof castObject.get === "function" && typeof castObject.set === "function" && typeof castObject.contains === "function" && typeof castObject.remove === "function" && typeof castObject.headersArray === "function" && typeof castObject.headerValues === "function" && typeof castObject.headerNames === "function" && typeof castObject.toJson === "function") { return true; } } return false; } /** * A collection of HTTP header key/value pairs. */ var HttpHeaders = /** @class */ (function () { function HttpHeaders(rawHeaders) { this._headersMap = {}; if (rawHeaders) { for (var headerName in rawHeaders) { this.set(headerName, rawHeaders[headerName]); } } } /** * Set a header in this collection with the provided name and value. The name is * case-insensitive. * @param headerName - The name of the header to set. This value is case-insensitive. * @param headerValue - The value of the header to set. */ HttpHeaders.prototype.set = function (headerName, headerValue) { this._headersMap[getHeaderKey(headerName)] = { name: headerName, value: headerValue.toString() }; }; /** * Get the header value for the provided header name, or undefined if no header exists in this * collection with the provided name. * @param headerName - The name of the header. */ HttpHeaders.prototype.get = function (headerName) { var header = this._headersMap[getHeaderKey(headerName)]; return !header ? undefined : header.value; }; /** * Get whether or not this header collection contains a header entry for the provided header name. */ HttpHeaders.prototype.contains = function (headerName) { return !!this._headersMap[getHeaderKey(headerName)]; }; /** * Remove the header with the provided headerName. Return whether or not the header existed and * was removed. * @param headerName - The name of the header to remove. */ HttpHeaders.prototype.remove = function (headerName) { var result = this.contains(headerName); delete this._headersMap[getHeaderKey(headerName)]; return result; }; /** * Get the headers that are contained this collection as an object. */ HttpHeaders.prototype.rawHeaders = function () { var result = {}; for (var headerKey in this._headersMap) { var header = this._headersMap[headerKey]; result[header.name.toLowerCase()] = header.value; } return result; }; /** * Get the headers that are contained in this collection as an array. */ HttpHeaders.prototype.headersArray = function () { var headers = []; for (var headerKey in this._headersMap) { headers.push(this._headersMap[headerKey]); } return headers; }; /** * Get the header names that are contained in this collection. */ HttpHeaders.prototype.headerNames = function () { var headerNames = []; var headers = this.headersArray(); for (var i = 0; i < headers.length; ++i) { headerNames.push(headers[i].name); } return headerNames; }; /** * Get the header values that are contained in this collection. */ HttpHeaders.prototype.headerValues = function () { var headerValues = []; var headers = this.headersArray(); for (var i = 0; i < headers.length; ++i) { headerValues.push(headers[i].value); } return headerValues; }; /** * Get the JSON object representation of this HTTP header collection. */ HttpHeaders.prototype.toJson = function () { return this.rawHeaders(); }; /** * Get the string representation of this HTTP header collection. */ HttpHeaders.prototype.toString = function () { return JSON.stringify(this.toJson()); }; /** * Create a deep clone/copy of this HttpHeaders collection. */ HttpHeaders.prototype.clone = function () { return new HttpHeaders(this.rawHeaders()); }; return HttpHeaders; }()); // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. /** * Encodes a string in base64 format. * @param value - The string to encode */ function encodeString(value) { return Buffer.from(value).toString("base64"); } /** * Encodes a byte array in base64 format. * @param value - The Uint8Aray to encode */ function encodeByteArray(value) { // Buffer.from accepts | -- the TypeScript definition is off here // https://nodejs.org/api/buffer.html#buffer_class_method_buffer_from_arraybuffer_byteoffset_length var bufferValue = value instanceof Buffer ? value : Buffer.from(value.buffer); return bufferValue.toString("base64"); } /** * Decodes a base64 string into a byte array. * @param value - The base64 string to decode */ function decodeString(value) { return Buffer.from(value, "base64"); } // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. var Constants = { /** * The core-http version */ coreHttpVersion: "1.2.6", /** * Specifies HTTP. */ HTTP: "http:", /** * Specifies HTTPS. */ HTTPS: "https:", /** * Specifies HTTP Proxy. */ HTTP_PROXY: "HTTP_PROXY", /** * Specifies HTTPS Proxy. */ HTTPS_PROXY: "HTTPS_PROXY", /** * Specifies NO Proxy. */ NO_PROXY: "NO_PROXY", /** * Specifies ALL Proxy. */ ALL_PROXY: "ALL_PROXY", HttpConstants: { /** * Http Verbs */ HttpVerbs: { PUT: "PUT", GET: "GET", DELETE: "DELETE", POST: "POST", MERGE: "MERGE", HEAD: "HEAD", PATCH: "PATCH" }, StatusCodes: { TooManyRequests: 429 } }, /** * Defines constants for use with HTTP headers. */ HeaderConstants: { /** * The Authorization header. */ AUTHORIZATION: "authorization", AUTHORIZATION_SCHEME: "Bearer", /** * The Retry-After response-header field can be used with a 503 (Service * Unavailable) or 349 (Too Many Requests) responses to indicate how long * the service is expected to be unavailable to the requesting client. */ RETRY_AFTER: "Retry-After", /** * The UserAgent header. */ USER_AGENT: "User-Agent" } }; // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. /** * Default key used to access the XML attributes. */ var XML_ATTRKEY = "$"; /** * Default key used to access the XML value content. */ var XML_CHARKEY = "_"; // Copyright (c) Microsoft Corporation. var validUuidRegex = /^[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}$/i; /** * A constant that indicates whether the environment is node.js or browser based. */ var isNode = typeof process !== "undefined" && !!process.version && !!process.versions && !!process.versions.node; /** * Encodes an URI. * * @param uri - The URI to be encoded. * @returns The encoded URI. */ function encodeUri(uri) { return encodeURIComponent(uri) .replace(/!/g, "%21") .replace(/"/g, "%27") .replace(/\(/g, "%28") .replace(/\)/g, "%29") .replace(/\*/g, "%2A"); } /** * Returns a stripped version of the Http Response which only contains body, * headers and the status. * * @param response - The Http Response * @returns The stripped version of Http Response. */ function stripResponse(response) { var strippedResponse = {}; strippedResponse.body = response.bodyAsText; strippedResponse.headers = response.headers; strippedResponse.status = response.status; return strippedResponse; } /** * Returns a stripped version of the Http Request that does not contain the * Authorization header. * * @param request - The Http Request object * @returns The stripped version of Http Request. */ function stripRequest(request) { var strippedRequest = request.clone(); if (strippedRequest.headers) { strippedRequest.headers.remove("authorization"); } return strippedRequest; } /** * Validates the given uuid as a string * * @param uuid - The uuid as a string that needs to be validated * @returns True if the uuid is valid; false otherwise. */ function isValidUuid(uuid) { return validUuidRegex.test(uuid); } /** * Generated UUID * * @returns RFC4122 v4 UUID. */ function generateUuid() { return uuid.v4(); } /** * Executes an array of promises sequentially. Inspiration of this method is here: * https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html. An awesome blog on promises! * * @param promiseFactories - An array of promise factories(A function that return a promise) * @param kickstart - Input to the first promise that is used to kickstart the promise chain. * If not provided then the promise chain starts with undefined. * @returns A chain of resolved or rejected promises */ function executePromisesSequentially(promiseFactories, kickstart) { var result = Promise.resolve(kickstart); promiseFactories.forEach(function (promiseFactory) { result = result.then(promiseFactory); }); return result; } /** * A wrapper for setTimeout that resolves a promise after t milliseconds. * @param t - The number of milliseconds to be delayed. * @param value - The value to be resolved with after a timeout of t milliseconds. * @returns Resolved promise */ function delay(t, value) { return new Promise(function (resolve) { return setTimeout(function () { return resolve(value); }, t); }); } /** * Converts a Promise to a callback. * @param promise - The Promise to be converted to a callback * @returns A function that takes the callback `(cb: Function) => void` * @deprecated generated code should instead depend on responseToBody */ // eslint-disable-next-line @typescript-eslint/ban-types function promiseToCallback(promise) { if (typeof promise.then !== "function") { throw new Error("The provided input is not a Promise."); } // eslint-disable-next-line @typescript-eslint/ban-types return function (cb) { promise .then(function (data) { // eslint-disable-next-line promise/no-callback-in-promise return cb(undefined, data); }) .catch(function (err) { // eslint-disable-next-line promise/no-callback-in-promise cb(err); }); }; } /** * Converts a Promise to a service callback. * @param promise - The Promise of HttpOperationResponse to be converted to a service callback * @returns A function that takes the service callback (cb: ServiceCallback): void */ function promiseToServiceCallback(promise) { if (typeof promise.then !== "function") { throw new Error("The provided input is not a Promise."); } return function (cb) { promise .then(function (data) { return process.nextTick(cb, undefined, data.parsedBody, data.request, data); }) .catch(function (err) { process.nextTick(cb, err); }); }; } function prepareXMLRootList(obj, elementName, xmlNamespaceKey, xmlNamespace) { var _a, _b, _c; if (!Array.isArray(obj)) { obj = [obj]; } if (!xmlNamespaceKey || !xmlNamespace) { return _a = {}, _a[elementName] = obj, _a; } var result = (_b = {}, _b[elementName] = obj, _b); result[XML_ATTRKEY] = (_c = {}, _c[xmlNamespaceKey] = xmlNamespace, _c); return result; } /** * Applies the properties on the prototype of sourceCtors to the prototype of targetCtor * @param targetCtor - The target object on which the properties need to be applied. * @param sourceCtors - An array of source objects from which the properties need to be taken. */ function applyMixins(targetCtorParam, sourceCtors) { var castTargetCtorParam = targetCtorParam; sourceCtors.forEach(function (sourceCtor) { Object.getOwnPropertyNames(sourceCtor.prototype).forEach(function (name) { castTargetCtorParam.prototype[name] = sourceCtor.prototype[name]; }); }); } var validateISODuration = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/; /** * Indicates whether the given string is in ISO 8601 format. * @param value - The value to be validated for ISO 8601 duration format. * @returns `true` if valid, `false` otherwise. */ function isDuration(value) { return validateISODuration.test(value); } /** * Replace all of the instances of searchValue in value with the provided replaceValue. * @param value - The value to search and replace in. * @param searchValue - The value to search for in the value argument. * @param replaceValue - The value to replace searchValue with in the value argument. * @returns The value where each instance of searchValue was replaced with replacedValue. */ function replaceAll(value, searchValue, replaceValue) { return !value || !searchValue ? value : value.split(searchValue).join(replaceValue || ""); } /** * Determines whether the given entity is a basic/primitive type * (string, number, boolean, null, undefined). * @param value - Any entity * @returns true is it is primitive type, false otherwise. */ function isPrimitiveType(value) { return (typeof value !== "object" && typeof value !== "function") || value === null; } function getEnvironmentValue(name) { if (process.env[name]) { return process.env[name]; } else if (process.env[name.toLowerCase()]) { return process.env[name.toLowerCase()]; } return undefined; } /** * @internal * @returns true when input is an object type that is not null, Array, RegExp, or Date. */ function isObject(input) { return (typeof input === "object" && input !== null && !Array.isArray(input) && !(input instanceof RegExp) && !(input instanceof Date)); } // Copyright (c) Microsoft Corporation. var Serializer = /** @class */ (function () { function Serializer(modelMappers, isXML) { if (modelMappers === void 0) { modelMappers = {}; } this.modelMappers = modelMappers; this.isXML = isXML; } Serializer.prototype.validateConstraints = function (mapper, value, objectName) { var failValidation = function (constraintName, constraintValue) { throw new Error("\"" + objectName + "\" with value \"" + value + "\" should satisfy the constraint \"" + constraintName + "\": " + constraintValue + "."); }; if (mapper.constraints && value != undefined) { var valueAsNumber = value; var _a = mapper.constraints, ExclusiveMaximum = _a.ExclusiveMaximum, ExclusiveMinimum = _a.ExclusiveMinimum, InclusiveMaximum = _a.InclusiveMaximum, InclusiveMinimum = _a.InclusiveMinimum, MaxItems = _a.MaxItems, MaxLength = _a.MaxLength, MinItems = _a.MinItems, MinLength = _a.MinLength, MultipleOf = _a.MultipleOf, Pattern = _a.Pattern, UniqueItems = _a.UniqueItems; if (ExclusiveMaximum != undefined && valueAsNumber >= ExclusiveMaximum) { failValidation("ExclusiveMaximum", ExclusiveMaximum); } if (ExclusiveMinimum != undefined && valueAsNumber <= ExclusiveMinimum) { failValidation("ExclusiveMinimum", ExclusiveMinimum); } if (InclusiveMaximum != undefined && valueAsNumber > InclusiveMaximum) { failValidation("InclusiveMaximum", InclusiveMaximum); } if (InclusiveMinimum != undefined && valueAsNumber < InclusiveMinimum) { failValidation("InclusiveMinimum", InclusiveMinimum); } var valueAsArray = value; if (MaxItems != undefined && valueAsArray.length > MaxItems) { failValidation("MaxItems", MaxItems); } if (MaxLength != undefined && valueAsArray.length > MaxLength) { failValidation("MaxLength", MaxLength); } if (MinItems != undefined && valueAsArray.length < MinItems) { failValidation("MinItems", MinItems); } if (MinLength != undefined && valueAsArray.length < MinLength) { failValidation("MinLength", MinLength); } if (MultipleOf != undefined && valueAsNumber % MultipleOf !== 0) { failValidation("MultipleOf", MultipleOf); } if (Pattern) { var pattern = typeof Pattern === "string" ? new RegExp(Pattern) : Pattern; if (typeof value !== "string" || value.match(pattern) === null) { failValidation("Pattern", Pattern); } } if (UniqueItems && valueAsArray.some(function (item, i, ar) { return ar.indexOf(item) !== i; })) { failValidation("UniqueItems", UniqueItems); } } }; /** * Serialize the given object based on its metadata defined in the mapper * * @param mapper - The mapper which defines the metadata of the serializable object * @param object - A valid Javascript object to be serialized * @param objectName - Name of the serialized object * @param options - additional options to deserialization * @returns A valid serialized Javascript object */ Serializer.prototype.serialize = function (mapper, object, objectName, options) { var _a, _b, _c; if (options === void 0) { options = {}; } var updatedOptions = { rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : "", includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false, xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY }; var payload = {}; var mapperType = mapper.type.name; if (!objectName) { objectName = mapper.serializedName; } if (mapperType.match(/^Sequence$/i) !== null) { payload = []; } if (mapper.isConstant) { object = mapper.defaultValue; } // This table of allowed values should help explain // the mapper.required and mapper.nullable properties. // X means "neither undefined or null are allowed". // || required // || true | false // nullable || ========================== // true || null | undefined/null // false || X | undefined // undefined || X | undefined/null var required = mapper.required, nullable = mapper.nullable; if (required && nullable && object === undefined) { throw new Error(objectName + " cannot be undefined."); } if (required && !nullable && object == undefined) { throw new Error(objectName + " cannot be null or undefined."); } if (!required && nullable === false && object === null) { throw new Error(objectName + " cannot be null."); } if (object == undefined) { payload = object; } else { // Validate Constraints if any this.validateConstraints(mapper, object, objectName); if (mapperType.match(/^any$/i) !== null) { payload = object; } else if (mapperType.match(/^(Number|String|Boolean|Object|Stream|Uuid)$/i) !== null) { payload = serializeBasicTypes(mapperType, objectName, object); } else if (mapperType.match(/^Enum$/i) !== null) { var enumMapper = mapper; payload = serializeEnumType(objectName, enumMapper.type.allowedValues, object); } else if (mapperType.match(/^(Date|DateTime|TimeSpan|DateTimeRfc1123|UnixTime)$/i) !== null) { payload = serializeDateTypes(mapperType, object, objectName); } else if (mapperType.match(/^ByteArray$/i) !== null) { payload = serializeByteArrayType(objectName, object); } else if (mapperType.match(/^Base64Url$/i) !== null) { payload = serializeBase64UrlType(objectName, object); } else if (mapperType.match(/^Sequence$/i) !== null) { payload = serializeSequenceType(this, mapper, object, objectName, Boolean(this.isXML), updatedOptions); } else if (mapperType.match(/^Dictionary$/i) !== null) { payload = serializeDictionaryType(this, mapper, object, objectName, Boolean(this.isXML), updatedOptions); } else if (mapperType.match(/^Composite$/i) !== null) { payload = serializeCompositeType(this, mapper, object, objectName, Boolean(this.isXML), updatedOptions); } } return payload; }; /** * Deserialize the given object based on its metadata defined in the mapper * * @param mapper - The mapper which defines the metadata of the serializable object * @param responseBody - A valid Javascript entity to be deserialized * @param objectName - Name of the deserialized object * @param options - Controls behavior of XML parser and builder. * @returns A valid deserialized Javascript object */ Serializer.prototype.deserialize = function (mapper, responseBody, objectName, options) { var _a, _b, _c; if (options === void 0) { options = {}; } var updatedOptions = { rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : "", includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false, xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY }; if (responseBody == undefined) { if (this.isXML && mapper.type.name === "Sequence" && !mapper.xmlIsWrapped) { // Edge case for empty XML non-wrapped lists. xml2js can't distinguish // between the list being empty versus being missing, // so let's do the more user-friendly thing and return an empty list. responseBody = []; } // specifically check for undefined as default value can be a falsey value `0, "", false, null` if (mapper.defaultValue !== undefined) { responseBody = mapper.defaultValue; } return responseBody; } var payload; var mapperType = mapper.type.name; if (!objectName) { objectName = mapper.serializedName; } if (mapperType.match(/^Composite$/i) !== null) { payload = deserializeCompositeType(this, mapper, responseBody, objectName, updatedOptions); } else { if (this.isXML) { var xmlCharKey = updatedOptions.xmlCharKey; var castResponseBody = responseBody; /** * If the mapper specifies this as a non-composite type value but the responseBody contains * both header ("$" i.e., XML_ATTRKEY) and body ("#" i.e., XML_CHARKEY) properties, * then just reduce the responseBody value to the body ("#" i.e., XML_CHARKEY) property. */ if (castResponseBody[XML_ATTRKEY] != undefined && castResponseBody[xmlCharKey] != undefined) { responseBody = castResponseBody[xmlCharKey]; } } if (mapperType.match(/^Number$/i) !== null) { payload = parseFloat(responseBody); if (isNaN(payload)) { payload = responseBody; } } else if (mapperType.match(/^Boolean$/i) !== null) { if (responseBody === "true") { payload = true; } else if (responseBody === "false") { payload = false; } else { payload = responseBody; } } else if (mapperType.match(/^(String|Enum|Object|Stream|Uuid|TimeSpan|any)$/i) !== null) { payload = responseBody; } else if (mapperType.match(/^(Date|DateTime|DateTimeRfc1123)$/i) !== null) { payload = new Date(responseBody); } else if (mapperType.match(/^UnixTime$/i) !== null) { payload = unixTimeToDate(responseBody); } else if (mapperType.match(/^ByteArray$/i) !== null) { payload = decodeString(responseBody); } else if (mapperType.match(/^Base64Url$/i) !== null) { payload = base64UrlToByteArray(responseBody); } else if (mapperType.match(/^Sequence$/i) !== null) { payload = deserializeSequenceType(this, mapper, responseBody, objectName, updatedOptions); } else if (mapperType.match(/^Dictionary$/i) !== null) { payload = deserializeDictionaryType(this, mapper, responseBody, objectName, updatedOptions); } } if (mapper.isConstant) { payload = mapper.defaultValue; } return payload; }; return Serializer; }()); function trimEnd(str, ch) { var len = str.length; while (len - 1 >= 0 && str[len - 1] === ch) { --len; } return str.substr(0, len); } function bufferToBase64Url(buffer) { if (!buffer) { return undefined; } if (!(buffer instanceof Uint8Array)) { throw new Error("Please provide an input of type Uint8Array for converting to Base64Url."); } // Uint8Array to Base64. var str = encodeByteArray(buffer); // Base64 to Base64Url. return trimEnd(str, "=") .replace(/\+/g, "-") .replace(/\//g, "_"); } function base64UrlToByteArray(str) { if (!str) { return undefined; } if (str && typeof str.valueOf() !== "string") { throw new Error("Please provide an input of type string for converting to Uint8Array"); } // Base64Url to Base64. str = str.replace(/-/g, "+").replace(/_/g, "/"); // Base64 to Uint8Array. return decodeString(str); } function splitSerializeName(prop) { var classes = []; var partialclass = ""; if (prop) { var subwords = prop.split("."); for (var _i = 0, subwords_1 = subwords; _i < subwords_1.length; _i++) { var item = subwords_1[_i]; if (item.charAt(item.length - 1) === "\\") { partialclass += item.substr(0, item.length - 1) + "."; } else { partialclass += item; classes.push(partialclass); partialclass = ""; } } } return classes; } function dateToUnixTime(d) { if (!d) { return undefined; } if (typeof d.valueOf() === "string") { d = new Date(d); } return Math.floor(d.getTime() / 1000); } function unixTimeToDate(n) { if (!n) { return undefined; } return new Date(n * 1000); } function serializeBasicTypes(typeName, objectName, value) { if (value !== null && value !== undefined) { if (typeName.match(/^Number$/i) !== null) { if (typeof value !== "number") { throw new Error(objectName + " with value " + value + " must be of type number."); } } else if (typeName.match(/^String$/i) !== null) { if (typeof value.valueOf() !== "string") { throw new Error(objectName + " with value \"" + value + "\" must be of type string."); } } else if (typeName.match(/^Uuid$/i) !== null) { if (!(typeof value.valueOf() === "string" && isValidUuid(value))) { throw new Error(objectName + " with value \"" + value + "\" must be of type string and a valid uuid."); } } else if (typeName.match(/^Boolean$/i) !== null) { if (typeof value !== "boolean") { throw new Error(objectName + " with value " + value + " must be of type boolean."); } } else if (typeName.match(/^Stream$/i) !== null) { var objectType = typeof value; if (objectType !== "string" && objectType !== "function" && !(value instanceof ArrayBuffer) && !ArrayBuffer.isView(value) && !((typeof Blob === "function" || typeof Blob === "object") && value instanceof Blob)) { throw new Error(objectName + " must be a string, Blob, ArrayBuffer, ArrayBufferView, or a function returning NodeJS.ReadableStream."); } } } return value; } function serializeEnumType(objectName, allowedValues, value) { if (!allowedValues) { throw new Error("Please provide a set of allowedValues to validate " + objectName + " as an Enum Type."); } var isPresent = allowedValues.some(function (item) { if (typeof item.valueOf() === "string") { return item.toLowerCase() === value.toLowerCase(); } return item === value; }); if (!isPresent) { throw new Error(value + " is not a valid value for " + objectName + ". The valid values are: " + JSON.stringify(allowedValues) + "."); } return value; } function serializeByteArrayType(objectName, value) { var returnValue = ""; if (value != undefined) { if (!(value instanceof Uint8Array)) { throw new Error(objectName + " must be of type Uint8Array."); } returnValue = encodeByteArray(value); } return returnValue; } function serializeBase64UrlType(objectName, value) { var returnValue = ""; if (value != undefined) { if (!(value instanceof Uint8Array)) { throw new Error(objectName + " must be of type Uint8Array."); } returnValue = bufferToBase64Url(value) || ""; } return returnValue; } function serializeDateTypes(typeName, value, objectName) { if (value != undefined) { if (typeName.match(/^Date$/i) !== null) { if (!(value instanceof Date || (typeof value.valueOf() === "string" && !isNaN(Date.parse(value))))) { throw new Error(objectName + " must be an instanceof Date or a string in ISO8601 format."); } value = value instanceof Date ? value.toISOString().substring(0, 10) : new Date(value).toISOString().substring(0, 10); } else if (typeName.match(/^DateTime$/i) !== null) { if (!(value instanceof Date || (typeof value.valueOf() === "string" && !isNaN(Date.parse(value))))) { throw new Error(objectName + " must be an instanceof Date or a string in ISO8601 format."); } value = value instanceof Date ? value.toISOString() : new Date(value).toISOString(); } else if (typeName.match(/^DateTimeRfc1123$/i) !== null) { if (!(value instanceof Date || (typeof value.valueOf() === "string" && !isNaN(Date.parse(value))))) { throw new Error(objectName + " must be an instanceof Date or a string in RFC-1123 format."); } value = value instanceof Date ? value.toUTCString() : new Date(value).toUTCString(); } else if (typeName.match(/^UnixTime$/i) !== null) { if (!(value instanceof Date || (typeof value.valueOf() === "string" && !isNaN(Date.parse(value))))) { throw new Error(objectName + " must be an instanceof Date or a string in RFC-1123/ISO8601 format " + "for it to be serialized in UnixTime/Epoch format."); } value = dateToUnixTime(value); } else if (typeName.match(/^TimeSpan$/i) !== null) { if (!isDuration(value)) { throw new Error(objectName + " must be a string in ISO 8601 format. Instead was \"" + value + "\"."); } } } return value; } function serializeSequenceType(serializer, mapper, object, objectName, isXml, options) { var _a, _b; if (!Array.isArray(object)) { throw new Error(objectName + " must be of type Array."); } var elementType = mapper.type.element; if (!elementType || typeof elementType !== "object") { throw new Error("element\" metadata for an Array must be defined in the " + ("mapper and it must of type \"object\" in " + objectName + ".")); } var tempArray = []; for (var i = 0; i < object.length; i++) { var serializedValue = serializer.serialize(elementType, object[i], objectName, options); if (isXml && elementType.xmlNamespace) { var xmlnsKey = elementType.xmlNamespacePrefix ? "xmlns:" + elementType.xmlNamespacePrefix : "xmlns"; if (elementType.type.name === "Composite") { tempArray[i] = tslib.__assign({}, serializedValue); tempArray[i][XML_ATTRKEY] = (_a = {}, _a[xmlnsKey] = elementType.xmlNamespace, _a); } else { tempArray[i] = {}; tempArray[i][options.xmlCharKey] = serializedValue; tempArray[i][XML_ATTRKEY] = (_b = {}, _b[xmlnsKey] = elementType.xmlNamespace, _b); } } else { tempArray[i] = serializedValue; } } return tempArray; } function serializeDictionaryType(serializer, mapper, object, objectName, isXml, options) { var _a; if (typeof object !== "object") { throw new Error(objectName + " must be of type object."); } var valueType = mapper.type.value; if (!valueType || typeof valueType !== "object") { throw new Error("\"value\" metadata for a Dictionary must be defined in the " + ("mapper and it must of type \"object\" in " + objectName + ".")); } var tempDictionary = {}; for (var _i = 0, _b = Object.keys(object); _i < _b.length; _i++) { var key = _b[_i]; var serializedValue = serializer.serialize(valueType, object[key], objectName, options); // If the element needs an XML namespace we need to add it within the $ property tempDictionary[key] = getXmlObjectValue(valueType, serializedValue, isXml, options); } // Add the namespace to the root element if needed if (isXml && mapper.xmlNamespace) { var xmlnsKey = mapper.xmlNamespacePrefix ? "xmlns:" + mapper.xmlNamespacePrefix : "xmlns"; var result = tempDictionary; result[XML_ATTRKEY] = (_a = {}, _a[xmlnsKey] = mapper.xmlNamespace, _a); return result; } return tempDictionary; } /** * Resolves the additionalProperties property from a referenced mapper * @param serializer - The serializer containing the entire set of mappers * @param mapper - The composite mapper to resolve * @param objectName - Name of the object being serialized */ function resolveAdditionalProperties(serializer, mapper, objectName) { var additionalProperties = mapper.type.additionalProperties; if (!additionalProperties && mapper.type.className) { var modelMapper = resolveReferencedMapper(serializer, mapper, objectName); return modelMapper === null || modelMapper === void 0 ? void 0 : modelMapper.type.additionalProperties; } return additionalProperties; } /** * Finds the mapper referenced by className * @param serializer - The serializer containing the entire set of mappers * @param mapper - The composite mapper to resolve * @param objectName - Name of the object being serialized */ function resolveReferencedMapper(serializer, mapper, objectName) { var className = mapper.type.className; if (!className) { throw new Error("Class name for model \"" + objectName + "\" is not provided in the mapper \"" + JSON.stringify(mapper, undefined, 2) + "\"."); } return serializer.modelMappers[className]; } /** * Resolves a composite mapper's modelProperties. * @param serializer - The serializer containing the entire set of mappers * @param mapper - The composite mapper to resolve */ function resolveModelProperties(serializer, mapper, objectName) { var modelProps = mapper.type.modelProperties; if (!modelProps) { var modelMapper = resolveReferencedMapper(serializer, mapper, objectName); if (!modelMapper) { throw new Error("mapper() cannot be null or undefined for model \"" + mapper.type.className + "\"."); } modelProps = modelMapper === null || modelMapper === void 0 ? void 0 : modelMapper.type.modelProperties; if (!modelProps) { throw new Error("modelProperties cannot be null or undefined in the " + ("mapper \"" + JSON.stringify(modelMapper) + "\" of type \"" + mapper.type.className + "\" for object \"" + objectName + "\".")); } } return modelProps; } function serializeCompositeType(serializer, mapper, object, objectName, isXml, options) { var _a, _b; if (getPolymorphicDiscriminatorRecursively(serializer, mapper)) { mapper = getPolymorphicMapper(serializer, mapper, object, "clientName"); } if (object != undefined) { var payload = {}; var modelProps = resolveModelProperties(serializer, mapper, objectName); for (var _i = 0, _c = Object.keys(modelProps); _i < _c.length; _i++) { var key = _c[_i]; var propertyMapper = modelProps[key]; if (propertyMapper.readOnly) { continue; } var propName = void 0; var parentObject = payload; if (serializer.isXML) { if (propertyMapper.xmlIsWrapped) { propName = propertyMapper.xmlName; } else { propName = propertyMapper.xmlElementName || propertyMapper.xmlName; } } else { var paths = splitSerializeName(propertyMapper.serializedName); propName = paths.pop(); for (var _d = 0, paths_1 = paths; _d < paths_1.length; _d++) { var pathName = paths_1[_d]; var childObject = parentObject[pathName]; if (childObject == undefined && (object[key] != undefined || propertyMapper.defaultValue !== undefined)) { parentObject[pathName] = {}; } parentObject = parentObject[pathName]; } } if (parentObject != undefined) { if (isXml && mapper.xmlNamespace) { var xmlnsKey = mapper.xmlNamespacePrefix ? "xmlns:" + mapper.xmlNamespacePrefix : "xmlns"; parentObject[XML_ATTRKEY] = tslib.__assign(tslib.__assign({}, parentObject[XML_ATTRKEY]), (_a = {}, _a[xmlnsKey] = mapper.xmlNamespace, _a)); } var propertyObjectName = propertyMapper.serializedName !== "" ? objectName + "." + propertyMapper.serializedName : objectName; var toSerialize = object[key]; var polymorphicDiscriminator = getPolymorphicDiscriminatorRecursively(serializer, mapper); if (polymorphicDiscriminator && polymorphicDiscriminator.clientName === key && toSerialize == undefined) { toSerialize = mapper.serializedName; } var serializedValue = serializer.serialize(propertyMapper, toSerialize, propertyObjectName, options); if (serializedValue !== undefined && propName != undefined) { var value = getXmlObjectValue(propertyMapper, serializedValue, isXml, options); if (isXml && propertyMapper.xmlIsAttribute) { // XML_ATTRKEY, i.e., $ is the key attributes are kept under in xml2js. // This keeps things simple while preventing name collision // with names in user documents. parentObject[XML_ATTRKEY] = parentObject[XML_ATTRKEY] || {}; parentObject[XML_ATTRKEY][propName] = serializedValue; } else if (isXml && propertyMapper.xmlIsWrapped) { parentObject[propName] = (_b = {}, _b[propertyMapper.xmlElementName] = value, _b); } else { parentObject[propName] = value; } } } } var additionalPropertiesMapper = resolveAdditionalProperties(serializer, mapper, objectName); if (additionalPropertiesMapper) { var propNames = Object.keys(modelProps); var _loop_1 = function (clientPropName) { var isAdditionalProperty = propNames.every(function (pn) { return pn !== clientPropName; }); if (isAdditionalProperty) { payload[clientPropName] = serializer.serialize(additionalPropertiesMapper, object[clientPropName], objectName + '["' + clientPropName + '"]', options); } }; for (var clientPropName in object) { _loop_1(clientPropName); } } return payload; } return object; } function getXmlObjectValue(propertyMapper, serializedValue, isXml, options) { var _a; if (!isXml || !propertyMapper.xmlNamespace) { return serializedValue; } var xmlnsKey = propertyMapper.xmlNamespacePrefix ? "xmlns:" + propertyMapper.xmlNamespacePrefix : "xmlns"; var xmlNamespace = (_a = {}, _a[xmlnsKey] = propertyMapper.xmlNamespace, _a); if (["Composite"].includes(propertyMapper.type.name)) { if (serializedValue[XML_ATTRKEY]) { return serializedValue; } else { var result_1 = tslib.__assign({}, serializedValue); result_1[XML_ATTRKEY] = xmlNamespace; return result_1; } } var result = {}; result[options.xmlCharKey] = serializedValue; result[XML_ATTRKEY] = xmlNamespace; return result; } function isSpecialXmlProperty(propertyName, options) { return [XML_ATTRKEY, options.xmlCharKey].includes(propertyName); } function deserializeCompositeType(serializer, mapper, responseBody, objectName, options) { var _a; if (getPolymorphicDiscriminatorRecursively(serializer, mapper)) { mapper = getPolymorphicMapper(serializer, mapper, responseBody, "serializedName"); } var modelProps = resolveModelProperties(serializer, mapper, objectName); var instance = {}; var handledPropertyNames = []; for (var _i = 0, _b = Object.keys(modelProps); _i < _b.length; _i++) { var key = _b[_i]; var propertyMapper = modelProps[key]; var paths = splitSerializeName(modelProps[key].serializedName); handledPropertyNames.push(paths[0]); var serializedName = propertyMapper.serializedName, xmlName = propertyMapper.xmlName, xmlElementName = propertyMapper.xmlElementName; var propertyObjectName = objectName; if (serializedName !== "" && serializedName !== undefined) { propertyObjectName = objectName + "." + serializedName; } var headerCollectionPrefix = propertyMapper.headerCollectionPrefix; if (headerCollectionPrefix) { var dictionary = {}; for (var _c = 0, _d = Object.keys(responseBody); _c < _d.length; _c++) { var headerKey = _d[_c]; if (headerKey.startsWith(headerCollectionPrefix)) { dictionary[headerKey.substring(headerCollectionPrefix.length)] = serializer.deserialize(propertyMapper.type.value, responseBody[headerKey], propertyObjectName, options); } handledPropertyNames.push(headerKey); } instance[key] = dictionary; } else if (serializer.isXML) { if (propertyMapper.xmlIsAttribute && responseBody[XML_ATTRKEY]) { instance[key] = serializer.deserialize(propertyMapper, responseBody[XML_ATTRKEY][xmlName], propertyObjectName, options); } else { var propertyName = xmlElementName || xmlName || serializedName; if (propertyMapper.xmlIsWrapped) { /* a list of wrapped by For the xml example below ... ... the responseBody has { Cors: { CorsRule: [{...}, {...}] } } xmlName is "Cors" and xmlElementName is"CorsRule". */ var wrapped = responseBody[xmlName]; var elementList = (_a = wrapped === null || wrapped === void 0 ? void 0 : wrapped[xmlElementName]) !== null && _a !== void 0 ? _a : []; instance[key] = serializer.deserialize(propertyMapper, elementList, propertyObjectName, options); } else { var property = responseBody[propertyName]; instance[key] = serializer.deserialize(propertyMapper, property, propertyObjectName, options); } } } else { // deserialize the property if it is present in the provided responseBody instance var propertyInstance = void 0; var res = responseBody; // traversing the object step by step. for (var _e = 0, paths_2 = paths; _e < paths_2.length; _e++) { var item = paths_2[_e]; if (!res) break; res = res[item]; } propertyInstance = res; var polymorphicDiscriminator = mapper.type.polymorphicDiscriminator; // checking that the model property name (key)(ex: "fishtype") and the // clientName of the polymorphicDiscriminator {metadata} (ex: "fishtype") // instead of the serializedName of the polymorphicDiscriminator (ex: "fish.type") // is a better approach. The generator is not consistent with escaping '\.' in the // serializedName of the property (ex: "fish\.type") that is marked as polymorphic discriminator // and the serializedName of the metadata polymorphicDiscriminator (ex: "fish.type"). However, // the clientName transformation of the polymorphicDiscriminator (ex: "fishtype") and // the transformation of model property name (ex: "fishtype") is done consistently. // Hence, it is a safer bet to rely on the clientName of the polymorphicDiscriminator. if (polymorphicDiscriminator && key === polymorphicDiscriminator.clientName && propertyInstance == undefined) { propertyInstance = mapper.serializedName; } var serializedValue = void 0; // paging if (Array.isArray(responseBody[key]) && modelProps[key].serializedName === "") { propertyInstance = responseBody[key]; var arrayInstance = serializer.deserialize(propertyMapper, propertyInstance, propertyObjectName, options); // Copy over any properties that have already been added into the instance, where they do // not exist on the newly de-serialized array for (var _f = 0, _g = Object.entries(instance); _f < _g.length; _f++) { var _h = _g[_f], k = _h[0], v = _h[1]; if (!Object.prototype.hasOwnProperty.call(arrayInstance, k)) { arrayInstance[k] = v; } } instance = arrayInstance; } else if (propertyInstance !== undefined || propertyMapper.defaultValue !== undefined) { serializedValue = serializer.deserialize(propertyMapper, propertyInstance, propertyObjectName, options); instance[key] = serializedValue; } } } var additionalPropertiesMapper = mapper.type.additionalProperties; if (additionalPropertiesMapper) { var isAdditionalProperty = function (responsePropName) { for (var clientPropName in modelProps) { var paths = splitSerializeName(modelProps[clientPropName].serializedName); if (paths[0] === responsePropName) { return false; } } return true; }; for (var responsePropName in responseBody) { if (isAdditionalProperty(responsePropName)) { instance[responsePropName] = serializer.deserialize(additionalPropertiesMapper, responseBody[responsePropName], objectName + '["' + responsePropName + '"]', options); } } } else if (responseBody) { for (var _j = 0, _k = Object.keys(responseBody); _j < _k.length; _j++) { var key = _k[_j]; if (instance[key] === undefined && !handledPropertyNames.includes(key) && !isSpecialXmlProperty(key, options)) { instance[key] = responseBody[key]; } } } return instance; } function deserializeDictionaryType(serializer, mapper, responseBody, objectName, options) { var value = mapper.type.value; if (!value || typeof value !== "object") { throw new Error("\"value\" metadata for a Dictionary must be defined in the " + ("mapper and it must of type \"object\" in " + objectName)); } if (responseBody) { var tempDictionary = {}; for (var _i = 0, _a = Object.keys(responseBody); _i < _a.length; _i++) { var key = _a[_i]; tempDictionary[key] = serializer.deserialize(value, responseBody[key], objectName, options); } return tempDictionary; } return responseBody; } function deserializeSequenceType(serializer, mapper, responseBody, objectName, options) { var element = mapper.type.element; if (!element || typeof element !== "object") { throw new Error("element\" metadata for an Array must be defined in the " + ("mapper and it must of type \"object\" in " + objectName)); } if (responseBody) { if (!Array.isArray(responseBody)) { // xml2js will interpret a single element array as just the element, so force it to be an array responseBody = [responseBody]; } var tempArray = []; for (var i = 0; i < responseBody.length; i++) { tempArray[i] = serializer.deserialize(element, responseBody[i], objectName + "[" + i + "]", options); } return tempArray; } return responseBody; } function getPolymorphicMapper(serializer, mapper, object, polymorphicPropertyName) { var polymorphicDiscriminator = getPolymorphicDiscriminatorRecursively(serializer, mapper); if (polymorphicDiscriminator) { var discriminatorName = polymorphicDiscriminator[polymorphicPropertyName]; if (discriminatorName != undefined) { var discriminatorValue = object[discriminatorName]; if (discriminatorValue != undefined) { var typeName = mapper.type.uberParent || mapper.type.className; var indexDiscriminator = discriminatorValue === typeName ? discriminatorValue : typeName + "." + discriminatorValue; var polymorphicMapper = serializer.modelMappers.discriminators[indexDiscriminator]; if (polymorphicMapper) { mapper = polymorphicMapper; } } } } return mapper; } function getPolymorphicDiscriminatorRecursively(serializer, mapper) { return (mapper.type.polymorphicDiscriminator || getPolymorphicDiscriminatorSafely(serializer, mapper.type.uberParent) || getPolymorphicDiscriminatorSafely(serializer, mapper.type.className)); } function getPolymorphicDiscriminatorSafely(serializer, typeName) { return (typeName && serializer.modelMappers[typeName] && serializer.modelMappers[typeName].type.polymorphicDiscriminator); } // TODO: why is this here? function serializeObject(toSerialize) { var castToSerialize = toSerialize; if (toSerialize == undefined) return undefined; if (toSerialize instanceof Uint8Array) { toSerialize = encodeByteArray(toSerialize); return toSerialize; } else if (toSerialize instanceof Date) { return toSerialize.toISOString(); } else if (Array.isArray(toSerialize)) { var array = []; for (var i = 0; i < toSerialize.length; i++) { array.push(serializeObject(toSerialize[i])); } return array; } else if (typeof toSerialize === "object") { var dictionary = {}; for (var property in toSerialize) { dictionary[property] = serializeObject(castToSerialize[property]); } return dictionary; } return toSerialize; } /** * Utility function to create a K:V from a list of strings */ function strEnum(o) { var result = {}; for (var _i = 0, o_1 = o; _i < o_1.length; _i++) { var key = o_1[_i]; result[key] = key; } return result; } // eslint-disable-next-line @typescript-eslint/no-redeclare var MapperType = strEnum([ "Base64Url", "Boolean", "ByteArray", "Composite", "Date", "DateTime", "DateTimeRfc1123", "Dictionary", "Enum", "Number", "Object", "Sequence", "String", "Stream", "TimeSpan", "UnixTime" ]); // Copyright (c) Microsoft Corporation. function isWebResourceLike(object) { if (object && typeof object === "object") { var castObject = object; if (typeof castObject.url === "string" && typeof castObject.method === "string" && typeof castObject.headers === "object" && isHttpHeadersLike(castObject.headers) && typeof castObject.validateRequestProperties === "function" && typeof castObject.prepare === "function" && typeof castObject.clone === "function") { return true; } } return false; } /** * Creates a new WebResource object. * * This class provides an abstraction over a REST call by being library / implementation agnostic and wrapping the necessary * properties to initiate a request. */ var WebResource = /** @class */ (function () { function WebResource(url, method, body, query, headers, streamResponseBody, withCredentials, abortSignal, timeout, onUploadProgress, onDownloadProgress, proxySettings, keepAlive, decompressResponse, streamResponseStatusCodes) { this.streamResponseBody = streamResponseBody; this.streamResponseStatusCodes = streamResponseStatusCodes; this.url = url || ""; this.method = method || "GET"; this.headers = isHttpHeadersLike(headers) ? headers : new HttpHeaders(headers); this.body = body; this.query = query; this.formData = undefined; this.withCredentials = withCredentials || false; this.abortSignal = abortSignal; this.timeout = timeout || 0; this.onUploadProgress = onUploadProgress; this.onDownloadProgress = onDownloadProgress; this.proxySettings = proxySettings; this.keepAlive = keepAlive; this.decompressResponse = decompressResponse; this.requestId = this.headers.get("x-ms-client-request-id") || generateUuid(); } /** * Validates that the required properties such as method, url, headers["Content-Type"], * headers["accept-language"] are defined. It will throw an error if one of the above * mentioned properties are not defined. */ WebResource.prototype.validateRequestProperties = function () { if (!this.method) { throw new Error("WebResource.method is required."); } if (!this.url) { throw new Error("WebResource.url is required."); } }; /** * Prepares the request. * @param options - Options to provide for preparing the request. * @returns Returns the prepared WebResource (HTTP Request) object that needs to be given to the request pipeline. */ WebResource.prototype.prepare = function (options) { if (!options) { throw new Error("options object is required"); } if (options.method === undefined || options.method === null || typeof options.method.valueOf() !== "string") { throw new Error("options.method must be a string."); } if (options.url && options.pathTemplate) { throw new Error("options.url and options.pathTemplate are mutually exclusive. Please provide exactly one of them."); } if ((options.pathTemplate === undefined || options.pathTemplate === null || typeof options.pathTemplate.valueOf() !== "string") && (options.url === undefined || options.url === null || typeof options.url.valueOf() !== "string")) { throw new Error("Please provide exactly one of options.pathTemplate or options.url."); } // set the url if it is provided. if (options.url) { if (typeof options.url !== "string") { throw new Error('options.url must be of type "string".'); } this.url = options.url; } // set the method if (options.method) { var validMethods = ["GET", "PUT", "HEAD", "DELETE", "OPTIONS", "POST", "PATCH", "TRACE"]; if (validMethods.indexOf(options.method.toUpperCase()) === -1) { throw new Error('The provided method "' + options.method + '" is invalid. Supported HTTP methods are: ' + JSON.stringify(validMethods)); } } this.method = options.method.toUpperCase(); // construct the url if path template is provided if (options.pathTemplate) { var pathTemplate_1 = options.pathTemplate, pathParameters_1 = options.pathParameters; if (typeof pathTemplate_1 !== "string") { throw new Error('options.pathTemplate must be of type "string".'); } if (!options.baseUrl) { options.baseUrl = "https://management.azure.com"; } var baseUrl = options.baseUrl; var url_1 = baseUrl + (baseUrl.endsWith("/") ? "" : "/") + (pathTemplate_1.startsWith("/") ? pathTemplate_1.slice(1) : pathTemplate_1); var segments = url_1.match(/({[\w-]*\s*[\w-]*})/gi); if (segments && segments.length) { if (!pathParameters_1) { throw new Error("pathTemplate: " + pathTemplate_1 + " has been provided. Hence, options.pathParameters must also be provided."); } segments.forEach(function (item) { var pathParamName = item.slice(1, -1); var pathParam = pathParameters_1[pathParamName]; if (pathParam === null || pathParam === undefined || !(typeof pathParam === "string" || typeof pathParam === "object")) { var stringifiedPathParameters = JSON.stringify(pathParameters_1, undefined, 2); throw new Error("pathTemplate: " + pathTemplate_1 + " contains the path parameter " + pathParamName + (" however, it is not present in parameters: " + stringifiedPathParameters + ".") + ("The value of the path parameter can either be a \"string\" of the form { " + pathParamName + ": \"some sample value\" } or ") + ("it can be an \"object\" of the form { \"" + pathParamName + "\": { value: \"some sample value\", skipUrlEncoding: true } }.")); } if (typeof pathParam.valueOf() === "string") { url_1 = url_1.replace(item, encodeURIComponent(pathParam)); } if (typeof pathParam.valueOf() === "object") { if (!pathParam.value) { throw new Error("options.pathParameters[" + pathParamName + "] is of type \"object\" but it does not contain a \"value\" property."); } if (pathParam.skipUrlEncoding) { url_1 = url_1.replace(item, pathParam.value); } else { url_1 = url_1.replace(item, encodeURIComponent(pathParam.value)); } } }); } this.url = url_1; } // append query parameters to the url if they are provided. They can be provided with pathTemplate or url option. if (options.queryParameters) { var queryParameters = options.queryParameters; if (typeof queryParameters !== "object") { throw new Error("options.queryParameters must be of type object. It should be a JSON object " + "of \"query-parameter-name\" as the key and the \"query-parameter-value\" as the value. " + "The \"query-parameter-value\" may be fo type \"string\" or an \"object\" of the form { value: \"query-parameter-value\", skipUrlEncoding: true }."); } // append question mark if it is not present in the url if (this.url && this.url.indexOf("?") === -1) { this.url += "?"; } // construct queryString var queryParams = []; // We need to populate this.query as a dictionary if the request is being used for Sway's validateRequest(). this.query = {}; for (var queryParamName in queryParameters) { var queryParam = queryParameters[queryParamName]; if (queryParam) { if (typeof queryParam === "string") { queryParams.push(queryParamName + "=" + encodeURIComponent(queryParam)); this.query[queryParamName] = encodeURIComponent(queryParam); } else if (typeof queryParam === "object") { if (!queryParam.value) { throw new Error("options.queryParameters[" + queryParamName + "] is of type \"object\" but it does not contain a \"value\" property."); } if (queryParam.skipUrlEncoding) { queryParams.push(queryParamName + "=" + queryParam.value); this.query[queryParamName] = queryParam.value; } else { queryParams.push(queryParamName + "=" + encodeURIComponent(queryParam.value)); this.query[queryParamName] = encodeURIComponent(queryParam.value); } } } } // end-of-for // append the queryString this.url += queryParams.join("&"); } // add headers to the request if they are provided if (options.headers) { var headers = options.headers; for (var _i = 0, _a = Object.keys(options.headers); _i < _a.length; _i++) { var headerName = _a[_i]; this.headers.set(headerName, headers[headerName]); } } // ensure accept-language is set correctly if (!this.headers.get("accept-language")) { this.headers.set("accept-language", "en-US"); } // ensure the request-id is set correctly if (!this.headers.get("x-ms-client-request-id") && !options.disableClientRequestId) { this.headers.set("x-ms-client-request-id", this.requestId); } // default if (!this.headers.get("Content-Type")) { this.headers.set("Content-Type", "application/json; charset=utf-8"); } // set the request body. request.js automatically sets the Content-Length request header, so we need not set it explicitly this.body = options.body; if (options.body !== undefined && options.body !== null) { // body as a stream special case. set the body as-is and check for some special request headers specific to sending a stream. if (options.bodyIsStream) { if (!this.headers.get("Transfer-Encoding")) { this.headers.set("Transfer-Encoding", "chunked"); } if (this.headers.get("Content-Type") !== "application/octet-stream") { this.headers.set("Content-Type", "application/octet-stream"); } } else { if (options.serializationMapper) { this.body = new Serializer(options.mappers).serialize(options.serializationMapper, options.body, "requestBody"); } if (!options.disableJsonStringifyOnBody) { this.body = JSON.stringify(options.body); } } } if (options.spanOptions) { this.spanOptions = options.spanOptions; } if (options.tracingContext) { this.tracingContext = options.tracingContext; } this.abortSignal = options.abortSignal; this.onDownloadProgress = options.onDownloadProgress; this.onUploadProgress = options.onUploadProgress; return this; }; /** * Clone this WebResource HTTP request object. * @returns The clone of this WebResource HTTP request object. */ WebResource.prototype.clone = function () { var result = new WebResource(this.url, this.method, this.body, this.query, this.headers && this.headers.clone(), this.streamResponseBody, this.withCredentials, this.abortSignal, this.timeout, this.onUploadProgress, this.onDownloadProgress, this.proxySettings, this.keepAlive, this.decompressResponse, this.streamResponseStatusCodes); if (this.formData) { result.formData = this.formData; } if (this.operationSpec) { result.operationSpec = this.operationSpec; } if (this.shouldDeserialize) { result.shouldDeserialize = this.shouldDeserialize; } if (this.operationResponseGetter) { result.operationResponseGetter = this.operationResponseGetter; } return result; }; return WebResource; }()); // Copyright (c) Microsoft Corporation. var custom = util.inspect.custom; // Copyright (c) Microsoft Corporation. /** * A class that handles the query portion of a URLBuilder. */ var URLQuery = /** @class */ (function () { function URLQuery() { this._rawQuery = {}; } /** * Get whether or not there any query parameters in this URLQuery. */ URLQuery.prototype.any = function () { return Object.keys(this._rawQuery).length > 0; }; /** * Get the keys of the query string. */ URLQuery.prototype.keys = function () { return Object.keys(this._rawQuery); }; /** * Set a query parameter with the provided name and value. If the parameterValue is undefined or * empty, then this will attempt to remove an existing query parameter with the provided * parameterName. */ URLQuery.prototype.set = function (parameterName, parameterValue) { var caseParameterValue = parameterValue; if (parameterName) { if (caseParameterValue !== undefined && caseParameterValue !== null) { var newValue = Array.isArray(caseParameterValue) ? caseParameterValue : caseParameterValue.toString(); this._rawQuery[parameterName] = newValue; } else { delete this._rawQuery[parameterName]; } } }; /** * Get the value of the query parameter with the provided name. If no parameter exists with the * provided parameter name, then undefined will be returned. */ URLQuery.prototype.get = function (parameterName) { return parameterName ? this._rawQuery[parameterName] : undefined; }; /** * Get the string representation of this query. The return value will not start with a "?". */ URLQuery.prototype.toString = function () { var result = ""; for (var parameterName in this._rawQuery) { if (result) { result += "&"; } var parameterValue = this._rawQuery[parameterName]; if (Array.isArray(parameterValue)) { var parameterStrings = []; for (var _i = 0, parameterValue_1 = parameterValue; _i < parameterValue_1.length; _i++) { var parameterValueElement = parameterValue_1[_i]; parameterStrings.push(parameterName + "=" + parameterValueElement); } result += parameterStrings.join("&"); } else { result += parameterName + "=" + parameterValue; } } return result; }; /** * Parse a URLQuery from the provided text. */ URLQuery.parse = function (text) { var result = new URLQuery(); if (text) { if (text.startsWith("?")) { text = text.substring(1); } var currentState = "ParameterName"; var parameterName = ""; var parameterValue = ""; for (var i = 0; i < text.length; ++i) { var currentCharacter = text[i]; switch (currentState) { case "ParameterName": switch (currentCharacter) { case "=": currentState = "ParameterValue"; break; case "&": parameterName = ""; parameterValue = ""; break; default: parameterName += currentCharacter; break; } break; case "ParameterValue": switch (currentCharacter) { case "&": result.set(parameterName, parameterValue); parameterName = ""; parameterValue = ""; currentState = "ParameterName"; break; default: parameterValue += currentCharacter; break; } break; default: throw new Error("Unrecognized URLQuery parse state: " + currentState); } } if (currentState === "ParameterValue") { result.set(parameterName, parameterValue); } } return result; }; return URLQuery; }()); /** * A class that handles creating, modifying, and parsing URLs. */ var URLBuilder = /** @class */ (function () { function URLBuilder() { } /** * Set the scheme/protocol for this URL. If the provided scheme contains other parts of a URL * (such as a host, port, path, or query), those parts will be added to this URL as well. */ URLBuilder.prototype.setScheme = function (scheme) { if (!scheme) { this._scheme = undefined; } else { this.set(scheme, "SCHEME"); } }; /** * Get the scheme that has been set in this URL. */ URLBuilder.prototype.getScheme = function () { return this._scheme; }; /** * Set the host for this URL. If the provided host contains other parts of a URL (such as a * port, path, or query), those parts will be added to this URL as well. */ URLBuilder.prototype.setHost = function (host) { if (!host) { this._host = undefined; } else { this.set(host, "SCHEME_OR_HOST"); } }; /** * Get the host that has been set in this URL. */ URLBuilder.prototype.getHost = function () { return this._host; }; /** * Set the port for this URL. If the provided port contains other parts of a URL (such as a * path or query), those parts will be added to this URL as well. */ URLBuilder.prototype.setPort = function (port) { if (port === undefined || port === null || port === "") { this._port = undefined; } else { this.set(port.toString(), "PORT"); } }; /** * Get the port that has been set in this URL. */ URLBuilder.prototype.getPort = function () { return this._port; }; /** * Set the path for this URL. If the provided path contains a query, then it will be added to * this URL as well. */ URLBuilder.prototype.setPath = function (path) { if (!path) { this._path = undefined; } else { var schemeIndex = path.indexOf("://"); if (schemeIndex !== -1) { var schemeStart = path.lastIndexOf("/", schemeIndex); // Make sure to only grab the URL part of the path before setting the state back to SCHEME // this will handle cases such as "/a/b/c/https://microsoft.com" => "https://microsoft.com" this.set(schemeStart === -1 ? path : path.substr(schemeStart + 1), "SCHEME"); } else { this.set(path, "PATH"); } } }; /** * Append the provided path to this URL's existing path. If the provided path contains a query, * then it will be added to this URL as well. */ URLBuilder.prototype.appendPath = function (path) { if (path) { var currentPath = this.getPath(); if (currentPath) { if (!currentPath.endsWith("/")) { currentPath += "/"; } if (path.startsWith("/")) { path = path.substring(1); } path = currentPath + path; } this.set(path, "PATH"); } }; /** * Get the path that has been set in this URL. */ URLBuilder.prototype.getPath = function () { return this._path; }; /** * Set the query in this URL. */ URLBuilder.prototype.setQuery = function (query) { if (!query) { this._query = undefined; } else { this._query = URLQuery.parse(query); } }; /** * Set a query parameter with the provided name and value in this URL's query. If the provided * query parameter value is undefined or empty, then the query parameter will be removed if it * existed. */ URLBuilder.prototype.setQueryParameter = function (queryParameterName, queryParameterValue) { if (queryParameterName) { if (!this._query) { this._query = new URLQuery(); } this._query.set(queryParameterName, queryParameterValue); } }; /** * Get the value of the query parameter with the provided query parameter name. If no query * parameter exists with the provided name, then undefined will be returned. */ URLBuilder.prototype.getQueryParameterValue = function (queryParameterName) { return this._query ? this._query.get(queryParameterName) : undefined; }; /** * Get the query in this URL. */ URLBuilder.prototype.getQuery = function () { return this._query ? this._query.toString() : undefined; }; /** * Set the parts of this URL by parsing the provided text using the provided startState. */ URLBuilder.prototype.set = function (text, startState) { var tokenizer = new URLTokenizer(text, startState); while (tokenizer.next()) { var token = tokenizer.current(); var tokenPath = void 0; if (token) { switch (token.type) { case "SCHEME": this._scheme = token.text || undefined; break; case "HOST": this._host = token.text || undefined; break; case "PORT": this._port = token.text || undefined; break; case "PATH": tokenPath = token.text || undefined; if (!this._path || this._path === "/" || tokenPath !== "/") { this._path = tokenPath; } break; case "QUERY": this._query = URLQuery.parse(token.text); break; default: throw new Error("Unrecognized URLTokenType: " + token.type); } } } }; URLBuilder.prototype.toString = function () { var result = ""; if (this._scheme) { result += this._scheme + "://"; } if (this._host) { result += this._host; } if (this._port) { result += ":" + this._port; } if (this._path) { if (!this._path.startsWith("/")) { result += "/"; } result += this._path; } if (this._query && this._query.any()) { result += "?" + this._query.toString(); } return result; }; /** * If the provided searchValue is found in this URLBuilder, then replace it with the provided * replaceValue. */ URLBuilder.prototype.replaceAll = function (searchValue, replaceValue) { if (searchValue) { this.setScheme(replaceAll(this.getScheme(), searchValue, replaceValue)); this.setHost(replaceAll(this.getHost(), searchValue, replaceValue)); this.setPort(replaceAll(this.getPort(), searchValue, replaceValue)); this.setPath(replaceAll(this.getPath(), searchValue, replaceValue)); this.setQuery(replaceAll(this.getQuery(), searchValue, replaceValue)); } }; URLBuilder.parse = function (text) { var result = new URLBuilder(); result.set(text, "SCHEME_OR_HOST"); return result; }; return URLBuilder; }()); var URLToken = /** @class */ (function () { function URLToken(text, type) { this.text = text; this.type = type; } URLToken.scheme = function (text) { return new URLToken(text, "SCHEME"); }; URLToken.host = function (text) { return new URLToken(text, "HOST"); }; URLToken.port = function (text) { return new URLToken(text, "PORT"); }; URLToken.path = function (text) { return new URLToken(text, "PATH"); }; URLToken.query = function (text) { return new URLToken(text, "QUERY"); }; return URLToken; }()); /** * Get whether or not the provided character (single character string) is an alphanumeric (letter or * digit) character. */ function isAlphaNumericCharacter(character) { var characterCode = character.charCodeAt(0); return ((48 /* '0' */ <= characterCode && characterCode <= 57) /* '9' */ || (65 /* 'A' */ <= characterCode && characterCode <= 90) /* 'Z' */ || (97 /* 'a' */ <= characterCode && characterCode <= 122) /* 'z' */); } /** * A class that tokenizes URL strings. */ var URLTokenizer = /** @class */ (function () { function URLTokenizer(_text, state) { this._text = _text; this._textLength = _text ? _text.length : 0; this._currentState = state !== undefined && state !== null ? state : "SCHEME_OR_HOST"; this._currentIndex = 0; } /** * Get the current URLToken this URLTokenizer is pointing at, or undefined if the URLTokenizer * hasn't started or has finished tokenizing. */ URLTokenizer.prototype.current = function () { return this._currentToken; }; /** * Advance to the next URLToken and return whether or not a URLToken was found. */ URLTokenizer.prototype.next = function () { if (!hasCurrentCharacter(this)) { this._currentToken = undefined; } else { switch (this._currentState) { case "SCHEME": nextScheme(this); break; case "SCHEME_OR_HOST": nextSchemeOrHost(this); break; case "HOST": nextHost(this); break; case "PORT": nextPort(this); break; case "PATH": nextPath(this); break; case "QUERY": nextQuery(this); break; default: throw new Error("Unrecognized URLTokenizerState: " + this._currentState); } } return !!this._currentToken; }; return URLTokenizer; }()); /** * Read the remaining characters from this Tokenizer's character stream. */ function readRemaining(tokenizer) { var result = ""; if (tokenizer._currentIndex < tokenizer._textLength) { result = tokenizer._text.substring(tokenizer._currentIndex); tokenizer._currentIndex = tokenizer._textLength; } return result; } /** * Whether or not this URLTokenizer has a current character. */ function hasCurrentCharacter(tokenizer) { return tokenizer._currentIndex < tokenizer._textLength; } /** * Get the character in the text string at the current index. */ function getCurrentCharacter(tokenizer) { return tokenizer._text[tokenizer._currentIndex]; } /** * Advance to the character in text that is "step" characters ahead. If no step value is provided, * then step will default to 1. */ function nextCharacter(tokenizer, step) { if (hasCurrentCharacter(tokenizer)) { if (!step) { step = 1; } tokenizer._currentIndex += step; } } /** * Starting with the current character, peek "charactersToPeek" number of characters ahead in this * Tokenizer's stream of characters. */ function peekCharacters(tokenizer, charactersToPeek) { var endIndex = tokenizer._currentIndex + charactersToPeek; if (tokenizer._textLength < endIndex) { endIndex = tokenizer._textLength; } return tokenizer._text.substring(tokenizer._currentIndex, endIndex); } /** * Read characters from this Tokenizer until the end of the stream or until the provided condition * is false when provided the current character. */ function readWhile(tokenizer, condition) { var result = ""; while (hasCurrentCharacter(tokenizer)) { var currentCharacter = getCurrentCharacter(tokenizer); if (!condition(currentCharacter)) { break; } else { result += currentCharacter; nextCharacter(tokenizer); } } return result; } /** * Read characters from this Tokenizer until a non-alphanumeric character or the end of the * character stream is reached. */ function readWhileLetterOrDigit(tokenizer) { return readWhile(tokenizer, function (character) { return isAlphaNumericCharacter(character); }); } /** * Read characters from this Tokenizer until one of the provided terminating characters is read or * the end of the character stream is reached. */ function readUntilCharacter(tokenizer) { var terminatingCharacters = []; for (var _i = 1; _i < arguments.length; _i++) { terminatingCharacters[_i - 1] = arguments[_i]; } return readWhile(tokenizer, function (character) { return terminatingCharacters.indexOf(character) === -1; }); } function nextScheme(tokenizer) { var scheme = readWhileLetterOrDigit(tokenizer); tokenizer._currentToken = URLToken.scheme(scheme); if (!hasCurrentCharacter(tokenizer)) { tokenizer._currentState = "DONE"; } else { tokenizer._currentState = "HOST"; } } function nextSchemeOrHost(tokenizer) { var schemeOrHost = readUntilCharacter(tokenizer, ":", "/", "?"); if (!hasCurrentCharacter(tokenizer)) { tokenizer._currentToken = URLToken.host(schemeOrHost); tokenizer._currentState = "DONE"; } else if (getCurrentCharacter(tokenizer) === ":") { if (peekCharacters(tokenizer, 3) === "://") { tokenizer._currentToken = URLToken.scheme(schemeOrHost); tokenizer._currentState = "HOST"; } else { tokenizer._currentToken = URLToken.host(schemeOrHost); tokenizer._currentState = "PORT"; } } else { tokenizer._currentToken = URLToken.host(schemeOrHost); if (getCurrentCharacter(tokenizer) === "/") { tokenizer._currentState = "PATH"; } else { tokenizer._currentState = "QUERY"; } } } function nextHost(tokenizer) { if (peekCharacters(tokenizer, 3) === "://") { nextCharacter(tokenizer, 3); } var host = readUntilCharacter(tokenizer, ":", "/", "?"); tokenizer._currentToken = URLToken.host(host); if (!hasCurrentCharacter(tokenizer)) { tokenizer._currentState = "DONE"; } else if (getCurrentCharacter(tokenizer) === ":") { tokenizer._currentState = "PORT"; } else if (getCurrentCharacter(tokenizer) === "/") { tokenizer._currentState = "PATH"; } else { tokenizer._currentState = "QUERY"; } } function nextPort(tokenizer) { if (getCurrentCharacter(tokenizer) === ":") { nextCharacter(tokenizer); } var port = readUntilCharacter(tokenizer, "/", "?"); tokenizer._currentToken = URLToken.port(port); if (!hasCurrentCharacter(tokenizer)) { tokenizer._currentState = "DONE"; } else if (getCurrentCharacter(tokenizer) === "/") { tokenizer._currentState = "PATH"; } else { tokenizer._currentState = "QUERY"; } } function nextPath(tokenizer) { var path = readUntilCharacter(tokenizer, "?"); tokenizer._currentToken = URLToken.path(path); if (!hasCurrentCharacter(tokenizer)) { tokenizer._currentState = "DONE"; } else { tokenizer._currentState = "QUERY"; } } function nextQuery(tokenizer) { if (getCurrentCharacter(tokenizer) === "?") { nextCharacter(tokenizer); } var query = readRemaining(tokenizer); tokenizer._currentToken = URLToken.query(query); tokenizer._currentState = "DONE"; } // Copyright (c) Microsoft Corporation. var RedactedString = "REDACTED"; var defaultAllowedHeaderNames = [ "x-ms-client-request-id", "x-ms-return-client-request-id", "x-ms-useragent", "x-ms-correlation-request-id", "x-ms-request-id", "client-request-id", "ms-cv", "return-client-request-id", "traceparent", "Access-Control-Allow-Credentials", "Access-Control-Allow-Headers", "Access-Control-Allow-Methods", "Access-Control-Allow-Origin", "Access-Control-Expose-Headers", "Access-Control-Max-Age", "Access-Control-Request-Headers", "Access-Control-Request-Method", "Origin", "Accept", "Accept-Encoding", "Cache-Control", "Connection", "Content-Length", "Content-Type", "Date", "ETag", "Expires", "If-Match", "If-Modified-Since", "If-None-Match", "If-Unmodified-Since", "Last-Modified", "Pragma", "Request-Id", "Retry-After", "Server", "Transfer-Encoding", "User-Agent" ]; var defaultAllowedQueryParameters = ["api-version"]; var Sanitizer = /** @class */ (function () { function Sanitizer(_a) { var _b = _a === void 0 ? {} : _a, _c = _b.allowedHeaderNames, allowedHeaderNames = _c === void 0 ? [] : _c, _d = _b.allowedQueryParameters, allowedQueryParameters = _d === void 0 ? [] : _d; allowedHeaderNames = Array.isArray(allowedHeaderNames) ? defaultAllowedHeaderNames.concat(allowedHeaderNames) : defaultAllowedHeaderNames; allowedQueryParameters = Array.isArray(allowedQueryParameters) ? defaultAllowedQueryParameters.concat(allowedQueryParameters) : defaultAllowedQueryParameters; this.allowedHeaderNames = new Set(allowedHeaderNames.map(function (n) { return n.toLowerCase(); })); this.allowedQueryParameters = new Set(allowedQueryParameters.map(function (p) { return p.toLowerCase(); })); } Sanitizer.prototype.sanitize = function (obj) { var _this = this; var seen = new Set(); return JSON.stringify(obj, function (key, value) { // Ensure Errors include their interesting non-enumerable members if (value instanceof Error) { return tslib.__assign(tslib.__assign({}, value), { name: value.name, message: value.message }); } if (key === "_headersMap") { return _this.sanitizeHeaders(value); } else if (key === "url") { return _this.sanitizeUrl(value); } else if (key === "query") { return _this.sanitizeQuery(value); } else if (key === "body") { // Don't log the request body return undefined; } else if (key === "response") { // Don't log response again return undefined; } else if (key === "operationSpec") { // When using sendOperationRequest, the request carries a massive // field with the autorest spec. No need to log it. return undefined; } else if (Array.isArray(value) || isObject(value)) { if (seen.has(value)) { return "[Circular]"; } seen.add(value); } return value; }, 2); }; Sanitizer.prototype.sanitizeHeaders = function (value) { return this.sanitizeObject(value, this.allowedHeaderNames, function (v, k) { return v[k].value; }); }; Sanitizer.prototype.sanitizeQuery = function (value) { return this.sanitizeObject(value, this.allowedQueryParameters, function (v, k) { return v[k]; }); }; Sanitizer.prototype.sanitizeObject = function (value, allowedKeys, accessor) { if (typeof value !== "object" || value === null) { return value; } var sanitized = {}; for (var _i = 0, _a = Object.keys(value); _i < _a.length; _i++) { var k = _a[_i]; if (allowedKeys.has(k.toLowerCase())) { sanitized[k] = accessor(value, k); } else { sanitized[k] = RedactedString; } } return sanitized; }; Sanitizer.prototype.sanitizeUrl = function (value) { if (typeof value !== "string" || value === null) { return value; } var urlBuilder = URLBuilder.parse(value); var queryString = urlBuilder.getQuery(); if (!queryString) { return value; } var query = URLQuery.parse(queryString); for (var _i = 0, _a = query.keys(); _i < _a.length; _i++) { var k = _a[_i]; if (!this.allowedQueryParameters.has(k.toLowerCase())) { query.set(k, RedactedString); } } urlBuilder.setQuery(query.toString()); return urlBuilder.toString(); }; return Sanitizer; }()); // Copyright (c) Microsoft Corporation. var errorSanitizer = new Sanitizer(); var RestError = /** @class */ (function (_super) { tslib.__extends(RestError, _super); function RestError(message, code, statusCode, request, response) { var _this = _super.call(this, message) || this; _this.name = "RestError"; _this.code = code; _this.statusCode = statusCode; _this.request = request; _this.response = response; Object.setPrototypeOf(_this, RestError.prototype); return _this; } /** * Logging method for util.inspect in Node */ RestError.prototype[custom] = function () { return "RestError: " + this.message + " \n " + errorSanitizer.sanitize(this); }; RestError.REQUEST_SEND_ERROR = "REQUEST_SEND_ERROR"; RestError.PARSE_ERROR = "PARSE_ERROR"; return RestError; }(Error)); // Copyright (c) Microsoft Corporation. var logger = logger$1.createClientLogger("core-http"); // Copyright (c) Microsoft Corporation. var ReportTransform = /** @class */ (function (_super) { tslib.__extends(ReportTransform, _super); function ReportTransform(progressCallback) { var _this = _super.call(this) || this; _this.progressCallback = progressCallback; _this.loadedBytes = 0; return _this; } ReportTransform.prototype._transform = function (chunk, _encoding, callback) { this.push(chunk); this.loadedBytes += chunk.length; this.progressCallback({ loadedBytes: this.loadedBytes }); callback(undefined); }; return ReportTransform; }(stream.Transform)); var FetchHttpClient = /** @class */ (function () { function FetchHttpClient() { } FetchHttpClient.prototype.sendRequest = function (httpRequest) { var _a; return tslib.__awaiter(this, void 0, void 0, function () { var abortController$1, abortListener, formData, requestForm_1, appendFormValue, _i, _b, formKey, formValue, j, contentType, body, onUploadProgress, uploadReportStream, platformSpecificRequestInit, requestInit, operationResponse, response, headers, streaming, _c, onDownloadProgress, responseBody, downloadReportStream, length_1, error_1, fetchError, uploadStreamDone, downloadStreamDone; var _d; return tslib.__generator(this, function (_e) { switch (_e.label) { case 0: if (!httpRequest && typeof httpRequest !== "object") { throw new Error("'httpRequest' (WebResourceLike) cannot be null or undefined and must be of type object."); } abortController$1 = new abortController.AbortController(); if (httpRequest.abortSignal) { if (httpRequest.abortSignal.aborted) { throw new abortController.AbortError("The operation was aborted."); } abortListener = function (event) { if (event.type === "abort") { abortController$1.abort(); } }; httpRequest.abortSignal.addEventListener("abort", abortListener); } if (httpRequest.timeout) { setTimeout(function () { abortController$1.abort(); }, httpRequest.timeout); } if (httpRequest.formData) { formData = httpRequest.formData; requestForm_1 = new FormData(); appendFormValue = function (key, value) { // value function probably returns a stream so we can provide a fresh stream on each retry if (typeof value === "function") { value = value(); } if (value && Object.prototype.hasOwnProperty.call(value, "value") && Object.prototype.hasOwnProperty.call(value, "options")) { requestForm_1.append(key, value.value, value.options); } else { requestForm_1.append(key, value); } }; for (_i = 0, _b = Object.keys(formData); _i < _b.length; _i++) { formKey = _b[_i]; formValue = formData[formKey]; if (Array.isArray(formValue)) { for (j = 0; j < formValue.length; j++) { appendFormValue(formKey, formValue[j]); } } else { appendFormValue(formKey, formValue); } } httpRequest.body = requestForm_1; httpRequest.formData = undefined; contentType = httpRequest.headers.get("Content-Type"); if (contentType && contentType.indexOf("multipart/form-data") !== -1) { if (typeof requestForm_1.getBoundary === "function") { httpRequest.headers.set("Content-Type", "multipart/form-data; boundary=" + requestForm_1.getBoundary()); } else { // browser will automatically apply a suitable content-type header httpRequest.headers.remove("Content-Type"); } } } body = httpRequest.body ? typeof httpRequest.body === "function" ? httpRequest.body() : httpRequest.body : undefined; if (httpRequest.onUploadProgress && httpRequest.body) { onUploadProgress = httpRequest.onUploadProgress; uploadReportStream = new ReportTransform(onUploadProgress); if (isReadableStream(body)) { body.pipe(uploadReportStream); } else { uploadReportStream.end(body); } body = uploadReportStream; } return [4 /*yield*/, this.prepareRequest(httpRequest)]; case 1: platformSpecificRequestInit = _e.sent(); requestInit = tslib.__assign({ body: body, headers: httpRequest.headers.rawHeaders(), method: httpRequest.method, signal: abortController$1.signal, redirect: "manual" }, platformSpecificRequestInit); _e.label = 2; case 2: _e.trys.push([2, 8, 9, 10]); return [4 /*yield*/, this.fetch(httpRequest.url, requestInit)]; case 3: response = _e.sent(); headers = parseHeaders(response.headers); streaming = ((_a = httpRequest.streamResponseStatusCodes) === null || _a === void 0 ? void 0 : _a.has(response.status)) || httpRequest.streamResponseBody; _d = { headers: headers, request: httpRequest, status: response.status, readableStreamBody: streaming ? response.body : undefined }; if (!!streaming) return [3 /*break*/, 5]; return [4 /*yield*/, response.text()]; case 4: _c = _e.sent(); return [3 /*break*/, 6]; case 5: _c = undefined; _e.label = 6; case 6: operationResponse = (_d.bodyAsText = _c, _d); onDownloadProgress = httpRequest.onDownloadProgress; if (onDownloadProgress) { responseBody = response.body || undefined; if (isReadableStream(responseBody)) { downloadReportStream = new ReportTransform(onDownloadProgress); responseBody.pipe(downloadReportStream); operationResponse.readableStreamBody = downloadReportStream; } else { length_1 = parseInt(headers.get("Content-Length")) || undefined; if (length_1) { // Calling callback for non-stream response for consistency with browser onDownloadProgress({ loadedBytes: length_1 }); } } } return [4 /*yield*/, this.processRequest(operationResponse)]; case 7: _e.sent(); return [2 /*return*/, operationResponse]; case 8: error_1 = _e.sent(); fetchError = error_1; if (fetchError.code === "ENOTFOUND") { throw new RestError(fetchError.message, RestError.REQUEST_SEND_ERROR, undefined, httpRequest); } else if (fetchError.type === "aborted") { throw new abortController.AbortError("The operation was aborted."); } throw fetchError; case 9: // clean up event listener if (httpRequest.abortSignal && abortListener) { uploadStreamDone = Promise.resolve(); if (isReadableStream(body)) { uploadStreamDone = isStreamComplete(body); } downloadStreamDone = Promise.resolve(); if (isReadableStream(operationResponse === null || operationResponse === void 0 ? void 0 : operationResponse.readableStreamBody)) { downloadStreamDone = isStreamComplete(operationResponse.readableStreamBody); } Promise.all([uploadStreamDone, downloadStreamDone]) .then(function () { var _a; (_a = httpRequest.abortSignal) === null || _a === void 0 ? void 0 : _a.removeEventListener("abort", abortListener); return; }) .catch(function (e) { logger.warning("Error when cleaning up abortListener on httpRequest", e); }); } return [7 /*endfinally*/]; case 10: return [2 /*return*/]; } }); }); }; return FetchHttpClient; }()); function isReadableStream(body) { return body && typeof body.pipe === "function"; } function isStreamComplete(stream) { return new Promise(function (resolve) { stream.on("close", resolve); stream.on("end", resolve); stream.on("error", resolve); }); } function parseHeaders(headers) { var httpHeaders = new HttpHeaders(); headers.forEach(function (value, key) { httpHeaders.set(key, value); }); return httpHeaders; } // Copyright (c) Microsoft Corporation. function createProxyAgent(requestUrl, proxySettings, headers) { var host = URLBuilder.parse(proxySettings.host).getHost(); if (!host) { throw new Error("Expecting a non-empty host in proxy settings."); } if (!isValidPort(proxySettings.port)) { throw new Error("Expecting a valid port number in the range of [0, 65535] in proxy settings."); } var tunnelOptions = { proxy: { host: host, port: proxySettings.port, headers: (headers && headers.rawHeaders()) || {} } }; if (proxySettings.username && proxySettings.password) { tunnelOptions.proxy.proxyAuth = proxySettings.username + ":" + proxySettings.password; } var isRequestHttps = isUrlHttps(requestUrl); var isProxyHttps = isUrlHttps(proxySettings.host); var proxyAgent = { isHttps: isRequestHttps, agent: createTunnel(isRequestHttps, isProxyHttps, tunnelOptions) }; return proxyAgent; } function isUrlHttps(url) { var urlScheme = URLBuilder.parse(url).getScheme() || ""; return urlScheme.toLowerCase() === "https"; } function createTunnel(isRequestHttps, isProxyHttps, tunnelOptions) { if (isRequestHttps && isProxyHttps) { return tunnel.httpsOverHttps(tunnelOptions); } else if (isRequestHttps && !isProxyHttps) { return tunnel.httpsOverHttp(tunnelOptions); } else if (!isRequestHttps && isProxyHttps) { return tunnel.httpOverHttps(tunnelOptions); } else { return tunnel.httpOverHttp(tunnelOptions); } } function isValidPort(port) { // any port in 0-65535 range is valid (RFC 793) even though almost all implementations // will reserve 0 for a specific purpose, and a range of numbers for ephemeral ports return 0 <= port && port <= 65535; } // Copyright (c) Microsoft Corporation. function getCachedAgent(isHttps, agentCache) { return isHttps ? agentCache.httpsAgent : agentCache.httpAgent; } var NodeFetchHttpClient = /** @class */ (function (_super) { tslib.__extends(NodeFetchHttpClient, _super); function NodeFetchHttpClient() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.proxyAgents = {}; _this.keepAliveAgents = {}; _this.cookieJar = new tough.CookieJar(undefined, { looseMode: true }); return _this; } NodeFetchHttpClient.prototype.getOrCreateAgent = function (httpRequest) { var isHttps = isUrlHttps(httpRequest.url); // At the moment, proxy settings and keepAlive are mutually // exclusive because the 'tunnel' library currently lacks the // ability to create a proxy with keepAlive turned on. if (httpRequest.proxySettings) { var agent = getCachedAgent(isHttps, this.proxyAgents); if (agent) { return agent; } var tunnel = createProxyAgent(httpRequest.url, httpRequest.proxySettings, httpRequest.headers); agent = tunnel.agent; if (tunnel.isHttps) { this.proxyAgents.httpsAgent = tunnel.agent; } else { this.proxyAgents.httpAgent = tunnel.agent; } return agent; } else if (httpRequest.keepAlive) { var agent = getCachedAgent(isHttps, this.keepAliveAgents); if (agent) { return agent; } var agentOptions = { keepAlive: httpRequest.keepAlive }; if (isHttps) { agent = this.keepAliveAgents.httpsAgent = new https.Agent(agentOptions); } else { agent = this.keepAliveAgents.httpAgent = new http.Agent(agentOptions); } return agent; } else { return isHttps ? https.globalAgent : http.globalAgent; } }; // eslint-disable-next-line @azure/azure-sdk/ts-apisurface-standardized-verbs NodeFetchHttpClient.prototype.fetch = function (input, init) { return tslib.__awaiter(this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { return [2 /*return*/, node_fetch(input, init)]; }); }); }; NodeFetchHttpClient.prototype.prepareRequest = function (httpRequest) { return tslib.__awaiter(this, void 0, void 0, function () { var requestInit, cookieString; var _this = this; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: requestInit = {}; if (!(this.cookieJar && !httpRequest.headers.get("Cookie"))) return [3 /*break*/, 2]; return [4 /*yield*/, new Promise(function (resolve, reject) { _this.cookieJar.getCookieString(httpRequest.url, function (err, cookie) { if (err) { reject(err); } else { resolve(cookie); } }); })]; case 1: cookieString = _a.sent(); httpRequest.headers.set("Cookie", cookieString); _a.label = 2; case 2: // Set the http(s) agent requestInit.agent = this.getOrCreateAgent(httpRequest); requestInit.compress = httpRequest.decompressResponse; return [2 /*return*/, requestInit]; } }); }); }; NodeFetchHttpClient.prototype.processRequest = function (operationResponse) { return tslib.__awaiter(this, void 0, void 0, function () { var setCookieHeader_1; var _this = this; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: if (!this.cookieJar) return [3 /*break*/, 2]; setCookieHeader_1 = operationResponse.headers.get("Set-Cookie"); if (!(setCookieHeader_1 !== undefined)) return [3 /*break*/, 2]; return [4 /*yield*/, new Promise(function (resolve, reject) { _this.cookieJar.setCookie(setCookieHeader_1, operationResponse.request.url, { ignoreError: true }, function (err) { if (err) { reject(err); } else { resolve(); } }); })]; case 1: _a.sent(); _a.label = 2; case 2: return [2 /*return*/]; } }); }); }; return NodeFetchHttpClient; }(FetchHttpClient)); // Copyright (c) Microsoft Corporation. (function (HttpPipelineLogLevel) { /** * A log level that indicates that no logs will be logged. */ HttpPipelineLogLevel[HttpPipelineLogLevel["OFF"] = 0] = "OFF"; /** * An error log. */ HttpPipelineLogLevel[HttpPipelineLogLevel["ERROR"] = 1] = "ERROR"; /** * A warning log. */ HttpPipelineLogLevel[HttpPipelineLogLevel["WARNING"] = 2] = "WARNING"; /** * An information log. */ HttpPipelineLogLevel[HttpPipelineLogLevel["INFO"] = 3] = "INFO"; })(exports.HttpPipelineLogLevel || (exports.HttpPipelineLogLevel = {})); /** * Converts an OperationOptions to a RequestOptionsBase * * @param opts - OperationOptions object to convert to RequestOptionsBase */ function operationOptionsToRequestOptionsBase(opts) { var requestOptions = opts.requestOptions, tracingOptions = opts.tracingOptions, additionalOptions = tslib.__rest(opts, ["requestOptions", "tracingOptions"]); var result = additionalOptions; if (requestOptions) { result = tslib.__assign(tslib.__assign({}, result), requestOptions); } if (tracingOptions) { result.spanOptions = tracingOptions.spanOptions; result.tracingContext = tracingOptions.tracingContext; } return result; } // Copyright (c) Microsoft Corporation. var BaseRequestPolicy = /** @class */ (function () { function BaseRequestPolicy(_nextPolicy, _options) { this._nextPolicy = _nextPolicy; this._options = _options; } /** * Get whether or not a log with the provided log level should be logged. * @param logLevel - The log level of the log that will be logged. * @returns Whether or not a log with the provided log level should be logged. */ BaseRequestPolicy.prototype.shouldLog = function (logLevel) { return this._options.shouldLog(logLevel); }; /** * Attempt to log the provided message to the provided logger. If no logger was provided or if * the log level does not meat the logger's threshold, then nothing will be logged. * @param logLevel - The log level of this log. * @param message - The message of this log. */ BaseRequestPolicy.prototype.log = function (logLevel, message) { this._options.log(logLevel, message); }; return BaseRequestPolicy; }()); /** * Optional properties that can be used when creating a RequestPolicy. */ var RequestPolicyOptions = /** @class */ (function () { function RequestPolicyOptions(_logger) { this._logger = _logger; } /** * Get whether or not a log with the provided log level should be logged. * @param logLevel - The log level of the log that will be logged. * @returns Whether or not a log with the provided log level should be logged. */ RequestPolicyOptions.prototype.shouldLog = function (logLevel) { return (!!this._logger && logLevel !== exports.HttpPipelineLogLevel.OFF && logLevel <= this._logger.minimumLogLevel); }; /** * Attempt to log the provided message to the provided logger. If no logger was provided or if * the log level does not meet the logger's threshold, then nothing will be logged. * @param logLevel - The log level of this log. * @param message - The message of this log. */ RequestPolicyOptions.prototype.log = function (logLevel, message) { if (this._logger && this.shouldLog(logLevel)) { this._logger.log(logLevel, message); } }; return RequestPolicyOptions; }()); // Copyright (c) Microsoft Corporation. function logPolicy(loggingOptions) { if (loggingOptions === void 0) { loggingOptions = {}; } return { create: function (nextPolicy, options) { return new LogPolicy(nextPolicy, options, loggingOptions); } }; } var LogPolicy = /** @class */ (function (_super) { tslib.__extends(LogPolicy, _super); function LogPolicy(nextPolicy, options, _a) { var _b = _a === void 0 ? {} : _a, _c = _b.logger, logger$1 = _c === void 0 ? logger.info : _c, _d = _b.allowedHeaderNames, allowedHeaderNames = _d === void 0 ? [] : _d, _e = _b.allowedQueryParameters, allowedQueryParameters = _e === void 0 ? [] : _e; var _this = _super.call(this, nextPolicy, options) || this; _this.logger = logger$1; _this.sanitizer = new Sanitizer({ allowedHeaderNames: allowedHeaderNames, allowedQueryParameters: allowedQueryParameters }); return _this; } Object.defineProperty(LogPolicy.prototype, "allowedHeaderNames", { /** * Header names whose values will be logged when logging is enabled. Defaults to * Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers * specified in this field will be added to that list. Any other values will * be written to logs as "REDACTED". * @deprecated Pass these into the constructor instead. */ get: function () { return this.sanitizer.allowedHeaderNames; }, /** * Header names whose values will be logged when logging is enabled. Defaults to * Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers * specified in this field will be added to that list. Any other values will * be written to logs as "REDACTED". * @deprecated Pass these into the constructor instead. */ set: function (allowedHeaderNames) { this.sanitizer.allowedHeaderNames = allowedHeaderNames; }, enumerable: false, configurable: true }); Object.defineProperty(LogPolicy.prototype, "allowedQueryParameters", { /** * Query string names whose values will be logged when logging is enabled. By default no * query string values are logged. * @deprecated Pass these into the constructor instead. */ get: function () { return this.sanitizer.allowedQueryParameters; }, /** * Query string names whose values will be logged when logging is enabled. By default no * query string values are logged. * @deprecated Pass these into the constructor instead. */ set: function (allowedQueryParameters) { this.sanitizer.allowedQueryParameters = allowedQueryParameters; }, enumerable: false, configurable: true }); LogPolicy.prototype.sendRequest = function (request) { var _this = this; if (!this.logger.enabled) return this._nextPolicy.sendRequest(request); this.logRequest(request); return this._nextPolicy.sendRequest(request).then(function (response) { return _this.logResponse(response); }); }; LogPolicy.prototype.logRequest = function (request) { this.logger("Request: " + this.sanitizer.sanitize(request)); }; LogPolicy.prototype.logResponse = function (response) { this.logger("Response status code: " + response.status); this.logger("Headers: " + this.sanitizer.sanitize(response.headers)); return response; }; return LogPolicy; }(BaseRequestPolicy)); // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. /** * Get the path to this parameter's value as a dotted string (a.b.c). * @param parameter - The parameter to get the path string for. * @returns The path to this parameter's value as a dotted string. */ function getPathStringFromParameter(parameter) { return getPathStringFromParameterPath(parameter.parameterPath, parameter.mapper); } function getPathStringFromParameterPath(parameterPath, mapper) { var result; if (typeof parameterPath === "string") { result = parameterPath; } else if (Array.isArray(parameterPath)) { result = parameterPath.join("."); } else { result = mapper.serializedName; } return result; } // Copyright (c) Microsoft Corporation. /** * Gets the list of status codes for streaming responses. * @internal */ function getStreamResponseStatusCodes(operationSpec) { var result = new Set(); for (var statusCode in operationSpec.responses) { var operationResponse = operationSpec.responses[statusCode]; if (operationResponse.bodyMapper && operationResponse.bodyMapper.type.name === MapperType.Stream) { result.add(Number(statusCode)); } } return result; } // Copyright (c) Microsoft Corporation. // Note: The reason we re-define all of the xml2js default settings (version 2.0) here is because the default settings object exposed // by the xm2js library is mutable. See https://github.com/Leonidas-from-XIV/node-xml2js/issues/536 // By creating a new copy of the settings each time we instantiate the parser, // we are safeguarding against the possibility of the default settings being mutated elsewhere unintentionally. var xml2jsDefaultOptionsV2 = { explicitCharkey: false, trim: false, normalize: false, normalizeTags: false, attrkey: XML_ATTRKEY, explicitArray: true, ignoreAttrs: false, mergeAttrs: false, explicitRoot: true, validator: undefined, xmlns: false, explicitChildren: false, preserveChildrenOrder: false, childkey: "$$", charsAsChildren: false, includeWhiteChars: false, async: false, strict: true, attrNameProcessors: undefined, attrValueProcessors: undefined, tagNameProcessors: undefined, valueProcessors: undefined, rootName: "root", xmldec: { version: "1.0", encoding: "UTF-8", standalone: true }, doctype: undefined, renderOpts: { pretty: true, indent: " ", newline: "\n" }, headless: false, chunkSize: 10000, emptyTag: "", cdata: false }; // The xml2js settings for general XML parsing operations. var xml2jsParserSettings = Object.assign({}, xml2jsDefaultOptionsV2); xml2jsParserSettings.explicitArray = false; // The xml2js settings for general XML building operations. var xml2jsBuilderSettings = Object.assign({}, xml2jsDefaultOptionsV2); xml2jsBuilderSettings.explicitArray = false; xml2jsBuilderSettings.renderOpts = { pretty: false }; /** * Converts given JSON object to XML string * @param obj - JSON object to be converted into XML string * @param opts - Options that govern the parsing of given JSON object */ function stringifyXML(obj, opts) { var _a; if (opts === void 0) { opts = {}; } xml2jsBuilderSettings.rootName = opts.rootName; xml2jsBuilderSettings.charkey = (_a = opts.xmlCharKey) !== null && _a !== void 0 ? _a : XML_CHARKEY; var builder = new xml2js.Builder(xml2jsBuilderSettings); return builder.buildObject(obj); } /** * Converts given XML string into JSON * @param str - String containing the XML content to be parsed into JSON * @param opts - Options that govern the parsing of given xml string */ function parseXML(str, opts) { var _a; if (opts === void 0) { opts = {}; } xml2jsParserSettings.explicitRoot = !!opts.includeRoot; xml2jsParserSettings.charkey = (_a = opts.xmlCharKey) !== null && _a !== void 0 ? _a : XML_CHARKEY; var xmlParser = new xml2js.Parser(xml2jsParserSettings); return new Promise(function (resolve, reject) { if (!str) { reject(new Error("Document is empty")); } else { xmlParser.parseString(str, function (err, res) { if (err) { reject(err); } else { resolve(res); } }); } }); } // Copyright (c) Microsoft Corporation. /** * Create a new serialization RequestPolicyCreator that will serialized HTTP request bodies as they * pass through the HTTP pipeline. */ function deserializationPolicy(deserializationContentTypes, parsingOptions) { return { create: function (nextPolicy, options) { return new DeserializationPolicy(nextPolicy, options, deserializationContentTypes, parsingOptions); } }; } var defaultJsonContentTypes = ["application/json", "text/json"]; var defaultXmlContentTypes = ["application/xml", "application/atom+xml"]; var DefaultDeserializationOptions = { expectedContentTypes: { json: defaultJsonContentTypes, xml: defaultXmlContentTypes } }; /** * A RequestPolicy that will deserialize HTTP response bodies and headers as they pass through the * HTTP pipeline. */ var DeserializationPolicy = /** @class */ (function (_super) { tslib.__extends(DeserializationPolicy, _super); function DeserializationPolicy(nextPolicy, requestPolicyOptions, deserializationContentTypes, parsingOptions) { if (parsingOptions === void 0) { parsingOptions = {}; } var _a; var _this = _super.call(this, nextPolicy, requestPolicyOptions) || this; _this.jsonContentTypes = (deserializationContentTypes && deserializationContentTypes.json) || defaultJsonContentTypes; _this.xmlContentTypes = (deserializationContentTypes && deserializationContentTypes.xml) || defaultXmlContentTypes; _this.xmlCharKey = (_a = parsingOptions.xmlCharKey) !== null && _a !== void 0 ? _a : XML_CHARKEY; return _this; } DeserializationPolicy.prototype.sendRequest = function (request) { return tslib.__awaiter(this, void 0, void 0, function () { var _this = this; return tslib.__generator(this, function (_a) { return [2 /*return*/, this._nextPolicy.sendRequest(request).then(function (response) { return deserializeResponseBody(_this.jsonContentTypes, _this.xmlContentTypes, response, { xmlCharKey: _this.xmlCharKey }); })]; }); }); }; return DeserializationPolicy; }(BaseRequestPolicy)); function getOperationResponse(parsedResponse) { var result; var request = parsedResponse.request; var operationSpec = request.operationSpec; if (operationSpec) { var operationResponseGetter = request.operationResponseGetter; if (!operationResponseGetter) { result = operationSpec.responses[parsedResponse.status]; } else { result = operationResponseGetter(operationSpec, parsedResponse); } } return result; } function shouldDeserializeResponse(parsedResponse) { var shouldDeserialize = parsedResponse.request.shouldDeserialize; var result; if (shouldDeserialize === undefined) { result = true; } else if (typeof shouldDeserialize === "boolean") { result = shouldDeserialize; } else { result = shouldDeserialize(parsedResponse); } return result; } function deserializeResponseBody(jsonContentTypes, xmlContentTypes, response, options) { var _a, _b, _c; if (options === void 0) { options = {}; } var updatedOptions = { rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : "", includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false, xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY }; return parse(jsonContentTypes, xmlContentTypes, response, updatedOptions).then(function (parsedResponse) { if (!shouldDeserializeResponse(parsedResponse)) { return parsedResponse; } var operationSpec = parsedResponse.request.operationSpec; if (!operationSpec || !operationSpec.responses) { return parsedResponse; } var responseSpec = getOperationResponse(parsedResponse); var _a = handleErrorResponse(parsedResponse, operationSpec, responseSpec), error = _a.error, shouldReturnResponse = _a.shouldReturnResponse; if (error) { throw error; } else if (shouldReturnResponse) { return parsedResponse; } // An operation response spec does exist for current status code, so // use it to deserialize the response. if (responseSpec) { if (responseSpec.bodyMapper) { var valueToDeserialize = parsedResponse.parsedBody; if (operationSpec.isXML && responseSpec.bodyMapper.type.name === MapperType.Sequence) { valueToDeserialize = typeof valueToDeserialize === "object" ? valueToDeserialize[responseSpec.bodyMapper.xmlElementName] : []; } try { parsedResponse.parsedBody = operationSpec.serializer.deserialize(responseSpec.bodyMapper, valueToDeserialize, "operationRes.parsedBody", options); } catch (innerError) { var restError = new RestError("Error " + innerError + " occurred in deserializing the responseBody - " + parsedResponse.bodyAsText, undefined, parsedResponse.status, parsedResponse.request, parsedResponse); throw restError; } } else if (operationSpec.httpMethod === "HEAD") { // head methods never have a body, but we return a boolean to indicate presence/absence of the resource parsedResponse.parsedBody = response.status >= 200 && response.status < 300; } if (responseSpec.headersMapper) { parsedResponse.parsedHeaders = operationSpec.serializer.deserialize(responseSpec.headersMapper, parsedResponse.headers.rawHeaders(), "operationRes.parsedHeaders", options); } } return parsedResponse; }); } function isOperationSpecEmpty(operationSpec) { var expectedStatusCodes = Object.keys(operationSpec.responses); return (expectedStatusCodes.length === 0 || (expectedStatusCodes.length === 1 && expectedStatusCodes[0] === "default")); } function handleErrorResponse(parsedResponse, operationSpec, responseSpec) { var _a; var isSuccessByStatus = 200 <= parsedResponse.status && parsedResponse.status < 300; var isExpectedStatusCode = isOperationSpecEmpty(operationSpec) ? isSuccessByStatus : !!responseSpec; if (isExpectedStatusCode) { if (responseSpec) { if (!responseSpec.isError) { return { error: null, shouldReturnResponse: false }; } } else { return { error: null, shouldReturnResponse: false }; } } var errorResponseSpec = responseSpec !== null && responseSpec !== void 0 ? responseSpec : operationSpec.responses.default; var streaming = ((_a = parsedResponse.request.streamResponseStatusCodes) === null || _a === void 0 ? void 0 : _a.has(parsedResponse.status)) || parsedResponse.request.streamResponseBody; var initialErrorMessage = streaming ? "Unexpected status code: " + parsedResponse.status : parsedResponse.bodyAsText; var error = new RestError(initialErrorMessage, undefined, parsedResponse.status, parsedResponse.request, parsedResponse); // If the item failed but there's no error spec or default spec to deserialize the error, // we should fail so we just throw the parsed response if (!errorResponseSpec) { throw error; } var defaultBodyMapper = errorResponseSpec.bodyMapper; var defaultHeadersMapper = errorResponseSpec.headersMapper; try { // If error response has a body, try to deserialize it using default body mapper. // Then try to extract error code & message from it if (parsedResponse.parsedBody) { var parsedBody = parsedResponse.parsedBody; var parsedError = void 0; if (defaultBodyMapper) { var valueToDeserialize = parsedBody; if (operationSpec.isXML && defaultBodyMapper.type.name === MapperType.Sequence) { valueToDeserialize = typeof parsedBody === "object" ? parsedBody[defaultBodyMapper.xmlElementName] : []; } parsedError = operationSpec.serializer.deserialize(defaultBodyMapper, valueToDeserialize, "error.response.parsedBody"); } var internalError = parsedBody.error || parsedError || parsedBody; error.code = internalError.code; if (internalError.message) { error.message = internalError.message; } if (defaultBodyMapper) { error.response.parsedBody = parsedError; } } // If error response has headers, try to deserialize it using default header mapper if (parsedResponse.headers && defaultHeadersMapper) { error.response.parsedHeaders = operationSpec.serializer.deserialize(defaultHeadersMapper, parsedResponse.headers.rawHeaders(), "operationRes.parsedHeaders"); } } catch (defaultError) { error.message = "Error \"" + defaultError.message + "\" occurred in deserializing the responseBody - \"" + parsedResponse.bodyAsText + "\" for the default response."; } return { error: error, shouldReturnResponse: false }; } function parse(jsonContentTypes, xmlContentTypes, operationResponse, opts) { var _a; var errorHandler = function (err) { var msg = "Error \"" + err + "\" occurred while parsing the response body - " + operationResponse.bodyAsText + "."; var errCode = err.code || RestError.PARSE_ERROR; var e = new RestError(msg, errCode, operationResponse.status, operationResponse.request, operationResponse); return Promise.reject(e); }; var streaming = ((_a = operationResponse.request.streamResponseStatusCodes) === null || _a === void 0 ? void 0 : _a.has(operationResponse.status)) || operationResponse.request.streamResponseBody; if (!streaming && operationResponse.bodyAsText) { var text_1 = operationResponse.bodyAsText; var contentType = operationResponse.headers.get("Content-Type") || ""; var contentComponents = !contentType ? [] : contentType.split(";").map(function (component) { return component.toLowerCase(); }); if (contentComponents.length === 0 || contentComponents.some(function (component) { return jsonContentTypes.indexOf(component) !== -1; })) { return new Promise(function (resolve) { operationResponse.parsedBody = JSON.parse(text_1); resolve(operationResponse); }).catch(errorHandler); } else if (contentComponents.some(function (component) { return xmlContentTypes.indexOf(component) !== -1; })) { return parseXML(text_1, opts) .then(function (body) { operationResponse.parsedBody = body; return operationResponse; }) .catch(errorHandler); } } return Promise.resolve(operationResponse); } // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. var DEFAULT_CLIENT_RETRY_COUNT = 3; // intervals are in ms var DEFAULT_CLIENT_RETRY_INTERVAL = 1000 * 30; var DEFAULT_CLIENT_MAX_RETRY_INTERVAL = 1000 * 90; var DEFAULT_CLIENT_MIN_RETRY_INTERVAL = 1000 * 3; function isNumber(n) { return typeof n === "number"; } /** * @internal * Determines if the operation should be retried. * * @param retryLimit - Specifies the max number of retries. * @param predicate - Initial chekck on whether to retry based on given responses or errors * @param retryData - The retry data. * @returns True if the operation qualifies for a retry; false otherwise. */ function shouldRetry(retryLimit, predicate, retryData, response, error) { if (!predicate(response, error)) { return false; } return retryData.retryCount < retryLimit; } /** * @internal * Updates the retry data for the next attempt. * * @param retryOptions - specifies retry interval, and its lower bound and upper bound. * @param retryData - The retry data. * @param err - The operation"s error, if any. */ function updateRetryData(retryOptions, retryData, err) { if (retryData === void 0) { retryData = { retryCount: 0, retryInterval: 0 }; } if (err) { if (retryData.error) { err.innerError = retryData.error; } retryData.error = err; } // Adjust retry count retryData.retryCount++; // Adjust retry interval var incrementDelta = Math.pow(2, retryData.retryCount - 1) - 1; var boundedRandDelta = retryOptions.retryInterval * 0.8 + Math.floor(Math.random() * (retryOptions.retryInterval * 0.4)); incrementDelta *= boundedRandDelta; retryData.retryInterval = Math.min(retryOptions.minRetryInterval + incrementDelta, retryOptions.maxRetryInterval); return retryData; } // Copyright (c) Microsoft Corporation. function exponentialRetryPolicy(retryCount, retryInterval, maxRetryInterval) { return { create: function (nextPolicy, options) { return new ExponentialRetryPolicy(nextPolicy, options, retryCount, retryInterval, maxRetryInterval); } }; } (function (RetryMode) { RetryMode[RetryMode["Exponential"] = 0] = "Exponential"; })(exports.RetryMode || (exports.RetryMode = {})); var DefaultRetryOptions = { maxRetries: DEFAULT_CLIENT_RETRY_COUNT, retryDelayInMs: DEFAULT_CLIENT_RETRY_INTERVAL, maxRetryDelayInMs: DEFAULT_CLIENT_MAX_RETRY_INTERVAL }; /** * Instantiates a new "ExponentialRetryPolicyFilter" instance. */ var ExponentialRetryPolicy = /** @class */ (function (_super) { tslib.__extends(ExponentialRetryPolicy, _super); /** * @param nextPolicy - The next RequestPolicy in the pipeline chain. * @param options - The options for this RequestPolicy. * @param retryCount - The client retry count. * @param retryInterval - The client retry interval, in milliseconds. * @param minRetryInterval - The minimum retry interval, in milliseconds. * @param maxRetryInterval - The maximum retry interval, in milliseconds. */ function ExponentialRetryPolicy(nextPolicy, options, retryCount, retryInterval, maxRetryInterval) { var _this = _super.call(this, nextPolicy, options) || this; _this.retryCount = isNumber(retryCount) ? retryCount : DEFAULT_CLIENT_RETRY_COUNT; _this.retryInterval = isNumber(retryInterval) ? retryInterval : DEFAULT_CLIENT_RETRY_INTERVAL; _this.maxRetryInterval = isNumber(maxRetryInterval) ? maxRetryInterval : DEFAULT_CLIENT_MAX_RETRY_INTERVAL; return _this; } ExponentialRetryPolicy.prototype.sendRequest = function (request) { var _this = this; return this._nextPolicy .sendRequest(request.clone()) .then(function (response) { return retry(_this, request, response); }) .catch(function (error) { return retry(_this, request, error.response, undefined, error); }); }; return ExponentialRetryPolicy; }(BaseRequestPolicy)); function retry(policy, request, response, retryData, requestError) { return tslib.__awaiter(this, void 0, void 0, function () { function shouldPolicyRetry(responseParam) { var statusCode = responseParam === null || responseParam === void 0 ? void 0 : responseParam.status; if (statusCode === undefined || (statusCode < 500 && statusCode !== 408) || statusCode === 501 || statusCode === 505) { return false; } return true; } var isAborted, res, err_1, err; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: retryData = updateRetryData({ retryInterval: policy.retryInterval, minRetryInterval: 0, maxRetryInterval: policy.maxRetryInterval }, retryData, requestError); isAborted = request.abortSignal && request.abortSignal.aborted; if (!(!isAborted && shouldRetry(policy.retryCount, shouldPolicyRetry, retryData, response))) return [3 /*break*/, 6]; logger.info("Retrying request in " + retryData.retryInterval); _a.label = 1; case 1: _a.trys.push([1, 4, , 5]); return [4 /*yield*/, delay(retryData.retryInterval)]; case 2: _a.sent(); return [4 /*yield*/, policy._nextPolicy.sendRequest(request.clone())]; case 3: res = _a.sent(); return [2 /*return*/, retry(policy, request, res, retryData)]; case 4: err_1 = _a.sent(); return [2 /*return*/, retry(policy, request, response, retryData, err_1)]; case 5: return [3 /*break*/, 7]; case 6: if (isAborted || requestError || !response) { err = retryData.error || new RestError("Failed to send the request.", RestError.REQUEST_SEND_ERROR, response && response.status, response && response.request, response); throw err; } else { return [2 /*return*/, response]; } case 7: return [2 /*return*/]; } }); }); } // Copyright (c) Microsoft Corporation. function generateClientRequestIdPolicy(requestIdHeaderName) { if (requestIdHeaderName === void 0) { requestIdHeaderName = "x-ms-client-request-id"; } return { create: function (nextPolicy, options) { return new GenerateClientRequestIdPolicy(nextPolicy, options, requestIdHeaderName); } }; } var GenerateClientRequestIdPolicy = /** @class */ (function (_super) { tslib.__extends(GenerateClientRequestIdPolicy, _super); function GenerateClientRequestIdPolicy(nextPolicy, options, _requestIdHeaderName) { var _this = _super.call(this, nextPolicy, options) || this; _this._requestIdHeaderName = _requestIdHeaderName; return _this; } GenerateClientRequestIdPolicy.prototype.sendRequest = function (request) { if (!request.headers.contains(this._requestIdHeaderName)) { request.headers.set(this._requestIdHeaderName, request.requestId); } return this._nextPolicy.sendRequest(request); }; return GenerateClientRequestIdPolicy; }(BaseRequestPolicy)); // Copyright (c) Microsoft Corporation. function getDefaultUserAgentKey() { return Constants.HeaderConstants.USER_AGENT; } function getPlatformSpecificData() { var runtimeInfo = { key: "Node", value: process.version }; var osInfo = { key: "OS", value: "(" + os.arch() + "-" + os.type() + "-" + os.release() + ")" }; return [runtimeInfo, osInfo]; } // Copyright (c) Microsoft Corporation. function getRuntimeInfo() { var msRestRuntime = { key: "core-http", value: Constants.coreHttpVersion }; return [msRestRuntime]; } function getUserAgentString(telemetryInfo, keySeparator, valueSeparator) { if (keySeparator === void 0) { keySeparator = " "; } if (valueSeparator === void 0) { valueSeparator = "/"; } return telemetryInfo .map(function (info) { var value = info.value ? "" + valueSeparator + info.value : ""; return "" + info.key + value; }) .join(keySeparator); } var getDefaultUserAgentHeaderName = getDefaultUserAgentKey; function getDefaultUserAgentValue() { var runtimeInfo = getRuntimeInfo(); var platformSpecificData = getPlatformSpecificData(); var userAgent = getUserAgentString(runtimeInfo.concat(platformSpecificData)); return userAgent; } function userAgentPolicy(userAgentData) { var key = !userAgentData || userAgentData.key === undefined || userAgentData.key === null ? getDefaultUserAgentKey() : userAgentData.key; var value = !userAgentData || userAgentData.value === undefined || userAgentData.value === null ? getDefaultUserAgentValue() : userAgentData.value; return { create: function (nextPolicy, options) { return new UserAgentPolicy(nextPolicy, options, key, value); } }; } var UserAgentPolicy = /** @class */ (function (_super) { tslib.__extends(UserAgentPolicy, _super); function UserAgentPolicy(_nextPolicy, _options, headerKey, headerValue) { var _this = _super.call(this, _nextPolicy, _options) || this; _this._nextPolicy = _nextPolicy; _this._options = _options; _this.headerKey = headerKey; _this.headerValue = headerValue; return _this; } UserAgentPolicy.prototype.sendRequest = function (request) { this.addUserAgentHeader(request); return this._nextPolicy.sendRequest(request); }; UserAgentPolicy.prototype.addUserAgentHeader = function (request) { if (!request.headers) { request.headers = new HttpHeaders(); } if (!request.headers.get(this.headerKey) && this.headerValue) { request.headers.set(this.headerKey, this.headerValue); } }; return UserAgentPolicy; }(BaseRequestPolicy)); // Copyright (c) Microsoft Corporation. /** * Methods that are allowed to follow redirects 301 and 302 */ var allowedRedirect = ["GET", "HEAD"]; var DefaultRedirectOptions = { handleRedirects: true, maxRetries: 20 }; function redirectPolicy(maximumRetries) { if (maximumRetries === void 0) { maximumRetries = 20; } return { create: function (nextPolicy, options) { return new RedirectPolicy(nextPolicy, options, maximumRetries); } }; } var RedirectPolicy = /** @class */ (function (_super) { tslib.__extends(RedirectPolicy, _super); function RedirectPolicy(nextPolicy, options, maxRetries) { if (maxRetries === void 0) { maxRetries = 20; } var _this = _super.call(this, nextPolicy, options) || this; _this.maxRetries = maxRetries; return _this; } RedirectPolicy.prototype.sendRequest = function (request) { var _this = this; return this._nextPolicy .sendRequest(request) .then(function (response) { return handleRedirect(_this, response, 0); }); }; return RedirectPolicy; }(BaseRequestPolicy)); function handleRedirect(policy, response, currentRetries) { var request = response.request, status = response.status; var locationHeader = response.headers.get("location"); if (locationHeader && (status === 300 || (status === 301 && allowedRedirect.includes(request.method)) || (status === 302 && allowedRedirect.includes(request.method)) || (status === 303 && request.method === "POST") || status === 307) && (!policy.maxRetries || currentRetries < policy.maxRetries)) { var builder = URLBuilder.parse(request.url); builder.setPath(locationHeader); request.url = builder.toString(); // POST request with Status code 303 should be converted into a // redirected GET request if the redirect url is present in the location header if (status === 303) { request.method = "GET"; delete request.body; } return policy._nextPolicy .sendRequest(request) .then(function (res) { return handleRedirect(policy, res, currentRetries + 1); }); } return Promise.resolve(response); } // Copyright (c) Microsoft Corporation. function rpRegistrationPolicy(retryTimeout) { if (retryTimeout === void 0) { retryTimeout = 30; } return { create: function (nextPolicy, options) { return new RPRegistrationPolicy(nextPolicy, options, retryTimeout); } }; } var RPRegistrationPolicy = /** @class */ (function (_super) { tslib.__extends(RPRegistrationPolicy, _super); function RPRegistrationPolicy(nextPolicy, options, _retryTimeout) { if (_retryTimeout === void 0) { _retryTimeout = 30; } var _this = _super.call(this, nextPolicy, options) || this; _this._retryTimeout = _retryTimeout; return _this; } RPRegistrationPolicy.prototype.sendRequest = function (request) { var _this = this; return this._nextPolicy .sendRequest(request.clone()) .then(function (response) { return registerIfNeeded(_this, request, response); }); }; return RPRegistrationPolicy; }(BaseRequestPolicy)); function registerIfNeeded(policy, request, response) { if (response.status === 409) { var rpName = checkRPNotRegisteredError(response.bodyAsText); if (rpName) { var urlPrefix = extractSubscriptionUrl(request.url); return (registerRP(policy, urlPrefix, rpName, request) // Autoregistration of ${provider} failed for some reason. We will not return this error // instead will return the initial response with 409 status code back to the user. // do nothing here as we are returning the original response at the end of this method. .catch(function () { return false; }) .then(function (registrationStatus) { if (registrationStatus) { // Retry the original request. We have to change the x-ms-client-request-id // otherwise Azure endpoint will return the initial 409 (cached) response. request.headers.set("x-ms-client-request-id", generateUuid()); return policy._nextPolicy.sendRequest(request.clone()); } return response; })); } } return Promise.resolve(response); } /** * Reuses the headers of the original request and url (if specified). * @param originalRequest - The original request * @param reuseUrlToo - Should the url from the original request be reused as well. Default false. * @returns A new request object with desired headers. */ function getRequestEssentials(originalRequest, reuseUrlToo) { if (reuseUrlToo === void 0) { reuseUrlToo = false; } var reqOptions = originalRequest.clone(); if (reuseUrlToo) { reqOptions.url = originalRequest.url; } // We have to change the x-ms-client-request-id otherwise Azure endpoint // will return the initial 409 (cached) response. reqOptions.headers.set("x-ms-client-request-id", generateUuid()); // Set content-type to application/json reqOptions.headers.set("Content-Type", "application/json; charset=utf-8"); return reqOptions; } /** * Validates the error code and message associated with 409 response status code. If it matches to that of * RP not registered then it returns the name of the RP else returns undefined. * @param body - The response body received after making the original request. * @returns The name of the RP if condition is satisfied else undefined. */ function checkRPNotRegisteredError(body) { var result, responseBody; if (body) { try { responseBody = JSON.parse(body); } catch (err) { // do nothing; } if (responseBody && responseBody.error && responseBody.error.message && responseBody.error.code && responseBody.error.code === "MissingSubscriptionRegistration") { var matchRes = responseBody.error.message.match(/.*'(.*)'/i); if (matchRes) { result = matchRes.pop(); } } } return result; } /** * Extracts the first part of the URL, just after subscription: * https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/ * @param url - The original request url * @returns The url prefix as explained above. */ function extractSubscriptionUrl(url) { var result; var matchRes = url.match(/.*\/subscriptions\/[a-f0-9-]+\//gi); if (matchRes && matchRes[0]) { result = matchRes[0]; } else { throw new Error("Unable to extract subscriptionId from the given url - " + url + "."); } return result; } /** * Registers the given provider. * @param policy - The RPRegistrationPolicy this function is being called against. * @param urlPrefix - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/ * @param provider - The provider name to be registered. * @param originalRequest - The original request sent by the user that returned a 409 response * with a message that the provider is not registered. * @param callback - The callback that handles the RP registration */ function registerRP(policy, urlPrefix, provider, originalRequest) { var postUrl = urlPrefix + "providers/" + provider + "/register?api-version=2016-02-01"; var getUrl = urlPrefix + "providers/" + provider + "?api-version=2016-02-01"; var reqOptions = getRequestEssentials(originalRequest); reqOptions.method = "POST"; reqOptions.url = postUrl; return policy._nextPolicy.sendRequest(reqOptions).then(function (response) { if (response.status !== 200) { throw new Error("Autoregistration of " + provider + " failed. Please try registering manually."); } return getRegistrationStatus(policy, getUrl, originalRequest); }); } /** * Polls the registration status of the provider that was registered. Polling happens at an interval of 30 seconds. * Polling will happen till the registrationState property of the response body is "Registered". * @param policy - The RPRegistrationPolicy this function is being called against. * @param url - The request url for polling * @param originalRequest - The original request sent by the user that returned a 409 response * with a message that the provider is not registered. * @returns True if RP Registration is successful. */ function getRegistrationStatus(policy, url, originalRequest) { var reqOptions = getRequestEssentials(originalRequest); reqOptions.url = url; reqOptions.method = "GET"; return policy._nextPolicy.sendRequest(reqOptions).then(function (res) { var obj = res.parsedBody; if (res.parsedBody && obj.registrationState && obj.registrationState === "Registered") { return true; } else { return delay(policy._retryTimeout * 1000) .then(function () { return getRegistrationStatus(policy, url, originalRequest); }); } }); } // Copyright (c) Microsoft Corporation. // Default options for the cycler if none are provided var DEFAULT_CYCLER_OPTIONS = { forcedRefreshWindowInMs: 1000, retryIntervalInMs: 3000, refreshWindowInMs: 1000 * 60 * 2 // Start refreshing 2m before expiry }; /** * Converts an an unreliable access token getter (which may resolve with null) * into an AccessTokenGetter by retrying the unreliable getter in a regular * interval. * * @param getAccessToken - a function that produces a promise of an access * token that may fail by returning null * @param retryIntervalInMs - the time (in milliseconds) to wait between retry * attempts * @param timeoutInMs - the timestamp after which the refresh attempt will fail, * throwing an exception * @returns - a promise that, if it resolves, will resolve with an access token */ function beginRefresh(getAccessToken, retryIntervalInMs, timeoutInMs) { return tslib.__awaiter(this, void 0, void 0, function () { // This wrapper handles exceptions gracefully as long as we haven't exceeded // the timeout. function tryGetAccessToken() { return tslib.__awaiter(this, void 0, void 0, function () { var _a, finalToken; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: if (!(Date.now() < timeoutInMs)) return [3 /*break*/, 5]; _b.label = 1; case 1: _b.trys.push([1, 3, , 4]); return [4 /*yield*/, getAccessToken()]; case 2: return [2 /*return*/, _b.sent()]; case 3: _a = _b.sent(); return [2 /*return*/, null]; case 4: return [3 /*break*/, 7]; case 5: return [4 /*yield*/, getAccessToken()]; case 6: finalToken = _b.sent(); // Timeout is up, so throw if it's still null if (finalToken === null) { throw new Error("Failed to refresh access token."); } return [2 /*return*/, finalToken]; case 7: return [2 /*return*/]; } }); }); } var token; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, tryGetAccessToken()]; case 1: token = _a.sent(); _a.label = 2; case 2: if (!(token === null)) return [3 /*break*/, 5]; return [4 /*yield*/, delay(retryIntervalInMs)]; case 3: _a.sent(); return [4 /*yield*/, tryGetAccessToken()]; case 4: token = _a.sent(); return [3 /*break*/, 2]; case 5: return [2 /*return*/, token]; } }); }); } /** * Creates a token cycler from a credential, scopes, and optional settings. * * A token cycler represents a way to reliably retrieve a valid access token * from a TokenCredential. It will handle initializing the token, refreshing it * when it nears expiration, and synchronizes refresh attempts to avoid * concurrency hazards. * * @param credential - the underlying TokenCredential that provides the access * token * @param scopes - the scopes to request authorization for * @param tokenCyclerOptions - optionally override default settings for the cycler * * @returns - a function that reliably produces a valid access token */ function createTokenCycler(credential, scopes, tokenCyclerOptions) { var _this = this; var refreshWorker = null; var token = null; var options = tslib.__assign(tslib.__assign({}, DEFAULT_CYCLER_OPTIONS), tokenCyclerOptions); /** * This little holder defines several predicates that we use to construct * the rules of refreshing the token. */ var cycler = { /** * Produces true if a refresh job is currently in progress. */ get isRefreshing() { return refreshWorker !== null; }, /** * Produces true if the cycler SHOULD refresh (we are within the refresh * window and not already refreshing) */ get shouldRefresh() { var _a; return (!cycler.isRefreshing && ((_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : 0) - options.refreshWindowInMs < Date.now()); }, /** * Produces true if the cycler MUST refresh (null or nearly-expired * token). */ get mustRefresh() { return (token === null || token.expiresOnTimestamp - options.forcedRefreshWindowInMs < Date.now()); } }; /** * Starts a refresh job or returns the existing job if one is already * running. */ function refresh(getTokenOptions) { var _a; if (!cycler.isRefreshing) { // We bind `scopes` here to avoid passing it around a lot var tryGetAccessToken = function () { return credential.getToken(scopes, getTokenOptions); }; // Take advantage of promise chaining to insert an assignment to `token` // before the refresh can be considered done. refreshWorker = beginRefresh(tryGetAccessToken, options.retryIntervalInMs, // If we don't have a token, then we should timeout immediately (_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : Date.now()) .then(function (_token) { refreshWorker = null; token = _token; return token; }) .catch(function (reason) { // We also should reset the refresher if we enter a failed state. All // existing awaiters will throw, but subsequent requests will start a // new retry chain. refreshWorker = null; token = null; throw reason; }); } return refreshWorker; } return function (tokenOptions) { return tslib.__awaiter(_this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { // // Simple rules: // - If we MUST refresh, then return the refresh task, blocking // the pipeline until a token is available. // - If we SHOULD refresh, then run refresh but don't return it // (we can still use the cached token). // - Return the token, since it's fine if we didn't return in // step 1. // if (cycler.mustRefresh) return [2 /*return*/, refresh(tokenOptions)]; if (cycler.shouldRefresh) { refresh(tokenOptions); } return [2 /*return*/, token]; }); }); }; } // #endregion /** * Creates a new factory for a RequestPolicy that applies a bearer token to * the requests' `Authorization` headers. * * @param credential - The TokenCredential implementation that can supply the bearer token. * @param scopes - The scopes for which the bearer token applies. */ function bearerTokenAuthenticationPolicy(credential, scopes) { // This simple function encapsulates the entire process of reliably retrieving the token var getToken = createTokenCycler(credential, scopes /* , options */); var BearerTokenAuthenticationPolicy = /** @class */ (function (_super) { tslib.__extends(BearerTokenAuthenticationPolicy, _super); function BearerTokenAuthenticationPolicy(nextPolicy, options) { return _super.call(this, nextPolicy, options) || this; } BearerTokenAuthenticationPolicy.prototype.sendRequest = function (webResource) { return tslib.__awaiter(this, void 0, void 0, function () { var token; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, getToken({ abortSignal: webResource.abortSignal, tracingOptions: { spanOptions: webResource.spanOptions, tracingContext: webResource.tracingContext } })]; case 1: token = (_a.sent()).token; webResource.headers.set(Constants.HeaderConstants.AUTHORIZATION, "Bearer " + token); return [2 /*return*/, this._nextPolicy.sendRequest(webResource)]; } }); }); }; return BearerTokenAuthenticationPolicy; }(BaseRequestPolicy)); return { create: function (nextPolicy, options) { return new BearerTokenAuthenticationPolicy(nextPolicy, options); } }; } // Copyright (c) Microsoft Corporation. function systemErrorRetryPolicy(retryCount, retryInterval, minRetryInterval, maxRetryInterval) { return { create: function (nextPolicy, options) { return new SystemErrorRetryPolicy(nextPolicy, options, retryCount, retryInterval, minRetryInterval, maxRetryInterval); } }; } /** * @param retryCount - The client retry count. * @param retryInterval - The client retry interval, in milliseconds. * @param minRetryInterval - The minimum retry interval, in milliseconds. * @param maxRetryInterval - The maximum retry interval, in milliseconds. */ var SystemErrorRetryPolicy = /** @class */ (function (_super) { tslib.__extends(SystemErrorRetryPolicy, _super); function SystemErrorRetryPolicy(nextPolicy, options, retryCount, retryInterval, minRetryInterval, maxRetryInterval) { var _this = _super.call(this, nextPolicy, options) || this; _this.retryCount = isNumber(retryCount) ? retryCount : DEFAULT_CLIENT_RETRY_COUNT; _this.retryInterval = isNumber(retryInterval) ? retryInterval : DEFAULT_CLIENT_RETRY_INTERVAL; _this.minRetryInterval = isNumber(minRetryInterval) ? minRetryInterval : DEFAULT_CLIENT_MIN_RETRY_INTERVAL; _this.maxRetryInterval = isNumber(maxRetryInterval) ? maxRetryInterval : DEFAULT_CLIENT_MAX_RETRY_INTERVAL; return _this; } SystemErrorRetryPolicy.prototype.sendRequest = function (request) { var _this = this; return this._nextPolicy .sendRequest(request.clone()) .catch(function (error) { return retry$1(_this, request, error.response, error); }); }; return SystemErrorRetryPolicy; }(BaseRequestPolicy)); function retry$1(policy, request, operationResponse, err, retryData) { return tslib.__awaiter(this, void 0, void 0, function () { function shouldPolicyRetry(_response, error) { if (error && error.code && (error.code === "ETIMEDOUT" || error.code === "ESOCKETTIMEDOUT" || error.code === "ECONNREFUSED" || error.code === "ECONNRESET" || error.code === "ENOENT")) { return true; } return false; } var nestedErr_1; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: retryData = updateRetryData(policy, retryData, err); if (!shouldRetry(policy.retryCount, shouldPolicyRetry, retryData, operationResponse, err)) return [3 /*break*/, 5]; _a.label = 1; case 1: _a.trys.push([1, 3, , 4]); return [4 /*yield*/, delay(retryData.retryInterval)]; case 2: _a.sent(); return [2 /*return*/, policy._nextPolicy.sendRequest(request.clone())]; case 3: nestedErr_1 = _a.sent(); return [2 /*return*/, retry$1(policy, request, operationResponse, nestedErr_1, retryData)]; case 4: return [3 /*break*/, 6]; case 5: if (err) { // If the operation failed in the end, return all errors instead of just the last one return [2 /*return*/, Promise.reject(retryData.error)]; } return [2 /*return*/, operationResponse]; case 6: return [2 /*return*/]; } }); }); } // Copyright (c) Microsoft Corporation. (function (QueryCollectionFormat) { QueryCollectionFormat["Csv"] = ","; QueryCollectionFormat["Ssv"] = " "; QueryCollectionFormat["Tsv"] = "\t"; QueryCollectionFormat["Pipes"] = "|"; QueryCollectionFormat["Multi"] = "Multi"; })(exports.QueryCollectionFormat || (exports.QueryCollectionFormat = {})); // Copyright (c) Microsoft Corporation. /** * @internal */ var noProxyList = []; var noProxyListLoaded = false; var byPassedList = new Map(); function loadEnvironmentProxyValue() { if (!process) { return undefined; } var httpsProxy = getEnvironmentValue(Constants.HTTPS_PROXY); var allProxy = getEnvironmentValue(Constants.ALL_PROXY); var httpProxy = getEnvironmentValue(Constants.HTTP_PROXY); return httpsProxy || allProxy || httpProxy; } // Check whether the host of a given `uri` is in the noProxyList. // If there's a match, any request sent to the same host won't have the proxy settings set. // This implementation is a port of https://github.com/Azure/azure-sdk-for-net/blob/8cca811371159e527159c7eb65602477898683e2/sdk/core/Azure.Core/src/Pipeline/Internal/HttpEnvironmentProxy.cs#L210 function isBypassed(uri) { if (noProxyList.length === 0) { return false; } var host = URLBuilder.parse(uri).getHost(); if (byPassedList.has(host)) { return byPassedList.get(host); } var isBypassedFlag = false; for (var _i = 0, noProxyList_1 = noProxyList; _i < noProxyList_1.length; _i++) { var pattern = noProxyList_1[_i]; if (pattern[0] === ".") { // This should match either domain it self or any subdomain or host // .foo.com will match foo.com it self or *.foo.com if (host.endsWith(pattern)) { isBypassedFlag = true; } else { if (host.length === pattern.length - 1 && host === pattern.slice(1)) { isBypassedFlag = true; } } } else { if (host === pattern) { isBypassedFlag = true; } } } byPassedList.set(host, isBypassedFlag); return isBypassedFlag; } /** * @internal */ function loadNoProxy() { var noProxy = getEnvironmentValue(Constants.NO_PROXY); noProxyListLoaded = true; if (noProxy) { return noProxy .split(",") .map(function (item) { return item.trim(); }) .filter(function (item) { return item.length; }); } return []; } function getDefaultProxySettings(proxyUrl) { if (!proxyUrl) { proxyUrl = loadEnvironmentProxyValue(); if (!proxyUrl) { return undefined; } } var _a = extractAuthFromUrl(proxyUrl), username = _a.username, password = _a.password, urlWithoutAuth = _a.urlWithoutAuth; var parsedUrl = URLBuilder.parse(urlWithoutAuth); var schema = parsedUrl.getScheme() ? parsedUrl.getScheme() + "://" : ""; return { host: schema + parsedUrl.getHost(), port: Number.parseInt(parsedUrl.getPort() || "80"), username: username, password: password }; } function proxyPolicy(proxySettings) { if (!proxySettings) { proxySettings = getDefaultProxySettings(); } if (!noProxyListLoaded) { noProxyList.push.apply(noProxyList, loadNoProxy()); } return { create: function (nextPolicy, options) { return new ProxyPolicy(nextPolicy, options, proxySettings); } }; } function extractAuthFromUrl(url) { var atIndex = url.indexOf("@"); if (atIndex === -1) { return { urlWithoutAuth: url }; } var schemeIndex = url.indexOf("://"); var authStart = schemeIndex !== -1 ? schemeIndex + 3 : 0; var auth = url.substring(authStart, atIndex); var colonIndex = auth.indexOf(":"); var hasPassword = colonIndex !== -1; var username = hasPassword ? auth.substring(0, colonIndex) : auth; var password = hasPassword ? auth.substring(colonIndex + 1) : undefined; var urlWithoutAuth = url.substring(0, authStart) + url.substring(atIndex + 1); return { username: username, password: password, urlWithoutAuth: urlWithoutAuth }; } var ProxyPolicy = /** @class */ (function (_super) { tslib.__extends(ProxyPolicy, _super); function ProxyPolicy(nextPolicy, options, proxySettings) { var _this = _super.call(this, nextPolicy, options) || this; _this.proxySettings = proxySettings; return _this; } ProxyPolicy.prototype.sendRequest = function (request) { if (!request.proxySettings && !isBypassed(request.url)) { request.proxySettings = this.proxySettings; } return this._nextPolicy.sendRequest(request); }; return ProxyPolicy; }(BaseRequestPolicy)); // Copyright (c) Microsoft Corporation. var StatusCodes = Constants.HttpConstants.StatusCodes; function throttlingRetryPolicy() { return { create: function (nextPolicy, options) { return new ThrottlingRetryPolicy(nextPolicy, options); } }; } /** * To learn more, please refer to * https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-request-limits, * https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits and * https://docs.microsoft.com/en-us/azure/virtual-machines/troubleshooting/troubleshooting-throttling-errors */ var ThrottlingRetryPolicy = /** @class */ (function (_super) { tslib.__extends(ThrottlingRetryPolicy, _super); function ThrottlingRetryPolicy(nextPolicy, options, _handleResponse) { var _this = _super.call(this, nextPolicy, options) || this; _this._handleResponse = _handleResponse || _this._defaultResponseHandler; return _this; } ThrottlingRetryPolicy.prototype.sendRequest = function (httpRequest) { return tslib.__awaiter(this, void 0, void 0, function () { var _this = this; return tslib.__generator(this, function (_a) { return [2 /*return*/, this._nextPolicy.sendRequest(httpRequest.clone()).then(function (response) { if (response.status !== StatusCodes.TooManyRequests) { return response; } else { return _this._handleResponse(httpRequest, response); } })]; }); }); }; ThrottlingRetryPolicy.prototype._defaultResponseHandler = function (httpRequest, httpResponse) { return tslib.__awaiter(this, void 0, void 0, function () { var retryAfterHeader, delayInMs; var _this = this; return tslib.__generator(this, function (_a) { retryAfterHeader = httpResponse.headers.get(Constants.HeaderConstants.RETRY_AFTER); if (retryAfterHeader) { delayInMs = ThrottlingRetryPolicy.parseRetryAfterHeader(retryAfterHeader); if (delayInMs) { return [2 /*return*/, delay(delayInMs).then(function (_) { return _this._nextPolicy.sendRequest(httpRequest); })]; } } return [2 /*return*/, httpResponse]; }); }); }; ThrottlingRetryPolicy.parseRetryAfterHeader = function (headerValue) { var retryAfterInSeconds = Number(headerValue); if (Number.isNaN(retryAfterInSeconds)) { return ThrottlingRetryPolicy.parseDateRetryAfterHeader(headerValue); } else { return retryAfterInSeconds * 1000; } }; ThrottlingRetryPolicy.parseDateRetryAfterHeader = function (headerValue) { try { var now = Date.now(); var date = Date.parse(headerValue); var diff = date - now; return Number.isNaN(diff) ? undefined : diff; } catch (error) { return undefined; } }; return ThrottlingRetryPolicy; }(BaseRequestPolicy)); // Copyright (c) Microsoft Corporation. function signingPolicy(authenticationProvider) { return { create: function (nextPolicy, options) { return new SigningPolicy(nextPolicy, options, authenticationProvider); } }; } var SigningPolicy = /** @class */ (function (_super) { tslib.__extends(SigningPolicy, _super); function SigningPolicy(nextPolicy, options, authenticationProvider) { var _this = _super.call(this, nextPolicy, options) || this; _this.authenticationProvider = authenticationProvider; return _this; } SigningPolicy.prototype.signRequest = function (request) { return this.authenticationProvider.signRequest(request); }; SigningPolicy.prototype.sendRequest = function (request) { var _this = this; return this.signRequest(request).then(function (nextRequest) { return _this._nextPolicy.sendRequest(nextRequest); }); }; return SigningPolicy; }(BaseRequestPolicy)); // Copyright (c) Microsoft Corporation. var DefaultKeepAliveOptions = { enable: true }; function keepAlivePolicy(keepAliveOptions) { return { create: function (nextPolicy, options) { return new KeepAlivePolicy(nextPolicy, options, keepAliveOptions || DefaultKeepAliveOptions); } }; } /** * KeepAlivePolicy is a policy used to control keep alive settings for every request. */ var KeepAlivePolicy = /** @class */ (function (_super) { tslib.__extends(KeepAlivePolicy, _super); /** * Creates an instance of KeepAlivePolicy. * * @param nextPolicy - * @param options - * @param keepAliveOptions - */ function KeepAlivePolicy(nextPolicy, options, keepAliveOptions) { var _this = _super.call(this, nextPolicy, options) || this; _this.keepAliveOptions = keepAliveOptions; return _this; } /** * Sends out request. * * @param request - * @returns */ KeepAlivePolicy.prototype.sendRequest = function (request) { return tslib.__awaiter(this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { request.keepAlive = this.keepAliveOptions.enable; return [2 /*return*/, this._nextPolicy.sendRequest(request)]; }); }); }; return KeepAlivePolicy; }(BaseRequestPolicy)); // Copyright (c) Microsoft Corporation. var createSpan = coreTracing.createSpanFunction({ packagePrefix: "", namespace: "" }); function tracingPolicy(tracingOptions) { if (tracingOptions === void 0) { tracingOptions = {}; } return { create: function (nextPolicy, options) { return new TracingPolicy(nextPolicy, options, tracingOptions); } }; } var TracingPolicy = /** @class */ (function (_super) { tslib.__extends(TracingPolicy, _super); function TracingPolicy(nextPolicy, options, tracingOptions) { var _this = _super.call(this, nextPolicy, options) || this; _this.userAgent = tracingOptions.userAgent; return _this; } TracingPolicy.prototype.sendRequest = function (request) { return tslib.__awaiter(this, void 0, void 0, function () { var path, span, spanContext, traceParentHeader, traceState, response, serviceRequestId, err_1; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: if (!request.tracingContext) { return [2 /*return*/, this._nextPolicy.sendRequest(request)]; } path = URLBuilder.parse(request.url).getPath() || "/"; span = createSpan(path, { tracingOptions: { spanOptions: tslib.__assign(tslib.__assign({}, request.spanOptions), { kind: coreTracing.SpanKind.CLIENT }), tracingContext: request.tracingContext } }).span; span.setAttributes({ "http.method": request.method, "http.url": request.url, requestId: request.requestId }); if (this.userAgent) { span.setAttribute("http.user_agent", this.userAgent); } _a.label = 1; case 1: _a.trys.push([1, 3, 4, 5]); spanContext = span.context(); traceParentHeader = coreTracing.getTraceParentHeader(spanContext); if (traceParentHeader) { request.headers.set("traceparent", traceParentHeader); traceState = spanContext.traceState && spanContext.traceState.serialize(); // if tracestate is set, traceparent MUST be set, so only set tracestate after traceparent if (traceState) { request.headers.set("tracestate", traceState); } } return [4 /*yield*/, this._nextPolicy.sendRequest(request)]; case 2: response = _a.sent(); span.setAttribute("http.status_code", response.status); serviceRequestId = response.headers.get("x-ms-request-id"); if (serviceRequestId) { span.setAttribute("serviceRequestId", serviceRequestId); } span.setStatus({ code: coreTracing.SpanStatusCode.OK }); return [2 /*return*/, response]; case 3: err_1 = _a.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: err_1.message }); span.setAttribute("http.status_code", err_1.statusCode); throw err_1; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; return TracingPolicy; }(BaseRequestPolicy)); // Copyright (c) Microsoft Corporation. /** * Returns a request policy factory that can be used to create an instance of * {@link DisableResponseDecompressionPolicy}. */ function disableResponseDecompressionPolicy() { return { create: function (nextPolicy, options) { return new DisableResponseDecompressionPolicy(nextPolicy, options); } }; } /** * A policy to disable response decompression according to Accept-Encoding header * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding */ var DisableResponseDecompressionPolicy = /** @class */ (function (_super) { tslib.__extends(DisableResponseDecompressionPolicy, _super); /** * Creates an instance of DisableResponseDecompressionPolicy. * * @param nextPolicy - * @param options - */ // The parent constructor is protected. /* eslint-disable-next-line @typescript-eslint/no-useless-constructor */ function DisableResponseDecompressionPolicy(nextPolicy, options) { return _super.call(this, nextPolicy, options) || this; } /** * Sends out request. * * @param request - * @returns */ DisableResponseDecompressionPolicy.prototype.sendRequest = function (request) { return tslib.__awaiter(this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { request.decompressResponse = false; return [2 /*return*/, this._nextPolicy.sendRequest(request)]; }); }); }; return DisableResponseDecompressionPolicy; }(BaseRequestPolicy)); // Copyright (c) Microsoft Corporation. function ndJsonPolicy() { return { create: function (nextPolicy, options) { return new NdJsonPolicy(nextPolicy, options); } }; } /** * NdJsonPolicy that formats a JSON array as newline-delimited JSON */ var NdJsonPolicy = /** @class */ (function (_super) { tslib.__extends(NdJsonPolicy, _super); /** * Creates an instance of KeepAlivePolicy. */ function NdJsonPolicy(nextPolicy, options) { return _super.call(this, nextPolicy, options) || this; } /** * Sends a request. */ NdJsonPolicy.prototype.sendRequest = function (request) { return tslib.__awaiter(this, void 0, void 0, function () { var body; return tslib.__generator(this, function (_a) { // There currently isn't a good way to bypass the serializer if (typeof request.body === "string" && request.body.startsWith("[")) { body = JSON.parse(request.body); if (Array.isArray(body)) { request.body = body.map(function (item) { return JSON.stringify(item) + "\n"; }).join(""); } } return [2 /*return*/, this._nextPolicy.sendRequest(request)]; }); }); }; return NdJsonPolicy; }(BaseRequestPolicy)); // Copyright (c) Microsoft Corporation. var cachedHttpClient; function getCachedDefaultHttpClient() { if (!cachedHttpClient) { cachedHttpClient = new NodeFetchHttpClient(); } return cachedHttpClient; } // Copyright (c) Microsoft Corporation. /** * ServiceClient sends service requests and receives responses. */ var ServiceClient = /** @class */ (function () { /** * The ServiceClient constructor * @param credentials - The credentials used for authentication with the service. * @param options - The service client options that govern the behavior of the client. */ function ServiceClient(credentials, /* eslint-disable-next-line @azure/azure-sdk/ts-naming-options */ options) { var _this = this; if (!options) { options = {}; } this._withCredentials = options.withCredentials || false; this._httpClient = options.httpClient || getCachedDefaultHttpClient(); this._requestPolicyOptions = new RequestPolicyOptions(options.httpPipelineLogger); var requestPolicyFactories; if (Array.isArray(options.requestPolicyFactories)) { logger.info("ServiceClient: using custom request policies"); requestPolicyFactories = options.requestPolicyFactories; } else { var authPolicyFactory = undefined; if (coreAuth.isTokenCredential(credentials)) { logger.info("ServiceClient: creating bearer token authentication policy from provided credentials"); // Create a wrapped RequestPolicyFactory here so that we can provide the // correct scope to the BearerTokenAuthenticationPolicy at the first time // one is requested. This is needed because generated ServiceClient // implementations do not set baseUri until after ServiceClient's constructor // is finished, leaving baseUri empty at the time when it is needed to // build the correct scope name. var wrappedPolicyFactory = function () { var bearerTokenPolicyFactory = undefined; // eslint-disable-next-line @typescript-eslint/no-this-alias var serviceClient = _this; var serviceClientOptions = options; return { create: function (nextPolicy, createOptions) { var credentialScopes = getCredentialScopes(serviceClientOptions, serviceClient.baseUri); if (!credentialScopes) { throw new Error("When using credential, the ServiceClient must contain a baseUri or a credentialScopes in ServiceClientOptions. Unable to create a bearerTokenAuthenticationPolicy"); } if (bearerTokenPolicyFactory === undefined || bearerTokenPolicyFactory === null) { bearerTokenPolicyFactory = bearerTokenAuthenticationPolicy(credentials, credentialScopes); } return bearerTokenPolicyFactory.create(nextPolicy, createOptions); } }; }; authPolicyFactory = wrappedPolicyFactory(); } else if (credentials && typeof credentials.signRequest === "function") { logger.info("ServiceClient: creating signing policy from provided credentials"); authPolicyFactory = signingPolicy(credentials); } else if (credentials !== undefined && credentials !== null) { throw new Error("The credentials argument must implement the TokenCredential interface"); } logger.info("ServiceClient: using default request policies"); requestPolicyFactories = createDefaultRequestPolicyFactories(authPolicyFactory, options); if (options.requestPolicyFactories) { // options.requestPolicyFactories can also be a function that manipulates // the default requestPolicyFactories array var newRequestPolicyFactories = options.requestPolicyFactories(requestPolicyFactories); if (newRequestPolicyFactories) { requestPolicyFactories = newRequestPolicyFactories; } } } this._requestPolicyFactories = requestPolicyFactories; } /** * Send the provided httpRequest. */ ServiceClient.prototype.sendRequest = function (options) { if (options === null || options === undefined || typeof options !== "object") { throw new Error("options cannot be null or undefined and it must be of type object."); } var httpRequest; try { if (isWebResourceLike(options)) { options.validateRequestProperties(); httpRequest = options; } else { httpRequest = new WebResource(); httpRequest = httpRequest.prepare(options); } } catch (error) { return Promise.reject(error); } var httpPipeline = this._httpClient; if (this._requestPolicyFactories && this._requestPolicyFactories.length > 0) { for (var i = this._requestPolicyFactories.length - 1; i >= 0; --i) { httpPipeline = this._requestPolicyFactories[i].create(httpPipeline, this._requestPolicyOptions); } } return httpPipeline.sendRequest(httpRequest); }; /** * Send an HTTP request that is populated using the provided OperationSpec. * @param operationArguments - The arguments that the HTTP request's templated values will be populated from. * @param operationSpec - The OperationSpec to use to populate the httpRequest. * @param callback - The callback to call when the response is received. */ ServiceClient.prototype.sendOperationRequest = function (operationArguments, operationSpec, callback) { var _a; return tslib.__awaiter(this, void 0, void 0, function () { var serializerOptions, httpRequest, result, baseUri, requestUrl, _i, _b, urlParameter, urlParameterValue, _c, _d, queryParameter, queryParameterValue, index, item, index, contentType, _e, _f, headerParameter, headerValue, headerCollectionPrefix, _g, _h, key, options, customHeaderName, rawResponse, sendRequestError, error_1, error_2, cb; return tslib.__generator(this, function (_j) { switch (_j.label) { case 0: if (typeof operationArguments.options === "function") { callback = operationArguments.options; operationArguments.options = undefined; } serializerOptions = (_a = operationArguments.options) === null || _a === void 0 ? void 0 : _a.serializerOptions; httpRequest = new WebResource(); _j.label = 1; case 1: _j.trys.push([1, 6, , 7]); baseUri = operationSpec.baseUrl || this.baseUri; if (!baseUri) { 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."); } httpRequest.method = operationSpec.httpMethod; httpRequest.operationSpec = operationSpec; requestUrl = URLBuilder.parse(baseUri); if (operationSpec.path) { requestUrl.appendPath(operationSpec.path); } if (operationSpec.urlParameters && operationSpec.urlParameters.length > 0) { for (_i = 0, _b = operationSpec.urlParameters; _i < _b.length; _i++) { urlParameter = _b[_i]; urlParameterValue = getOperationArgumentValueFromParameter(this, operationArguments, urlParameter, operationSpec.serializer); urlParameterValue = operationSpec.serializer.serialize(urlParameter.mapper, urlParameterValue, getPathStringFromParameter(urlParameter), serializerOptions); if (!urlParameter.skipEncoding) { urlParameterValue = encodeURIComponent(urlParameterValue); } requestUrl.replaceAll("{" + (urlParameter.mapper.serializedName || getPathStringFromParameter(urlParameter)) + "}", urlParameterValue); } } if (operationSpec.queryParameters && operationSpec.queryParameters.length > 0) { for (_c = 0, _d = operationSpec.queryParameters; _c < _d.length; _c++) { queryParameter = _d[_c]; queryParameterValue = getOperationArgumentValueFromParameter(this, operationArguments, queryParameter, operationSpec.serializer); if (queryParameterValue !== undefined && queryParameterValue !== null) { queryParameterValue = operationSpec.serializer.serialize(queryParameter.mapper, queryParameterValue, getPathStringFromParameter(queryParameter), serializerOptions); if (queryParameter.collectionFormat !== undefined && queryParameter.collectionFormat !== null) { if (queryParameter.collectionFormat === exports.QueryCollectionFormat.Multi) { if (queryParameterValue.length === 0) { // The collection is empty, no need to try serializing the current queryParam continue; } else { for (index in queryParameterValue) { item = queryParameterValue[index]; queryParameterValue[index] = item === undefined || item === null ? "" : item.toString(); } } } else if (queryParameter.collectionFormat === exports.QueryCollectionFormat.Ssv || queryParameter.collectionFormat === exports.QueryCollectionFormat.Tsv) { queryParameterValue = queryParameterValue.join(queryParameter.collectionFormat); } } if (!queryParameter.skipEncoding) { if (Array.isArray(queryParameterValue)) { for (index in queryParameterValue) { if (queryParameterValue[index] !== undefined && queryParameterValue[index] !== null) { queryParameterValue[index] = encodeURIComponent(queryParameterValue[index]); } } } else { queryParameterValue = encodeURIComponent(queryParameterValue); } } if (queryParameter.collectionFormat !== undefined && queryParameter.collectionFormat !== null && queryParameter.collectionFormat !== exports.QueryCollectionFormat.Multi && queryParameter.collectionFormat !== exports.QueryCollectionFormat.Ssv && queryParameter.collectionFormat !== exports.QueryCollectionFormat.Tsv) { queryParameterValue = queryParameterValue.join(queryParameter.collectionFormat); } requestUrl.setQueryParameter(queryParameter.mapper.serializedName || getPathStringFromParameter(queryParameter), queryParameterValue); } } } httpRequest.url = requestUrl.toString(); contentType = operationSpec.contentType || this.requestContentType; if (contentType && operationSpec.requestBody) { httpRequest.headers.set("Content-Type", contentType); } if (operationSpec.headerParameters) { for (_e = 0, _f = operationSpec.headerParameters; _e < _f.length; _e++) { headerParameter = _f[_e]; headerValue = getOperationArgumentValueFromParameter(this, operationArguments, headerParameter, operationSpec.serializer); if (headerValue !== undefined && headerValue !== null) { headerValue = operationSpec.serializer.serialize(headerParameter.mapper, headerValue, getPathStringFromParameter(headerParameter), serializerOptions); headerCollectionPrefix = headerParameter.mapper .headerCollectionPrefix; if (headerCollectionPrefix) { for (_g = 0, _h = Object.keys(headerValue); _g < _h.length; _g++) { key = _h[_g]; httpRequest.headers.set(headerCollectionPrefix + key, headerValue[key]); } } else { httpRequest.headers.set(headerParameter.mapper.serializedName || getPathStringFromParameter(headerParameter), headerValue); } } } } options = operationArguments.options; if (options) { if (options.customHeaders) { for (customHeaderName in options.customHeaders) { httpRequest.headers.set(customHeaderName, options.customHeaders[customHeaderName]); } } if (options.abortSignal) { httpRequest.abortSignal = options.abortSignal; } if (options.timeout) { httpRequest.timeout = options.timeout; } if (options.onUploadProgress) { httpRequest.onUploadProgress = options.onUploadProgress; } if (options.onDownloadProgress) { httpRequest.onDownloadProgress = options.onDownloadProgress; } if (options.spanOptions) { httpRequest.spanOptions = options.spanOptions; } if (options.tracingContext) { httpRequest.tracingContext = options.tracingContext; } if (options.shouldDeserialize !== undefined && options.shouldDeserialize !== null) { httpRequest.shouldDeserialize = options.shouldDeserialize; } } httpRequest.withCredentials = this._withCredentials; serializeRequestBody(this, httpRequest, operationArguments, operationSpec); if (httpRequest.streamResponseStatusCodes === undefined) { httpRequest.streamResponseStatusCodes = getStreamResponseStatusCodes(operationSpec); } rawResponse = void 0; sendRequestError = void 0; _j.label = 2; case 2: _j.trys.push([2, 4, , 5]); return [4 /*yield*/, this.sendRequest(httpRequest)]; case 3: rawResponse = _j.sent(); return [3 /*break*/, 5]; case 4: error_1 = _j.sent(); sendRequestError = error_1; return [3 /*break*/, 5]; case 5: if (sendRequestError) { if (sendRequestError.response) { sendRequestError.details = flattenResponse(sendRequestError.response, operationSpec.responses[sendRequestError.statusCode] || operationSpec.responses["default"]); } result = Promise.reject(sendRequestError); } else { result = Promise.resolve(flattenResponse(rawResponse, operationSpec.responses[rawResponse.status])); } return [3 /*break*/, 7]; case 6: error_2 = _j.sent(); result = Promise.reject(error_2); return [3 /*break*/, 7]; case 7: cb = callback; if (cb) { result .then(function (res) { return cb(null, res._response.parsedBody, res._response.request, res._response); }) .catch(function (err) { return cb(err); }); } return [2 /*return*/, result]; } }); }); }; return ServiceClient; }()); function serializeRequestBody(serviceClient, httpRequest, operationArguments, operationSpec) { var _a, _b, _c, _d, _e, _f; var serializerOptions = (_b = (_a = operationArguments.options) === null || _a === void 0 ? void 0 : _a.serializerOptions) !== null && _b !== void 0 ? _b : {}; var updatedOptions = { rootName: (_c = serializerOptions.rootName) !== null && _c !== void 0 ? _c : "", includeRoot: (_d = serializerOptions.includeRoot) !== null && _d !== void 0 ? _d : false, xmlCharKey: (_e = serializerOptions.xmlCharKey) !== null && _e !== void 0 ? _e : XML_CHARKEY }; var xmlCharKey = serializerOptions.xmlCharKey; if (operationSpec.requestBody && operationSpec.requestBody.mapper) { httpRequest.body = getOperationArgumentValueFromParameter(serviceClient, operationArguments, operationSpec.requestBody, operationSpec.serializer); var bodyMapper = operationSpec.requestBody.mapper; var required = bodyMapper.required, xmlName = bodyMapper.xmlName, xmlElementName = bodyMapper.xmlElementName, serializedName = bodyMapper.serializedName, xmlNamespace = bodyMapper.xmlNamespace, xmlNamespacePrefix = bodyMapper.xmlNamespacePrefix; var typeName = bodyMapper.type.name; try { if ((httpRequest.body !== undefined && httpRequest.body !== null) || required) { var requestBodyParameterPathString = getPathStringFromParameter(operationSpec.requestBody); httpRequest.body = operationSpec.serializer.serialize(bodyMapper, httpRequest.body, requestBodyParameterPathString, updatedOptions); var isStream = typeName === MapperType.Stream; if (operationSpec.isXML) { var xmlnsKey = xmlNamespacePrefix ? "xmlns:" + xmlNamespacePrefix : "xmlns"; var value = getXmlValueWithNamespace(xmlNamespace, xmlnsKey, typeName, httpRequest.body, updatedOptions); if (typeName === MapperType.Sequence) { httpRequest.body = stringifyXML(prepareXMLRootList(value, xmlElementName || xmlName || serializedName, xmlnsKey, xmlNamespace), { rootName: xmlName || serializedName, xmlCharKey: xmlCharKey }); } else if (!isStream) { httpRequest.body = stringifyXML(value, { rootName: xmlName || serializedName, xmlCharKey: xmlCharKey }); } } else if (typeName === MapperType.String && (((_f = operationSpec.contentType) === null || _f === void 0 ? void 0 : _f.match("text/plain")) || operationSpec.mediaType === "text")) { // the String serializer has validated that request body is a string // so just send the string. return; } else if (!isStream) { httpRequest.body = JSON.stringify(httpRequest.body); } } } catch (error) { throw new Error("Error \"" + error.message + "\" occurred in serializing the payload - " + JSON.stringify(serializedName, undefined, " ") + "."); } } else if (operationSpec.formDataParameters && operationSpec.formDataParameters.length > 0) { httpRequest.formData = {}; for (var _i = 0, _g = operationSpec.formDataParameters; _i < _g.length; _i++) { var formDataParameter = _g[_i]; var formDataParameterValue = getOperationArgumentValueFromParameter(serviceClient, operationArguments, formDataParameter, operationSpec.serializer); if (formDataParameterValue !== undefined && formDataParameterValue !== null) { var formDataParameterPropertyName = formDataParameter.mapper.serializedName || getPathStringFromParameter(formDataParameter); httpRequest.formData[formDataParameterPropertyName] = operationSpec.serializer.serialize(formDataParameter.mapper, formDataParameterValue, getPathStringFromParameter(formDataParameter), updatedOptions); } } } } /** * Adds an xml namespace to the xml serialized object if needed, otherwise it just returns the value itself */ function getXmlValueWithNamespace(xmlNamespace, xmlnsKey, typeName, serializedValue, options) { var _a; // Composite and Sequence schemas already got their root namespace set during serialization // We just need to add xmlns to the other schema types if (xmlNamespace && !["Composite", "Sequence", "Dictionary"].includes(typeName)) { var result = {}; result[options.xmlCharKey] = serializedValue; result[XML_ATTRKEY] = (_a = {}, _a[xmlnsKey] = xmlNamespace, _a); return result; } return serializedValue; } function getValueOrFunctionResult(value, defaultValueCreator) { var result; if (typeof value === "string") { result = value; } else { result = defaultValueCreator(); if (typeof value === "function") { result = value(result); } } return result; } function createDefaultRequestPolicyFactories(authPolicyFactory, options) { var factories = []; if (options.generateClientRequestIdHeader) { factories.push(generateClientRequestIdPolicy(options.clientRequestIdHeaderName)); } if (authPolicyFactory) { factories.push(authPolicyFactory); } var userAgentHeaderName = getValueOrFunctionResult(options.userAgentHeaderName, getDefaultUserAgentHeaderName); var userAgentHeaderValue = getValueOrFunctionResult(options.userAgent, getDefaultUserAgentValue); if (userAgentHeaderName && userAgentHeaderValue) { factories.push(userAgentPolicy({ key: userAgentHeaderName, value: userAgentHeaderValue })); } factories.push(redirectPolicy()); factories.push(rpRegistrationPolicy(options.rpRegistrationRetryTimeout)); if (!options.noRetryPolicy) { factories.push(exponentialRetryPolicy()); factories.push(systemErrorRetryPolicy()); factories.push(throttlingRetryPolicy()); } factories.push(deserializationPolicy(options.deserializationContentTypes)); { factories.push(proxyPolicy(options.proxySettings)); } factories.push(logPolicy({ logger: logger.info })); return factories; } function createPipelineFromOptions(pipelineOptions, authPolicyFactory) { var requestPolicyFactories = []; if (pipelineOptions.sendStreamingJson) { requestPolicyFactories.push(ndJsonPolicy()); } var userAgentValue = undefined; if (pipelineOptions.userAgentOptions && pipelineOptions.userAgentOptions.userAgentPrefix) { var userAgentInfo = []; userAgentInfo.push(pipelineOptions.userAgentOptions.userAgentPrefix); // Add the default user agent value if it isn't already specified // by the userAgentPrefix option. var defaultUserAgentInfo = getDefaultUserAgentValue(); if (userAgentInfo.indexOf(defaultUserAgentInfo) === -1) { userAgentInfo.push(defaultUserAgentInfo); } userAgentValue = userAgentInfo.join(" "); } var keepAliveOptions = tslib.__assign(tslib.__assign({}, DefaultKeepAliveOptions), pipelineOptions.keepAliveOptions); var retryOptions = tslib.__assign(tslib.__assign({}, DefaultRetryOptions), pipelineOptions.retryOptions); var redirectOptions = tslib.__assign(tslib.__assign({}, DefaultRedirectOptions), pipelineOptions.redirectOptions); { requestPolicyFactories.push(proxyPolicy(pipelineOptions.proxyOptions)); } var deserializationOptions = tslib.__assign(tslib.__assign({}, DefaultDeserializationOptions), pipelineOptions.deserializationOptions); var loggingOptions = tslib.__assign({}, pipelineOptions.loggingOptions); requestPolicyFactories.push(tracingPolicy({ userAgent: userAgentValue }), keepAlivePolicy(keepAliveOptions), userAgentPolicy({ value: userAgentValue }), generateClientRequestIdPolicy(), deserializationPolicy(deserializationOptions.expectedContentTypes), throttlingRetryPolicy(), systemErrorRetryPolicy(), exponentialRetryPolicy(retryOptions.maxRetries, retryOptions.retryDelayInMs, retryOptions.maxRetryDelayInMs)); if (redirectOptions.handleRedirects) { requestPolicyFactories.push(redirectPolicy(redirectOptions.maxRetries)); } if (authPolicyFactory) { requestPolicyFactories.push(authPolicyFactory); } requestPolicyFactories.push(logPolicy(loggingOptions)); if (isNode && pipelineOptions.decompressResponse === false) { requestPolicyFactories.push(disableResponseDecompressionPolicy()); } return { httpClient: pipelineOptions.httpClient, requestPolicyFactories: requestPolicyFactories }; } function getOperationArgumentValueFromParameter(serviceClient, operationArguments, parameter, serializer) { return getOperationArgumentValueFromParameterPath(serviceClient, operationArguments, parameter.parameterPath, parameter.mapper, serializer); } function getOperationArgumentValueFromParameterPath(serviceClient, operationArguments, parameterPath, parameterMapper, serializer) { var _a; var value; if (typeof parameterPath === "string") { parameterPath = [parameterPath]; } var serializerOptions = (_a = operationArguments.options) === null || _a === void 0 ? void 0 : _a.serializerOptions; if (Array.isArray(parameterPath)) { if (parameterPath.length > 0) { if (parameterMapper.isConstant) { value = parameterMapper.defaultValue; } else { var propertySearchResult = getPropertyFromParameterPath(operationArguments, parameterPath); if (!propertySearchResult.propertyFound) { propertySearchResult = getPropertyFromParameterPath(serviceClient, parameterPath); } var useDefaultValue = false; if (!propertySearchResult.propertyFound) { useDefaultValue = parameterMapper.required || (parameterPath[0] === "options" && parameterPath.length === 2); } value = useDefaultValue ? parameterMapper.defaultValue : propertySearchResult.propertyValue; } // Serialize just for validation purposes. var parameterPathString = getPathStringFromParameterPath(parameterPath, parameterMapper); serializer.serialize(parameterMapper, value, parameterPathString, serializerOptions); } } else { if (parameterMapper.required) { value = {}; } for (var propertyName in parameterPath) { var propertyMapper = parameterMapper.type.modelProperties[propertyName]; var propertyPath = parameterPath[propertyName]; var propertyValue = getOperationArgumentValueFromParameterPath(serviceClient, operationArguments, propertyPath, propertyMapper, serializer); // Serialize just for validation purposes. var propertyPathString = getPathStringFromParameterPath(propertyPath, propertyMapper); serializer.serialize(propertyMapper, propertyValue, propertyPathString, serializerOptions); if (propertyValue !== undefined && propertyValue !== null) { if (!value) { value = {}; } value[propertyName] = propertyValue; } } } return value; } function getPropertyFromParameterPath(parent, parameterPath) { var result = { propertyFound: false }; var i = 0; for (; i < parameterPath.length; ++i) { var parameterPathPart = parameterPath[i]; // Make sure to check inherited properties too, so don't use hasOwnProperty(). if (parent !== undefined && parent !== null && parameterPathPart in parent) { parent = parent[parameterPathPart]; } else { break; } } if (i === parameterPath.length) { result.propertyValue = parent; result.propertyFound = true; } return result; } function flattenResponse(_response, responseSpec) { var parsedHeaders = _response.parsedHeaders; var bodyMapper = responseSpec && responseSpec.bodyMapper; var addOperationResponse = function (obj) { return Object.defineProperty(obj, "_response", { value: _response }); }; if (bodyMapper) { var typeName = bodyMapper.type.name; if (typeName === "Stream") { return addOperationResponse(tslib.__assign(tslib.__assign({}, parsedHeaders), { blobBody: _response.blobBody, readableStreamBody: _response.readableStreamBody })); } var modelProperties_1 = (typeName === "Composite" && bodyMapper.type.modelProperties) || {}; var isPageableResponse = Object.keys(modelProperties_1).some(function (k) { return modelProperties_1[k].serializedName === ""; }); if (typeName === "Sequence" || isPageableResponse) { var arrayResponse = tslib.__spreadArray([], (_response.parsedBody || [])); for (var _i = 0, _a = Object.keys(modelProperties_1); _i < _a.length; _i++) { var key = _a[_i]; if (modelProperties_1[key].serializedName) { arrayResponse[key] = _response.parsedBody[key]; } } if (parsedHeaders) { for (var _b = 0, _c = Object.keys(parsedHeaders); _b < _c.length; _b++) { var key = _c[_b]; arrayResponse[key] = parsedHeaders[key]; } } addOperationResponse(arrayResponse); return arrayResponse; } if (typeName === "Composite" || typeName === "Dictionary") { return addOperationResponse(tslib.__assign(tslib.__assign({}, parsedHeaders), _response.parsedBody)); } } if (bodyMapper || _response.request.method === "HEAD" || isPrimitiveType(_response.parsedBody)) { // primitive body types and HEAD booleans return addOperationResponse(tslib.__assign(tslib.__assign({}, parsedHeaders), { body: _response.parsedBody })); } return addOperationResponse(tslib.__assign(tslib.__assign({}, parsedHeaders), _response.parsedBody)); } function getCredentialScopes(options, baseUri) { if (options === null || options === void 0 ? void 0 : options.credentialScopes) { var scopes = options.credentialScopes; return Array.isArray(scopes) ? scopes.map(function (scope) { return new url.URL(scope).toString(); }) : new url.URL(scopes).toString(); } if (baseUri) { return baseUri + "/.default"; } return undefined; } // Copyright (c) Microsoft Corporation. /** * This function is only here for compatibility. Use createSpanFunction in core-tracing. * * @deprecated This function is only here for compatibility. Use createSpanFunction in core-tracing. * @hidden * @param spanConfig - The name of the operation being performed. * @param tracingOptions - The options for the underlying http request. */ function createSpanFunction(args) { return coreTracing.createSpanFunction(args); } // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. /** * Defines the default token refresh buffer duration. */ var TokenRefreshBufferMs = 2 * 60 * 1000; // 2 Minutes /** * Provides an {@link AccessTokenCache} implementation which clears * the cached {@link AccessToken}'s after the expiresOnTimestamp has * passed. * * @deprecated No longer used in the bearer authorization policy. */ var ExpiringAccessTokenCache = /** @class */ (function () { /** * Constructs an instance of {@link ExpiringAccessTokenCache} with * an optional expiration buffer time. */ function ExpiringAccessTokenCache(tokenRefreshBufferMs) { if (tokenRefreshBufferMs === void 0) { tokenRefreshBufferMs = TokenRefreshBufferMs; } this.cachedToken = undefined; this.tokenRefreshBufferMs = tokenRefreshBufferMs; } ExpiringAccessTokenCache.prototype.setCachedToken = function (accessToken) { this.cachedToken = accessToken; }; ExpiringAccessTokenCache.prototype.getCachedToken = function () { if (this.cachedToken && Date.now() + this.tokenRefreshBufferMs >= this.cachedToken.expiresOnTimestamp) { this.cachedToken = undefined; } return this.cachedToken; }; return ExpiringAccessTokenCache; }()); // Copyright (c) Microsoft Corporation. /** * Helps the core-http token authentication policies with requesting a new token if we're not currently waiting for a new token. * * @deprecated No longer used in the bearer authorization policy. */ var AccessTokenRefresher = /** @class */ (function () { function AccessTokenRefresher(credential, scopes, requiredMillisecondsBeforeNewRefresh) { if (requiredMillisecondsBeforeNewRefresh === void 0) { requiredMillisecondsBeforeNewRefresh = 30000; } this.credential = credential; this.scopes = scopes; this.requiredMillisecondsBeforeNewRefresh = requiredMillisecondsBeforeNewRefresh; this.lastCalled = 0; } /** * Returns true if the required milliseconds(defaulted to 30000) have been passed signifying * that we are ready for a new refresh. */ AccessTokenRefresher.prototype.isReady = function () { // We're only ready for a new refresh if the required milliseconds have passed. return (!this.lastCalled || Date.now() - this.lastCalled > this.requiredMillisecondsBeforeNewRefresh); }; /** * Stores the time in which it is called, * then requests a new token, * then sets this.promise to undefined, * then returns the token. */ AccessTokenRefresher.prototype.getToken = function (options) { return tslib.__awaiter(this, void 0, void 0, function () { var token; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: this.lastCalled = Date.now(); return [4 /*yield*/, this.credential.getToken(this.scopes, options)]; case 1: token = _a.sent(); this.promise = undefined; return [2 /*return*/, token || undefined]; } }); }); }; /** * Requests a new token if we're not currently waiting for a new token. * Returns null if the required time between each call hasn't been reached. */ AccessTokenRefresher.prototype.refresh = function (options) { if (!this.promise) { this.promise = this.getToken(options); } return this.promise; }; return AccessTokenRefresher; }()); // Copyright (c) Microsoft Corporation. var HeaderConstants = Constants.HeaderConstants; var DEFAULT_AUTHORIZATION_SCHEME = "Basic"; var BasicAuthenticationCredentials = /** @class */ (function () { /** * Creates a new BasicAuthenticationCredentials object. * * @param userName - User name. * @param password - Password. * @param authorizationScheme - The authorization scheme. */ function BasicAuthenticationCredentials(userName, password, authorizationScheme) { if (authorizationScheme === void 0) { authorizationScheme = DEFAULT_AUTHORIZATION_SCHEME; } this.authorizationScheme = DEFAULT_AUTHORIZATION_SCHEME; if (userName === null || userName === undefined || typeof userName.valueOf() !== "string") { throw new Error("userName cannot be null or undefined and must be of type string."); } if (password === null || password === undefined || typeof password.valueOf() !== "string") { throw new Error("password cannot be null or undefined and must be of type string."); } this.userName = userName; this.password = password; this.authorizationScheme = authorizationScheme; } /** * Signs a request with the Authentication header. * * @param webResource - The WebResourceLike to be signed. * @returns The signed request object. */ BasicAuthenticationCredentials.prototype.signRequest = function (webResource) { var credentials = this.userName + ":" + this.password; var encodedCredentials = this.authorizationScheme + " " + encodeString(credentials); if (!webResource.headers) webResource.headers = new HttpHeaders(); webResource.headers.set(HeaderConstants.AUTHORIZATION, encodedCredentials); return Promise.resolve(webResource); }; return BasicAuthenticationCredentials; }()); // Copyright (c) Microsoft Corporation. /** * Authenticates to a service using an API key. */ var ApiKeyCredentials = /** @class */ (function () { /** * @param options - Specifies the options to be provided for auth. Either header or query needs to be provided. */ function ApiKeyCredentials(options) { if (!options || (options && !options.inHeader && !options.inQuery)) { throw new Error("options cannot be null or undefined. Either \"inHeader\" or \"inQuery\" property of the options object needs to be provided."); } this.inHeader = options.inHeader; this.inQuery = options.inQuery; } /** * Signs a request with the values provided in the inHeader and inQuery parameter. * * @param webResource - The WebResourceLike to be signed. * @returns The signed request object. */ ApiKeyCredentials.prototype.signRequest = function (webResource) { if (!webResource) { return Promise.reject(new Error("webResource cannot be null or undefined and must be of type \"object\".")); } if (this.inHeader) { if (!webResource.headers) { webResource.headers = new HttpHeaders(); } for (var headerName in this.inHeader) { webResource.headers.set(headerName, this.inHeader[headerName]); } } if (this.inQuery) { if (!webResource.url) { return Promise.reject(new Error("url cannot be null in the request object.")); } if (webResource.url.indexOf("?") < 0) { webResource.url += "?"; } for (var key in this.inQuery) { if (!webResource.url.endsWith("?")) { webResource.url += "&"; } webResource.url += key + "=" + this.inQuery[key]; } } return Promise.resolve(webResource); }; return ApiKeyCredentials; }()); // Copyright (c) Microsoft Corporation. var TopicCredentials = /** @class */ (function (_super) { tslib.__extends(TopicCredentials, _super); /** * Creates a new EventGrid TopicCredentials object. * * @param topicKey - The EventGrid topic key */ function TopicCredentials(topicKey) { var _this = this; if (!topicKey || (topicKey && typeof topicKey !== "string")) { throw new Error("topicKey cannot be null or undefined and must be of type string."); } var options = { inHeader: { "aeg-sas-key": topicKey } }; _this = _super.call(this, options) || this; return _this; } return TopicCredentials; }(ApiKeyCredentials)); Object.defineProperty(exports, "isTokenCredential", ({ enumerable: true, get: function () { return coreAuth.isTokenCredential; } })); exports.AccessTokenRefresher = AccessTokenRefresher; exports.ApiKeyCredentials = ApiKeyCredentials; exports.BaseRequestPolicy = BaseRequestPolicy; exports.BasicAuthenticationCredentials = BasicAuthenticationCredentials; exports.Constants = Constants; exports.DefaultHttpClient = NodeFetchHttpClient; exports.ExpiringAccessTokenCache = ExpiringAccessTokenCache; exports.HttpHeaders = HttpHeaders; exports.MapperType = MapperType; exports.RequestPolicyOptions = RequestPolicyOptions; exports.RestError = RestError; exports.Serializer = Serializer; exports.ServiceClient = ServiceClient; exports.TopicCredentials = TopicCredentials; exports.URLBuilder = URLBuilder; exports.URLQuery = URLQuery; exports.WebResource = WebResource; exports.XML_ATTRKEY = XML_ATTRKEY; exports.XML_CHARKEY = XML_CHARKEY; exports.applyMixins = applyMixins; exports.bearerTokenAuthenticationPolicy = bearerTokenAuthenticationPolicy; exports.createPipelineFromOptions = createPipelineFromOptions; exports.createSpanFunction = createSpanFunction; exports.delay = delay; exports.deserializationPolicy = deserializationPolicy; exports.deserializeResponseBody = deserializeResponseBody; exports.disableResponseDecompressionPolicy = disableResponseDecompressionPolicy; exports.encodeUri = encodeUri; exports.executePromisesSequentially = executePromisesSequentially; exports.exponentialRetryPolicy = exponentialRetryPolicy; exports.flattenResponse = flattenResponse; exports.generateClientRequestIdPolicy = generateClientRequestIdPolicy; exports.generateUuid = generateUuid; exports.getDefaultProxySettings = getDefaultProxySettings; exports.getDefaultUserAgentValue = getDefaultUserAgentValue; exports.isDuration = isDuration; exports.isNode = isNode; exports.isValidUuid = isValidUuid; exports.keepAlivePolicy = keepAlivePolicy; exports.logPolicy = logPolicy; exports.operationOptionsToRequestOptionsBase = operationOptionsToRequestOptionsBase; exports.parseXML = parseXML; exports.promiseToCallback = promiseToCallback; exports.promiseToServiceCallback = promiseToServiceCallback; exports.proxyPolicy = proxyPolicy; exports.redirectPolicy = redirectPolicy; exports.serializeObject = serializeObject; exports.signingPolicy = signingPolicy; exports.stringifyXML = stringifyXML; exports.stripRequest = stripRequest; exports.stripResponse = stripResponse; exports.systemErrorRetryPolicy = systemErrorRetryPolicy; exports.throttlingRetryPolicy = throttlingRetryPolicy; exports.tracingPolicy = tracingPolicy; exports.userAgentPolicy = userAgentPolicy; //# sourceMappingURL=index.js.map /***/ }), /***/ 8165: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; /*! * Copyright (c) 2015, Salesforce.com, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. Neither the name of Salesforce.com nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ const punycode = __nccwpck_require__(4213); const urlParse = __nccwpck_require__(8835).parse; const util = __nccwpck_require__(1669); const pubsuffix = __nccwpck_require__(8292); const Store = __nccwpck_require__(7707)/* .Store */ .y; const MemoryCookieStore = __nccwpck_require__(6738)/* .MemoryCookieStore */ .m; const pathMatch = __nccwpck_require__(807)/* .pathMatch */ .U; const VERSION = __nccwpck_require__(8742); const { fromCallback } = __nccwpck_require__(9046); // From RFC6265 S4.1.1 // note that it excludes \x3B ";" const COOKIE_OCTETS = /^[\x21\x23-\x2B\x2D-\x3A\x3C-\x5B\x5D-\x7E]+$/; const CONTROL_CHARS = /[\x00-\x1F]/; // From Chromium // '\r', '\n' and '\0' should be treated as a terminator in // the "relaxed" mode, see: // https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/parsed_cookie.cc#L60 const TERMINATORS = ["\n", "\r", "\0"]; // RFC6265 S4.1.1 defines path value as 'any CHAR except CTLs or ";"' // Note ';' is \x3B const PATH_VALUE = /[\x20-\x3A\x3C-\x7E]+/; // date-time parsing constants (RFC6265 S5.1.1) const DATE_DELIM = /[\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]/; const MONTH_TO_NUM = { jan: 0, feb: 1, mar: 2, apr: 3, may: 4, jun: 5, jul: 6, aug: 7, sep: 8, oct: 9, nov: 10, dec: 11 }; const MAX_TIME = 2147483647000; // 31-bit max const MIN_TIME = 0; // 31-bit min const SAME_SITE_CONTEXT_VAL_ERR = 'Invalid sameSiteContext option for getCookies(); expected one of "strict", "lax", or "none"'; function checkSameSiteContext(value) { const context = String(value).toLowerCase(); if (context === "none" || context === "lax" || context === "strict") { return context; } else { return null; } } const PrefixSecurityEnum = Object.freeze({ SILENT: "silent", STRICT: "strict", DISABLED: "unsafe-disabled" }); // Dumped from ip-regex@4.0.0, with the following changes: // * all capturing groups converted to non-capturing -- "(?:)" // * support for IPv6 Scoped Literal ("%eth1") removed // * lowercase hexadecimal only var IP_REGEX_LOWERCASE =/(?:^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$)|(?:^(?:(?:[a-f\d]{1,4}:){7}(?:[a-f\d]{1,4}|:)|(?:[a-f\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|:[a-f\d]{1,4}|:)|(?:[a-f\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,2}|:)|(?:[a-f\d]{1,4}:){4}(?:(?::[a-f\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,3}|:)|(?:[a-f\d]{1,4}:){3}(?:(?::[a-f\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,4}|:)|(?:[a-f\d]{1,4}:){2}(?:(?::[a-f\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,5}|:)|(?:[a-f\d]{1,4}:){1}(?:(?::[a-f\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,6}|:)|(?::(?:(?::[a-f\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-f\d]{1,4}){1,7}|:)))$)/; /* * Parses a Natural number (i.e., non-negative integer) with either the * *DIGIT ( non-digit *OCTET ) * or * *DIGIT * grammar (RFC6265 S5.1.1). * * The "trailingOK" boolean controls if the grammar accepts a * "( non-digit *OCTET )" trailer. */ function parseDigits(token, minDigits, maxDigits, trailingOK) { let count = 0; while (count < token.length) { const c = token.charCodeAt(count); // "non-digit = %x00-2F / %x3A-FF" if (c <= 0x2f || c >= 0x3a) { break; } count++; } // constrain to a minimum and maximum number of digits. if (count < minDigits || count > maxDigits) { return null; } if (!trailingOK && count != token.length) { return null; } return parseInt(token.substr(0, count), 10); } function parseTime(token) { const parts = token.split(":"); const result = [0, 0, 0]; /* RF6256 S5.1.1: * time = hms-time ( non-digit *OCTET ) * hms-time = time-field ":" time-field ":" time-field * time-field = 1*2DIGIT */ if (parts.length !== 3) { return null; } for (let i = 0; i < 3; i++) { // "time-field" must be strictly "1*2DIGIT", HOWEVER, "hms-time" can be // followed by "( non-digit *OCTET )" so therefore the last time-field can // have a trailer const trailingOK = i == 2; const num = parseDigits(parts[i], 1, 2, trailingOK); if (num === null) { return null; } result[i] = num; } return result; } function parseMonth(token) { token = String(token) .substr(0, 3) .toLowerCase(); const num = MONTH_TO_NUM[token]; return num >= 0 ? num : null; } /* * RFC6265 S5.1.1 date parser (see RFC for full grammar) */ function parseDate(str) { if (!str) { return; } /* RFC6265 S5.1.1: * 2. Process each date-token sequentially in the order the date-tokens * appear in the cookie-date */ const tokens = str.split(DATE_DELIM); if (!tokens) { return; } let hour = null; let minute = null; let second = null; let dayOfMonth = null; let month = null; let year = null; for (let i = 0; i < tokens.length; i++) { const token = tokens[i].trim(); if (!token.length) { continue; } let result; /* 2.1. If the found-time flag is not set and the token matches the time * production, set the found-time flag and set the hour- value, * minute-value, and second-value to the numbers denoted by the digits in * the date-token, respectively. Skip the remaining sub-steps and continue * to the next date-token. */ if (second === null) { result = parseTime(token); if (result) { hour = result[0]; minute = result[1]; second = result[2]; continue; } } /* 2.2. If the found-day-of-month flag is not set and the date-token matches * the day-of-month production, set the found-day-of- month flag and set * the day-of-month-value to the number denoted by the date-token. Skip * the remaining sub-steps and continue to the next date-token. */ if (dayOfMonth === null) { // "day-of-month = 1*2DIGIT ( non-digit *OCTET )" result = parseDigits(token, 1, 2, true); if (result !== null) { dayOfMonth = result; continue; } } /* 2.3. If the found-month flag is not set and the date-token matches the * month production, set the found-month flag and set the month-value to * the month denoted by the date-token. Skip the remaining sub-steps and * continue to the next date-token. */ if (month === null) { result = parseMonth(token); if (result !== null) { month = result; continue; } } /* 2.4. If the found-year flag is not set and the date-token matches the * year production, set the found-year flag and set the year-value to the * number denoted by the date-token. Skip the remaining sub-steps and * continue to the next date-token. */ if (year === null) { // "year = 2*4DIGIT ( non-digit *OCTET )" result = parseDigits(token, 2, 4, true); if (result !== null) { year = result; /* From S5.1.1: * 3. If the year-value is greater than or equal to 70 and less * than or equal to 99, increment the year-value by 1900. * 4. If the year-value is greater than or equal to 0 and less * than or equal to 69, increment the year-value by 2000. */ if (year >= 70 && year <= 99) { year += 1900; } else if (year >= 0 && year <= 69) { year += 2000; } } } } /* RFC 6265 S5.1.1 * "5. Abort these steps and fail to parse the cookie-date if: * * at least one of the found-day-of-month, found-month, found- * year, or found-time flags is not set, * * the day-of-month-value is less than 1 or greater than 31, * * the year-value is less than 1601, * * the hour-value is greater than 23, * * the minute-value is greater than 59, or * * the second-value is greater than 59. * (Note that leap seconds cannot be represented in this syntax.)" * * So, in order as above: */ if ( dayOfMonth === null || month === null || year === null || second === null || dayOfMonth < 1 || dayOfMonth > 31 || year < 1601 || hour > 23 || minute > 59 || second > 59 ) { return; } return new Date(Date.UTC(year, month, dayOfMonth, hour, minute, second)); } function formatDate(date) { return date.toUTCString(); } // S5.1.2 Canonicalized Host Names function canonicalDomain(str) { if (str == null) { return null; } str = str.trim().replace(/^\./, ""); // S4.1.2.3 & S5.2.3: ignore leading . // convert to IDN if any non-ASCII characters if (punycode && /[^\u0001-\u007f]/.test(str)) { str = punycode.toASCII(str); } return str.toLowerCase(); } // S5.1.3 Domain Matching function domainMatch(str, domStr, canonicalize) { if (str == null || domStr == null) { return null; } if (canonicalize !== false) { str = canonicalDomain(str); domStr = canonicalDomain(domStr); } /* * S5.1.3: * "A string domain-matches a given domain string if at least one of the * following conditions hold:" * * " o The domain string and the string are identical. (Note that both the * domain string and the string will have been canonicalized to lower case at * this point)" */ if (str == domStr) { return true; } /* " o All of the following [three] conditions hold:" */ /* "* The domain string is a suffix of the string" */ const idx = str.indexOf(domStr); if (idx <= 0) { return false; // it's a non-match (-1) or prefix (0) } // next, check it's a proper suffix // e.g., "a.b.c".indexOf("b.c") === 2 // 5 === 3+2 if (str.length !== domStr.length + idx) { return false; // it's not a suffix } /* " * The last character of the string that is not included in the * domain string is a %x2E (".") character." */ if (str.substr(idx-1,1) !== '.') { return false; // doesn't align on "." } /* " * The string is a host name (i.e., not an IP address)." */ if (IP_REGEX_LOWERCASE.test(str)) { return false; // it's an IP address } return true; } // RFC6265 S5.1.4 Paths and Path-Match /* * "The user agent MUST use an algorithm equivalent to the following algorithm * to compute the default-path of a cookie:" * * Assumption: the path (and not query part or absolute uri) is passed in. */ function defaultPath(path) { // "2. If the uri-path is empty or if the first character of the uri-path is not // a %x2F ("/") character, output %x2F ("/") and skip the remaining steps. if (!path || path.substr(0, 1) !== "/") { return "/"; } // "3. If the uri-path contains no more than one %x2F ("/") character, output // %x2F ("/") and skip the remaining step." if (path === "/") { return path; } const rightSlash = path.lastIndexOf("/"); if (rightSlash === 0) { return "/"; } // "4. Output the characters of the uri-path from the first character up to, // but not including, the right-most %x2F ("/")." return path.slice(0, rightSlash); } function trimTerminator(str) { for (let t = 0; t < TERMINATORS.length; t++) { const terminatorIdx = str.indexOf(TERMINATORS[t]); if (terminatorIdx !== -1) { str = str.substr(0, terminatorIdx); } } return str; } function parseCookiePair(cookiePair, looseMode) { cookiePair = trimTerminator(cookiePair); let firstEq = cookiePair.indexOf("="); if (looseMode) { if (firstEq === 0) { // '=' is immediately at start cookiePair = cookiePair.substr(1); firstEq = cookiePair.indexOf("="); // might still need to split on '=' } } else { // non-loose mode if (firstEq <= 0) { // no '=' or is at start return; // needs to have non-empty "cookie-name" } } let cookieName, cookieValue; if (firstEq <= 0) { cookieName = ""; cookieValue = cookiePair.trim(); } else { cookieName = cookiePair.substr(0, firstEq).trim(); cookieValue = cookiePair.substr(firstEq + 1).trim(); } if (CONTROL_CHARS.test(cookieName) || CONTROL_CHARS.test(cookieValue)) { return; } const c = new Cookie(); c.key = cookieName; c.value = cookieValue; return c; } function parse(str, options) { if (!options || typeof options !== "object") { options = {}; } str = str.trim(); // We use a regex to parse the "name-value-pair" part of S5.2 const firstSemi = str.indexOf(";"); // S5.2 step 1 const cookiePair = firstSemi === -1 ? str : str.substr(0, firstSemi); const c = parseCookiePair(cookiePair, !!options.loose); if (!c) { return; } if (firstSemi === -1) { return c; } // S5.2.3 "unparsed-attributes consist of the remainder of the set-cookie-string // (including the %x3B (";") in question)." plus later on in the same section // "discard the first ";" and trim". const unparsed = str.slice(firstSemi + 1).trim(); // "If the unparsed-attributes string is empty, skip the rest of these // steps." if (unparsed.length === 0) { return c; } /* * S5.2 says that when looping over the items "[p]rocess the attribute-name * and attribute-value according to the requirements in the following * subsections" for every item. Plus, for many of the individual attributes * in S5.3 it says to use the "attribute-value of the last attribute in the * cookie-attribute-list". Therefore, in this implementation, we overwrite * the previous value. */ const cookie_avs = unparsed.split(";"); while (cookie_avs.length) { const av = cookie_avs.shift().trim(); if (av.length === 0) { // happens if ";;" appears continue; } const av_sep = av.indexOf("="); let av_key, av_value; if (av_sep === -1) { av_key = av; av_value = null; } else { av_key = av.substr(0, av_sep); av_value = av.substr(av_sep + 1); } av_key = av_key.trim().toLowerCase(); if (av_value) { av_value = av_value.trim(); } switch (av_key) { case "expires": // S5.2.1 if (av_value) { const exp = parseDate(av_value); // "If the attribute-value failed to parse as a cookie date, ignore the // cookie-av." if (exp) { // over and underflow not realistically a concern: V8's getTime() seems to // store something larger than a 32-bit time_t (even with 32-bit node) c.expires = exp; } } break; case "max-age": // S5.2.2 if (av_value) { // "If the first character of the attribute-value is not a DIGIT or a "-" // character ...[or]... If the remainder of attribute-value contains a // non-DIGIT character, ignore the cookie-av." if (/^-?[0-9]+$/.test(av_value)) { const delta = parseInt(av_value, 10); // "If delta-seconds is less than or equal to zero (0), let expiry-time // be the earliest representable date and time." c.setMaxAge(delta); } } break; case "domain": // S5.2.3 // "If the attribute-value is empty, the behavior is undefined. However, // the user agent SHOULD ignore the cookie-av entirely." if (av_value) { // S5.2.3 "Let cookie-domain be the attribute-value without the leading %x2E // (".") character." const domain = av_value.trim().replace(/^\./, ""); if (domain) { // "Convert the cookie-domain to lower case." c.domain = domain.toLowerCase(); } } break; case "path": // S5.2.4 /* * "If the attribute-value is empty or if the first character of the * attribute-value is not %x2F ("/"): * Let cookie-path be the default-path. * Otherwise: * Let cookie-path be the attribute-value." * * We'll represent the default-path as null since it depends on the * context of the parsing. */ c.path = av_value && av_value[0] === "/" ? av_value : null; break; case "secure": // S5.2.5 /* * "If the attribute-name case-insensitively matches the string "Secure", * the user agent MUST append an attribute to the cookie-attribute-list * with an attribute-name of Secure and an empty attribute-value." */ c.secure = true; break; case "httponly": // S5.2.6 -- effectively the same as 'secure' c.httpOnly = true; break; case "samesite": // RFC6265bis-02 S5.3.7 const enforcement = av_value ? av_value.toLowerCase() : ""; switch (enforcement) { case "strict": c.sameSite = "strict"; break; case "lax": c.sameSite = "lax"; break; default: // RFC6265bis-02 S5.3.7 step 1: // "If cookie-av's attribute-value is not a case-insensitive match // for "Strict" or "Lax", ignore the "cookie-av"." // This effectively sets it to 'none' from the prototype. break; } break; default: c.extensions = c.extensions || []; c.extensions.push(av); break; } } return c; } /** * If the cookie-name begins with a case-sensitive match for the * string "__Secure-", abort these steps and ignore the cookie * entirely unless the cookie's secure-only-flag is true. * @param cookie * @returns boolean */ function isSecurePrefixConditionMet(cookie) { return !cookie.key.startsWith("__Secure-") || cookie.secure; } /** * If the cookie-name begins with a case-sensitive match for the * string "__Host-", abort these steps and ignore the cookie * entirely unless the cookie meets all the following criteria: * 1. The cookie's secure-only-flag is true. * 2. The cookie's host-only-flag is true. * 3. The cookie-attribute-list contains an attribute with an * attribute-name of "Path", and the cookie's path is "/". * @param cookie * @returns boolean */ function isHostPrefixConditionMet(cookie) { return ( !cookie.key.startsWith("__Host-") || (cookie.secure && cookie.hostOnly && cookie.path != null && cookie.path === "/") ); } // avoid the V8 deoptimization monster! function jsonParse(str) { let obj; try { obj = JSON.parse(str); } catch (e) { return e; } return obj; } function fromJSON(str) { if (!str) { return null; } let obj; if (typeof str === "string") { obj = jsonParse(str); if (obj instanceof Error) { return null; } } else { // assume it's an Object obj = str; } const c = new Cookie(); for (let i = 0; i < Cookie.serializableProperties.length; i++) { const prop = Cookie.serializableProperties[i]; if (obj[prop] === undefined || obj[prop] === cookieDefaults[prop]) { continue; // leave as prototype default } if (prop === "expires" || prop === "creation" || prop === "lastAccessed") { if (obj[prop] === null) { c[prop] = null; } else { c[prop] = obj[prop] == "Infinity" ? "Infinity" : new Date(obj[prop]); } } else { c[prop] = obj[prop]; } } return c; } /* Section 5.4 part 2: * "* Cookies with longer paths are listed before cookies with * shorter paths. * * * Among cookies that have equal-length path fields, cookies with * earlier creation-times are listed before cookies with later * creation-times." */ function cookieCompare(a, b) { let cmp = 0; // descending for length: b CMP a const aPathLen = a.path ? a.path.length : 0; const bPathLen = b.path ? b.path.length : 0; cmp = bPathLen - aPathLen; if (cmp !== 0) { return cmp; } // ascending for time: a CMP b const aTime = a.creation ? a.creation.getTime() : MAX_TIME; const bTime = b.creation ? b.creation.getTime() : MAX_TIME; cmp = aTime - bTime; if (cmp !== 0) { return cmp; } // break ties for the same millisecond (precision of JavaScript's clock) cmp = a.creationIndex - b.creationIndex; return cmp; } // Gives the permutation of all possible pathMatch()es of a given path. The // array is in longest-to-shortest order. Handy for indexing. function permutePath(path) { if (path === "/") { return ["/"]; } const permutations = [path]; while (path.length > 1) { const lindex = path.lastIndexOf("/"); if (lindex === 0) { break; } path = path.substr(0, lindex); permutations.push(path); } permutations.push("/"); return permutations; } function getCookieContext(url) { if (url instanceof Object) { return url; } // NOTE: decodeURI will throw on malformed URIs (see GH-32). // Therefore, we will just skip decoding for such URIs. try { url = decodeURI(url); } catch (err) { // Silently swallow error } return urlParse(url); } const cookieDefaults = { // the order in which the RFC has them: key: "", value: "", expires: "Infinity", maxAge: null, domain: null, path: null, secure: false, httpOnly: false, extensions: null, // set by the CookieJar: hostOnly: null, pathIsDefault: null, creation: null, lastAccessed: null, sameSite: "none" }; class Cookie { constructor(options = {}) { if (util.inspect.custom) { this[util.inspect.custom] = this.inspect; } Object.assign(this, cookieDefaults, options); this.creation = this.creation || new Date(); // used to break creation ties in cookieCompare(): Object.defineProperty(this, "creationIndex", { configurable: false, enumerable: false, // important for assert.deepEqual checks writable: true, value: ++Cookie.cookiesCreated }); } inspect() { const now = Date.now(); const hostOnly = this.hostOnly != null ? this.hostOnly : "?"; const createAge = this.creation ? `${now - this.creation.getTime()}ms` : "?"; const accessAge = this.lastAccessed ? `${now - this.lastAccessed.getTime()}ms` : "?"; return `Cookie="${this.toString()}; hostOnly=${hostOnly}; aAge=${accessAge}; cAge=${createAge}"`; } toJSON() { const obj = {}; for (const prop of Cookie.serializableProperties) { if (this[prop] === cookieDefaults[prop]) { continue; // leave as prototype default } if ( prop === "expires" || prop === "creation" || prop === "lastAccessed" ) { if (this[prop] === null) { obj[prop] = null; } else { obj[prop] = this[prop] == "Infinity" // intentionally not === ? "Infinity" : this[prop].toISOString(); } } else if (prop === "maxAge") { if (this[prop] !== null) { // again, intentionally not === obj[prop] = this[prop] == Infinity || this[prop] == -Infinity ? this[prop].toString() : this[prop]; } } else { if (this[prop] !== cookieDefaults[prop]) { obj[prop] = this[prop]; } } } return obj; } clone() { return fromJSON(this.toJSON()); } validate() { if (!COOKIE_OCTETS.test(this.value)) { return false; } if ( this.expires != Infinity && !(this.expires instanceof Date) && !parseDate(this.expires) ) { return false; } if (this.maxAge != null && this.maxAge <= 0) { return false; // "Max-Age=" non-zero-digit *DIGIT } if (this.path != null && !PATH_VALUE.test(this.path)) { return false; } const cdomain = this.cdomain(); if (cdomain) { if (cdomain.match(/\.$/)) { return false; // S4.1.2.3 suggests that this is bad. domainMatch() tests confirm this } const suffix = pubsuffix.getPublicSuffix(cdomain); if (suffix == null) { // it's a public suffix return false; } } return true; } setExpires(exp) { if (exp instanceof Date) { this.expires = exp; } else { this.expires = parseDate(exp) || "Infinity"; } } setMaxAge(age) { if (age === Infinity || age === -Infinity) { this.maxAge = age.toString(); // so JSON.stringify() works } else { this.maxAge = age; } } cookieString() { let val = this.value; if (val == null) { val = ""; } if (this.key === "") { return val; } return `${this.key}=${val}`; } // gives Set-Cookie header format toString() { let str = this.cookieString(); if (this.expires != Infinity) { if (this.expires instanceof Date) { str += `; Expires=${formatDate(this.expires)}`; } else { str += `; Expires=${this.expires}`; } } if (this.maxAge != null && this.maxAge != Infinity) { str += `; Max-Age=${this.maxAge}`; } if (this.domain && !this.hostOnly) { str += `; Domain=${this.domain}`; } if (this.path) { str += `; Path=${this.path}`; } if (this.secure) { str += "; Secure"; } if (this.httpOnly) { str += "; HttpOnly"; } if (this.sameSite && this.sameSite !== "none") { const ssCanon = Cookie.sameSiteCanonical[this.sameSite.toLowerCase()]; str += `; SameSite=${ssCanon ? ssCanon : this.sameSite}`; } if (this.extensions) { this.extensions.forEach(ext => { str += `; ${ext}`; }); } return str; } // TTL() partially replaces the "expiry-time" parts of S5.3 step 3 (setCookie() // elsewhere) // S5.3 says to give the "latest representable date" for which we use Infinity // For "expired" we use 0 TTL(now) { /* RFC6265 S4.1.2.2 If a cookie has both the Max-Age and the Expires * attribute, the Max-Age attribute has precedence and controls the * expiration date of the cookie. * (Concurs with S5.3 step 3) */ if (this.maxAge != null) { return this.maxAge <= 0 ? 0 : this.maxAge * 1000; } let expires = this.expires; if (expires != Infinity) { if (!(expires instanceof Date)) { expires = parseDate(expires) || Infinity; } if (expires == Infinity) { return Infinity; } return expires.getTime() - (now || Date.now()); } return Infinity; } // expiryTime() replaces the "expiry-time" parts of S5.3 step 3 (setCookie() // elsewhere) expiryTime(now) { if (this.maxAge != null) { const relativeTo = now || this.creation || new Date(); const age = this.maxAge <= 0 ? -Infinity : this.maxAge * 1000; return relativeTo.getTime() + age; } if (this.expires == Infinity) { return Infinity; } return this.expires.getTime(); } // expiryDate() replaces the "expiry-time" parts of S5.3 step 3 (setCookie() // elsewhere), except it returns a Date expiryDate(now) { const millisec = this.expiryTime(now); if (millisec == Infinity) { return new Date(MAX_TIME); } else if (millisec == -Infinity) { return new Date(MIN_TIME); } else { return new Date(millisec); } } // This replaces the "persistent-flag" parts of S5.3 step 3 isPersistent() { return this.maxAge != null || this.expires != Infinity; } // Mostly S5.1.2 and S5.2.3: canonicalizedDomain() { if (this.domain == null) { return null; } return canonicalDomain(this.domain); } cdomain() { return this.canonicalizedDomain(); } } Cookie.cookiesCreated = 0; Cookie.parse = parse; Cookie.fromJSON = fromJSON; Cookie.serializableProperties = Object.keys(cookieDefaults); Cookie.sameSiteLevel = { strict: 3, lax: 2, none: 1 }; Cookie.sameSiteCanonical = { strict: "Strict", lax: "Lax" }; function getNormalizedPrefixSecurity(prefixSecurity) { if (prefixSecurity != null) { const normalizedPrefixSecurity = prefixSecurity.toLowerCase(); /* The three supported options */ switch (normalizedPrefixSecurity) { case PrefixSecurityEnum.STRICT: case PrefixSecurityEnum.SILENT: case PrefixSecurityEnum.DISABLED: return normalizedPrefixSecurity; } } /* Default is SILENT */ return PrefixSecurityEnum.SILENT; } class CookieJar { constructor(store, options = { rejectPublicSuffixes: true }) { if (typeof options === "boolean") { options = { rejectPublicSuffixes: options }; } this.rejectPublicSuffixes = options.rejectPublicSuffixes; this.enableLooseMode = !!options.looseMode; this.allowSpecialUseDomain = !!options.allowSpecialUseDomain; this.store = store || new MemoryCookieStore(); this.prefixSecurity = getNormalizedPrefixSecurity(options.prefixSecurity); this._cloneSync = syncWrap("clone"); this._importCookiesSync = syncWrap("_importCookies"); this.getCookiesSync = syncWrap("getCookies"); this.getCookieStringSync = syncWrap("getCookieString"); this.getSetCookieStringsSync = syncWrap("getSetCookieStrings"); this.removeAllCookiesSync = syncWrap("removeAllCookies"); this.setCookieSync = syncWrap("setCookie"); this.serializeSync = syncWrap("serialize"); } setCookie(cookie, url, options, cb) { let err; const context = getCookieContext(url); if (typeof options === "function") { cb = options; options = {}; } const host = canonicalDomain(context.hostname); const loose = options.loose || this.enableLooseMode; let sameSiteContext = null; if (options.sameSiteContext) { sameSiteContext = checkSameSiteContext(options.sameSiteContext); if (!sameSiteContext) { return cb(new Error(SAME_SITE_CONTEXT_VAL_ERR)); } } // S5.3 step 1 if (typeof cookie === "string" || cookie instanceof String) { cookie = Cookie.parse(cookie, { loose: loose }); if (!cookie) { err = new Error("Cookie failed to parse"); return cb(options.ignoreError ? null : err); } } else if (!(cookie instanceof Cookie)) { // If you're seeing this error, and are passing in a Cookie object, // it *might* be a Cookie object from another loaded version of tough-cookie. err = new Error( "First argument to setCookie must be a Cookie object or string" ); return cb(options.ignoreError ? null : err); } // S5.3 step 2 const now = options.now || new Date(); // will assign later to save effort in the face of errors // S5.3 step 3: NOOP; persistent-flag and expiry-time is handled by getCookie() // S5.3 step 4: NOOP; domain is null by default // S5.3 step 5: public suffixes if (this.rejectPublicSuffixes && cookie.domain) { const suffix = pubsuffix.getPublicSuffix(cookie.cdomain()); if (suffix == null) { // e.g. "com" err = new Error("Cookie has domain set to a public suffix"); return cb(options.ignoreError ? null : err); } } // S5.3 step 6: if (cookie.domain) { if (!domainMatch(host, cookie.cdomain(), false)) { err = new Error( `Cookie not in this host's domain. Cookie:${cookie.cdomain()} Request:${host}` ); return cb(options.ignoreError ? null : err); } if (cookie.hostOnly == null) { // don't reset if already set cookie.hostOnly = false; } } else { cookie.hostOnly = true; cookie.domain = host; } //S5.2.4 If the attribute-value is empty or if the first character of the //attribute-value is not %x2F ("/"): //Let cookie-path be the default-path. if (!cookie.path || cookie.path[0] !== "/") { cookie.path = defaultPath(context.pathname); cookie.pathIsDefault = true; } // S5.3 step 8: NOOP; secure attribute // S5.3 step 9: NOOP; httpOnly attribute // S5.3 step 10 if (options.http === false && cookie.httpOnly) { err = new Error("Cookie is HttpOnly and this isn't an HTTP API"); return cb(options.ignoreError ? null : err); } // 6252bis-02 S5.4 Step 13 & 14: if (cookie.sameSite !== "none" && sameSiteContext) { // "If the cookie's "same-site-flag" is not "None", and the cookie // is being set from a context whose "site for cookies" is not an // exact match for request-uri's host's registered domain, then // abort these steps and ignore the newly created cookie entirely." if (sameSiteContext === "none") { err = new Error( "Cookie is SameSite but this is a cross-origin request" ); return cb(options.ignoreError ? null : err); } } /* 6265bis-02 S5.4 Steps 15 & 16 */ const ignoreErrorForPrefixSecurity = this.prefixSecurity === PrefixSecurityEnum.SILENT; const prefixSecurityDisabled = this.prefixSecurity === PrefixSecurityEnum.DISABLED; /* If prefix checking is not disabled ...*/ if (!prefixSecurityDisabled) { let errorFound = false; let errorMsg; /* Check secure prefix condition */ if (!isSecurePrefixConditionMet(cookie)) { errorFound = true; errorMsg = "Cookie has __Secure prefix but Secure attribute is not set"; } else if (!isHostPrefixConditionMet(cookie)) { /* Check host prefix condition */ errorFound = true; errorMsg = "Cookie has __Host prefix but either Secure or HostOnly attribute is not set or Path is not '/'"; } if (errorFound) { return cb( options.ignoreError || ignoreErrorForPrefixSecurity ? null : new Error(errorMsg) ); } } const store = this.store; if (!store.updateCookie) { store.updateCookie = function(oldCookie, newCookie, cb) { this.putCookie(newCookie, cb); }; } function withCookie(err, oldCookie) { if (err) { return cb(err); } const next = function(err) { if (err) { return cb(err); } else { cb(null, cookie); } }; if (oldCookie) { // S5.3 step 11 - "If the cookie store contains a cookie with the same name, // domain, and path as the newly created cookie:" if (options.http === false && oldCookie.httpOnly) { // step 11.2 err = new Error("old Cookie is HttpOnly and this isn't an HTTP API"); return cb(options.ignoreError ? null : err); } cookie.creation = oldCookie.creation; // step 11.3 cookie.creationIndex = oldCookie.creationIndex; // preserve tie-breaker cookie.lastAccessed = now; // Step 11.4 (delete cookie) is implied by just setting the new one: store.updateCookie(oldCookie, cookie, next); // step 12 } else { cookie.creation = cookie.lastAccessed = now; store.putCookie(cookie, next); // step 12 } } store.findCookie(cookie.domain, cookie.path, cookie.key, withCookie); } // RFC6365 S5.4 getCookies(url, options, cb) { const context = getCookieContext(url); if (typeof options === "function") { cb = options; options = {}; } const host = canonicalDomain(context.hostname); const path = context.pathname || "/"; let secure = options.secure; if ( secure == null && context.protocol && (context.protocol == "https:" || context.protocol == "wss:") ) { secure = true; } let sameSiteLevel = 0; if (options.sameSiteContext) { const sameSiteContext = checkSameSiteContext(options.sameSiteContext); sameSiteLevel = Cookie.sameSiteLevel[sameSiteContext]; if (!sameSiteLevel) { return cb(new Error(SAME_SITE_CONTEXT_VAL_ERR)); } } let http = options.http; if (http == null) { http = true; } const now = options.now || Date.now(); const expireCheck = options.expire !== false; const allPaths = !!options.allPaths; const store = this.store; function matchingCookie(c) { // "Either: // The cookie's host-only-flag is true and the canonicalized // request-host is identical to the cookie's domain. // Or: // The cookie's host-only-flag is false and the canonicalized // request-host domain-matches the cookie's domain." if (c.hostOnly) { if (c.domain != host) { return false; } } else { if (!domainMatch(host, c.domain, false)) { return false; } } // "The request-uri's path path-matches the cookie's path." if (!allPaths && !pathMatch(path, c.path)) { return false; } // "If the cookie's secure-only-flag is true, then the request-uri's // scheme must denote a "secure" protocol" if (c.secure && !secure) { return false; } // "If the cookie's http-only-flag is true, then exclude the cookie if the // cookie-string is being generated for a "non-HTTP" API" if (c.httpOnly && !http) { return false; } // RFC6265bis-02 S5.3.7 if (sameSiteLevel) { const cookieLevel = Cookie.sameSiteLevel[c.sameSite || "none"]; if (cookieLevel > sameSiteLevel) { // only allow cookies at or below the request level return false; } } // deferred from S5.3 // non-RFC: allow retention of expired cookies by choice if (expireCheck && c.expiryTime() <= now) { store.removeCookie(c.domain, c.path, c.key, () => {}); // result ignored return false; } return true; } store.findCookies( host, allPaths ? null : path, this.allowSpecialUseDomain, (err, cookies) => { if (err) { return cb(err); } cookies = cookies.filter(matchingCookie); // sorting of S5.4 part 2 if (options.sort !== false) { cookies = cookies.sort(cookieCompare); } // S5.4 part 3 const now = new Date(); for (const cookie of cookies) { cookie.lastAccessed = now; } // TODO persist lastAccessed cb(null, cookies); } ); } getCookieString(...args) { const cb = args.pop(); const next = function(err, cookies) { if (err) { cb(err); } else { cb( null, cookies .sort(cookieCompare) .map(c => c.cookieString()) .join("; ") ); } }; args.push(next); this.getCookies.apply(this, args); } getSetCookieStrings(...args) { const cb = args.pop(); const next = function(err, cookies) { if (err) { cb(err); } else { cb( null, cookies.map(c => { return c.toString(); }) ); } }; args.push(next); this.getCookies.apply(this, args); } serialize(cb) { let type = this.store.constructor.name; if (type === "Object") { type = null; } // update README.md "Serialization Format" if you change this, please! const serialized = { // The version of tough-cookie that serialized this jar. Generally a good // practice since future versions can make data import decisions based on // known past behavior. When/if this matters, use `semver`. version: `tough-cookie@${VERSION}`, // add the store type, to make humans happy: storeType: type, // CookieJar configuration: rejectPublicSuffixes: !!this.rejectPublicSuffixes, // this gets filled from getAllCookies: cookies: [] }; if ( !( this.store.getAllCookies && typeof this.store.getAllCookies === "function" ) ) { return cb( new Error( "store does not support getAllCookies and cannot be serialized" ) ); } this.store.getAllCookies((err, cookies) => { if (err) { return cb(err); } serialized.cookies = cookies.map(cookie => { // convert to serialized 'raw' cookies cookie = cookie instanceof Cookie ? cookie.toJSON() : cookie; // Remove the index so new ones get assigned during deserialization delete cookie.creationIndex; return cookie; }); return cb(null, serialized); }); } toJSON() { return this.serializeSync(); } // use the class method CookieJar.deserialize instead of calling this directly _importCookies(serialized, cb) { let cookies = serialized.cookies; if (!cookies || !Array.isArray(cookies)) { return cb(new Error("serialized jar has no cookies array")); } cookies = cookies.slice(); // do not modify the original const putNext = err => { if (err) { return cb(err); } if (!cookies.length) { return cb(err, this); } let cookie; try { cookie = fromJSON(cookies.shift()); } catch (e) { return cb(e); } if (cookie === null) { return putNext(null); // skip this cookie } this.store.putCookie(cookie, putNext); }; putNext(); } clone(newStore, cb) { if (arguments.length === 1) { cb = newStore; newStore = null; } this.serialize((err, serialized) => { if (err) { return cb(err); } CookieJar.deserialize(serialized, newStore, cb); }); } cloneSync(newStore) { if (arguments.length === 0) { return this._cloneSync(); } if (!newStore.synchronous) { throw new Error( "CookieJar clone destination store is not synchronous; use async API instead." ); } return this._cloneSync(newStore); } removeAllCookies(cb) { const store = this.store; // Check that the store implements its own removeAllCookies(). The default // implementation in Store will immediately call the callback with a "not // implemented" Error. if ( typeof store.removeAllCookies === "function" && store.removeAllCookies !== Store.prototype.removeAllCookies ) { return store.removeAllCookies(cb); } store.getAllCookies((err, cookies) => { if (err) { return cb(err); } if (cookies.length === 0) { return cb(null); } let completedCount = 0; const removeErrors = []; function removeCookieCb(removeErr) { if (removeErr) { removeErrors.push(removeErr); } completedCount++; if (completedCount === cookies.length) { return cb(removeErrors.length ? removeErrors[0] : null); } } cookies.forEach(cookie => { store.removeCookie( cookie.domain, cookie.path, cookie.key, removeCookieCb ); }); }); } static deserialize(strOrObj, store, cb) { if (arguments.length !== 3) { // store is optional cb = store; store = null; } let serialized; if (typeof strOrObj === "string") { serialized = jsonParse(strOrObj); if (serialized instanceof Error) { return cb(serialized); } } else { serialized = strOrObj; } const jar = new CookieJar(store, serialized.rejectPublicSuffixes); jar._importCookies(serialized, err => { if (err) { return cb(err); } cb(null, jar); }); } static deserializeSync(strOrObj, store) { const serialized = typeof strOrObj === "string" ? JSON.parse(strOrObj) : strOrObj; const jar = new CookieJar(store, serialized.rejectPublicSuffixes); // catch this mistake early: if (!jar.store.synchronous) { throw new Error( "CookieJar store is not synchronous; use async API instead." ); } jar._importCookiesSync(serialized); return jar; } } CookieJar.fromJSON = CookieJar.deserializeSync; [ "_importCookies", "clone", "getCookies", "getCookieString", "getSetCookieStrings", "removeAllCookies", "serialize", "setCookie" ].forEach(name => { CookieJar.prototype[name] = fromCallback(CookieJar.prototype[name]); }); CookieJar.deserialize = fromCallback(CookieJar.deserialize); // Use a closure to provide a true imperative API for synchronous stores. function syncWrap(method) { return function(...args) { if (!this.store.synchronous) { throw new Error( "CookieJar store is not synchronous; use async API instead." ); } let syncErr, syncResult; this[method](...args, (err, result) => { syncErr = err; syncResult = result; }); if (syncErr) { throw syncErr; } return syncResult; }; } exports.version = VERSION; exports.CookieJar = CookieJar; exports.Cookie = Cookie; exports.Store = Store; exports.MemoryCookieStore = MemoryCookieStore; exports.parseDate = parseDate; exports.formatDate = formatDate; exports.parse = parse; exports.fromJSON = fromJSON; exports.domainMatch = domainMatch; exports.defaultPath = defaultPath; exports.pathMatch = pathMatch; exports.getPublicSuffix = pubsuffix.getPublicSuffix; exports.cookieCompare = cookieCompare; exports.permuteDomain = __nccwpck_require__(5696).permuteDomain; exports.permutePath = permutePath; exports.canonicalDomain = canonicalDomain; exports.PrefixSecurityEnum = PrefixSecurityEnum; /***/ }), /***/ 6738: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; /*! * Copyright (c) 2015, Salesforce.com, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. Neither the name of Salesforce.com nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ const { fromCallback } = __nccwpck_require__(9046); const Store = __nccwpck_require__(7707)/* .Store */ .y; const permuteDomain = __nccwpck_require__(5696).permuteDomain; const pathMatch = __nccwpck_require__(807)/* .pathMatch */ .U; const util = __nccwpck_require__(1669); class MemoryCookieStore extends Store { constructor() { super(); this.synchronous = true; this.idx = {}; if (util.inspect.custom) { this[util.inspect.custom] = this.inspect; } } inspect() { return `{ idx: ${util.inspect(this.idx, false, 2)} }`; } findCookie(domain, path, key, cb) { if (!this.idx[domain]) { return cb(null, undefined); } if (!this.idx[domain][path]) { return cb(null, undefined); } return cb(null, this.idx[domain][path][key] || null); } findCookies(domain, path, allowSpecialUseDomain, cb) { const results = []; if (typeof allowSpecialUseDomain === "function") { cb = allowSpecialUseDomain; allowSpecialUseDomain = false; } if (!domain) { return cb(null, []); } let pathMatcher; if (!path) { // null means "all paths" pathMatcher = function matchAll(domainIndex) { for (const curPath in domainIndex) { const pathIndex = domainIndex[curPath]; for (const key in pathIndex) { results.push(pathIndex[key]); } } }; } else { pathMatcher = function matchRFC(domainIndex) { //NOTE: we should use path-match algorithm from S5.1.4 here //(see : https://github.com/ChromiumWebApps/chromium/blob/b3d3b4da8bb94c1b2e061600df106d590fda3620/net/cookies/canonical_cookie.cc#L299) Object.keys(domainIndex).forEach(cookiePath => { if (pathMatch(path, cookiePath)) { const pathIndex = domainIndex[cookiePath]; for (const key in pathIndex) { results.push(pathIndex[key]); } } }); }; } const domains = permuteDomain(domain, allowSpecialUseDomain) || [domain]; const idx = this.idx; domains.forEach(curDomain => { const domainIndex = idx[curDomain]; if (!domainIndex) { return; } pathMatcher(domainIndex); }); cb(null, results); } putCookie(cookie, cb) { if (!this.idx[cookie.domain]) { this.idx[cookie.domain] = {}; } if (!this.idx[cookie.domain][cookie.path]) { this.idx[cookie.domain][cookie.path] = {}; } this.idx[cookie.domain][cookie.path][cookie.key] = cookie; cb(null); } updateCookie(oldCookie, newCookie, cb) { // updateCookie() may avoid updating cookies that are identical. For example, // lastAccessed may not be important to some stores and an equality // comparison could exclude that field. this.putCookie(newCookie, cb); } removeCookie(domain, path, key, cb) { if ( this.idx[domain] && this.idx[domain][path] && this.idx[domain][path][key] ) { delete this.idx[domain][path][key]; } cb(null); } removeCookies(domain, path, cb) { if (this.idx[domain]) { if (path) { delete this.idx[domain][path]; } else { delete this.idx[domain]; } } return cb(null); } removeAllCookies(cb) { this.idx = {}; return cb(null); } getAllCookies(cb) { const cookies = []; const idx = this.idx; const domains = Object.keys(idx); domains.forEach(domain => { const paths = Object.keys(idx[domain]); paths.forEach(path => { const keys = Object.keys(idx[domain][path]); keys.forEach(key => { if (key !== null) { cookies.push(idx[domain][path][key]); } }); }); }); // Sort by creationIndex so deserializing retains the creation order. // When implementing your own store, this SHOULD retain the order too cookies.sort((a, b) => { return (a.creationIndex || 0) - (b.creationIndex || 0); }); cb(null, cookies); } } [ "findCookie", "findCookies", "putCookie", "updateCookie", "removeCookie", "removeCookies", "removeAllCookies", "getAllCookies" ].forEach(name => { MemoryCookieStore[name] = fromCallback(MemoryCookieStore.prototype[name]); }); exports.m = MemoryCookieStore; /***/ }), /***/ 807: /***/ ((__unused_webpack_module, exports) => { "use strict"; /*! * Copyright (c) 2015, Salesforce.com, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. Neither the name of Salesforce.com nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /* * "A request-path path-matches a given cookie-path if at least one of the * following conditions holds:" */ function pathMatch(reqPath, cookiePath) { // "o The cookie-path and the request-path are identical." if (cookiePath === reqPath) { return true; } const idx = reqPath.indexOf(cookiePath); if (idx === 0) { // "o The cookie-path is a prefix of the request-path, and the last // character of the cookie-path is %x2F ("/")." if (cookiePath.substr(-1) === "/") { return true; } // " o The cookie-path is a prefix of the request-path, and the first // character of the request-path that is not included in the cookie- path // is a %x2F ("/") character." if (reqPath.substr(cookiePath.length, 1) === "/") { return true; } } return false; } exports.U = pathMatch; /***/ }), /***/ 5696: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; /*! * Copyright (c) 2015, Salesforce.com, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. Neither the name of Salesforce.com nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ const pubsuffix = __nccwpck_require__(8292); // Gives the permutation of all possible domainMatch()es of a given domain. The // array is in shortest-to-longest order. Handy for indexing. const SPECIAL_USE_DOMAINS = ["local"]; // RFC 6761 function permuteDomain(domain, allowSpecialUseDomain) { let pubSuf = null; if (allowSpecialUseDomain) { const domainParts = domain.split("."); if (SPECIAL_USE_DOMAINS.includes(domainParts[domainParts.length - 1])) { pubSuf = `${domainParts[domainParts.length - 2]}.${ domainParts[domainParts.length - 1] }`; } else { pubSuf = pubsuffix.getPublicSuffix(domain); } } else { pubSuf = pubsuffix.getPublicSuffix(domain); } if (!pubSuf) { return null; } if (pubSuf == domain) { return [domain]; } const prefix = domain.slice(0, -(pubSuf.length + 1)); // ".example.com" const parts = prefix.split(".").reverse(); let cur = pubSuf; const permutations = [cur]; while (parts.length) { cur = `${parts.shift()}.${cur}`; permutations.push(cur); } return permutations; } exports.permuteDomain = permuteDomain; /***/ }), /***/ 8292: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; /*! * Copyright (c) 2018, Salesforce.com, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. Neither the name of Salesforce.com nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ const psl = __nccwpck_require__(9975); function getPublicSuffix(domain) { return psl.get(domain); } exports.getPublicSuffix = getPublicSuffix; /***/ }), /***/ 7707: /***/ ((__unused_webpack_module, exports) => { "use strict"; /*! * Copyright (c) 2015, Salesforce.com, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. Neither the name of Salesforce.com nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /*jshint unused:false */ class Store { constructor() { this.synchronous = false; } findCookie(domain, path, key, cb) { throw new Error("findCookie is not implemented"); } findCookies(domain, path, allowSpecialUseDomain, cb) { throw new Error("findCookies is not implemented"); } putCookie(cookie, cb) { throw new Error("putCookie is not implemented"); } updateCookie(oldCookie, newCookie, cb) { // recommended default implementation: // return this.putCookie(newCookie, cb); throw new Error("updateCookie is not implemented"); } removeCookie(domain, path, key, cb) { throw new Error("removeCookie is not implemented"); } removeCookies(domain, path, cb) { throw new Error("removeCookies is not implemented"); } removeAllCookies(cb) { throw new Error("removeAllCookies is not implemented"); } getAllCookies(cb) { throw new Error( "getAllCookies is not implemented (therefore jar cannot be serialized)" ); } } exports.y = Store; /***/ }), /***/ 8742: /***/ ((module) => { // generated by genversion module.exports = '4.0.0' /***/ }), /***/ 3415: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "v1", ({ enumerable: true, get: function () { return _v.default; } })); Object.defineProperty(exports, "v3", ({ enumerable: true, get: function () { return _v2.default; } })); Object.defineProperty(exports, "v4", ({ enumerable: true, get: function () { return _v3.default; } })); Object.defineProperty(exports, "v5", ({ enumerable: true, get: function () { return _v4.default; } })); Object.defineProperty(exports, "NIL", ({ enumerable: true, get: function () { return _nil.default; } })); Object.defineProperty(exports, "version", ({ enumerable: true, get: function () { return _version.default; } })); Object.defineProperty(exports, "validate", ({ enumerable: true, get: function () { return _validate.default; } })); Object.defineProperty(exports, "stringify", ({ enumerable: true, get: function () { return _stringify.default; } })); Object.defineProperty(exports, "parse", ({ enumerable: true, get: function () { return _parse.default; } })); var _v = _interopRequireDefault(__nccwpck_require__(4757)); var _v2 = _interopRequireDefault(__nccwpck_require__(9982)); var _v3 = _interopRequireDefault(__nccwpck_require__(5393)); var _v4 = _interopRequireDefault(__nccwpck_require__(8788)); var _nil = _interopRequireDefault(__nccwpck_require__(657)); var _version = _interopRequireDefault(__nccwpck_require__(7909)); var _validate = _interopRequireDefault(__nccwpck_require__(4418)); var _stringify = _interopRequireDefault(__nccwpck_require__(4794)); var _parse = _interopRequireDefault(__nccwpck_require__(7079)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /***/ }), /***/ 4153: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; var _crypto = _interopRequireDefault(__nccwpck_require__(6417)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function md5(bytes) { if (Array.isArray(bytes)) { bytes = Buffer.from(bytes); } else if (typeof bytes === 'string') { bytes = Buffer.from(bytes, 'utf8'); } return _crypto.default.createHash('md5').update(bytes).digest(); } var _default = md5; exports.default = _default; /***/ }), /***/ 657: /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; var _default = '00000000-0000-0000-0000-000000000000'; exports.default = _default; /***/ }), /***/ 7079: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; var _validate = _interopRequireDefault(__nccwpck_require__(4418)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function parse(uuid) { if (!(0, _validate.default)(uuid)) { throw TypeError('Invalid UUID'); } let v; const arr = new Uint8Array(16); // Parse ########-....-....-....-............ arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24; arr[1] = v >>> 16 & 0xff; arr[2] = v >>> 8 & 0xff; arr[3] = v & 0xff; // Parse ........-####-....-....-............ arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8; arr[5] = v & 0xff; // Parse ........-....-####-....-............ arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8; arr[7] = v & 0xff; // Parse ........-....-....-####-............ arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8; arr[9] = v & 0xff; // Parse ........-....-....-....-############ // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes) arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff; arr[11] = v / 0x100000000 & 0xff; arr[12] = v >>> 24 & 0xff; arr[13] = v >>> 16 & 0xff; arr[14] = v >>> 8 & 0xff; arr[15] = v & 0xff; return arr; } var _default = parse; exports.default = _default; /***/ }), /***/ 690: /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; var _default = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; exports.default = _default; /***/ }), /***/ 979: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = rng; var _crypto = _interopRequireDefault(__nccwpck_require__(6417)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate let poolPtr = rnds8Pool.length; function rng() { if (poolPtr > rnds8Pool.length - 16) { _crypto.default.randomFillSync(rnds8Pool); poolPtr = 0; } return rnds8Pool.slice(poolPtr, poolPtr += 16); } /***/ }), /***/ 6631: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; var _crypto = _interopRequireDefault(__nccwpck_require__(6417)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function sha1(bytes) { if (Array.isArray(bytes)) { bytes = Buffer.from(bytes); } else if (typeof bytes === 'string') { bytes = Buffer.from(bytes, 'utf8'); } return _crypto.default.createHash('sha1').update(bytes).digest(); } var _default = sha1; exports.default = _default; /***/ }), /***/ 4794: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; var _validate = _interopRequireDefault(__nccwpck_require__(4418)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Convert array of 16 byte values to UUID string format of the form: * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX */ const byteToHex = []; for (let i = 0; i < 256; ++i) { byteToHex.push((i + 0x100).toString(16).substr(1)); } function stringify(arr, offset = 0) { // Note: Be careful editing this code! It's been tuned for performance // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one // of the following: // - One or more input array values don't map to a hex octet (leading to // "undefined" in the uuid) // - Invalid input values for the RFC `version` or `variant` fields if (!(0, _validate.default)(uuid)) { throw TypeError('Stringified UUID is invalid'); } return uuid; } var _default = stringify; exports.default = _default; /***/ }), /***/ 4757: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; var _rng = _interopRequireDefault(__nccwpck_require__(979)); var _stringify = _interopRequireDefault(__nccwpck_require__(4794)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // **`v1()` - Generate time-based UUID** // // Inspired by https://github.com/LiosK/UUID.js // and http://docs.python.org/library/uuid.html let _nodeId; let _clockseq; // Previous uuid creation time let _lastMSecs = 0; let _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details function v1(options, buf, offset) { let i = buf && offset || 0; const b = buf || new Array(16); options = options || {}; let node = options.node || _nodeId; let clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not // specified. We do this lazily to minimize issues related to insufficient // system entropy. See #189 if (node == null || clockseq == null) { const seedBytes = options.random || (options.rng || _rng.default)(); if (node == null) { // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]]; } if (clockseq == null) { // Per 4.2.2, randomize (14 bit) clockseq clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; } } // UUID timestamps are 100 nano-second units since the Gregorian epoch, // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. let msecs = options.msecs !== undefined ? options.msecs : Date.now(); // Per 4.2.1.2, use count of uuid's generated during the current clock // cycle to simulate higher resolution clock let nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs) const dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression if (dt < 0 && options.clockseq === undefined) { clockseq = clockseq + 1 & 0x3fff; } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new // time interval if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { nsecs = 0; } // Per 4.2.1.2 Throw error if too many uuids are requested if (nsecs >= 10000) { throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); } _lastMSecs = msecs; _lastNSecs = nsecs; _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch msecs += 12219292800000; // `time_low` const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; b[i++] = tl >>> 24 & 0xff; b[i++] = tl >>> 16 & 0xff; b[i++] = tl >>> 8 & 0xff; b[i++] = tl & 0xff; // `time_mid` const tmh = msecs / 0x100000000 * 10000 & 0xfffffff; b[i++] = tmh >>> 8 & 0xff; b[i++] = tmh & 0xff; // `time_high_and_version` b[i++] = tmh >>> 24 & 0xf | 0x10; // include version b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low` b[i++] = clockseq & 0xff; // `node` for (let n = 0; n < 6; ++n) { b[i + n] = node[n]; } return buf || (0, _stringify.default)(b); } var _default = v1; exports.default = _default; /***/ }), /***/ 9982: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; var _v = _interopRequireDefault(__nccwpck_require__(4085)); var _md = _interopRequireDefault(__nccwpck_require__(4153)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const v3 = (0, _v.default)('v3', 0x30, _md.default); var _default = v3; exports.default = _default; /***/ }), /***/ 4085: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = _default; exports.URL = exports.DNS = void 0; var _stringify = _interopRequireDefault(__nccwpck_require__(4794)); var _parse = _interopRequireDefault(__nccwpck_require__(7079)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function stringToBytes(str) { str = unescape(encodeURIComponent(str)); // UTF8 escape const bytes = []; for (let i = 0; i < str.length; ++i) { bytes.push(str.charCodeAt(i)); } return bytes; } const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; exports.DNS = DNS; const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; exports.URL = URL; function _default(name, version, hashfunc) { function generateUUID(value, namespace, buf, offset) { if (typeof value === 'string') { value = stringToBytes(value); } if (typeof namespace === 'string') { namespace = (0, _parse.default)(namespace); } if (namespace.length !== 16) { throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)'); } // Compute hash of namespace and value, Per 4.3 // Future: Use spread syntax when supported on all platforms, e.g. `bytes = // hashfunc([...namespace, ... value])` let bytes = new Uint8Array(16 + value.length); bytes.set(namespace); bytes.set(value, namespace.length); bytes = hashfunc(bytes); bytes[6] = bytes[6] & 0x0f | version; bytes[8] = bytes[8] & 0x3f | 0x80; if (buf) { offset = offset || 0; for (let i = 0; i < 16; ++i) { buf[offset + i] = bytes[i]; } return buf; } return (0, _stringify.default)(bytes); } // Function#name is not settable on some platforms (#270) try { generateUUID.name = name; // eslint-disable-next-line no-empty } catch (err) {} // For CommonJS default export support generateUUID.DNS = DNS; generateUUID.URL = URL; return generateUUID; } /***/ }), /***/ 5393: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; var _rng = _interopRequireDefault(__nccwpck_require__(979)); var _stringify = _interopRequireDefault(__nccwpck_require__(4794)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function v4(options, buf, offset) { options = options || {}; const rnds = options.random || (options.rng || _rng.default)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` rnds[6] = rnds[6] & 0x0f | 0x40; rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided if (buf) { offset = offset || 0; for (let i = 0; i < 16; ++i) { buf[offset + i] = rnds[i]; } return buf; } return (0, _stringify.default)(rnds); } var _default = v4; exports.default = _default; /***/ }), /***/ 8788: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; var _v = _interopRequireDefault(__nccwpck_require__(4085)); var _sha = _interopRequireDefault(__nccwpck_require__(6631)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const v5 = (0, _v.default)('v5', 0x50, _sha.default); var _default = v5; exports.default = _default; /***/ }), /***/ 4418: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; var _regex = _interopRequireDefault(__nccwpck_require__(690)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function validate(uuid) { return typeof uuid === 'string' && _regex.default.test(uuid); } var _default = validate; exports.default = _default; /***/ }), /***/ 7909: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = void 0; var _validate = _interopRequireDefault(__nccwpck_require__(4418)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function version(uuid) { if (!(0, _validate.default)(uuid)) { throw TypeError('Invalid UUID'); } return parseInt(uuid.substr(14, 1), 16); } var _default = version; exports.default = _default; /***/ }), /***/ 7094: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; /*! * Copyright (c) Microsoft and contributors. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for * license information. * * Azure Core LRO SDK for JavaScript - 1.0.5 */ Object.defineProperty(exports, "__esModule", ({ value: true })); var tslib = __nccwpck_require__(4351); // Copyright (c) Microsoft Corporation. /** * When a poller is manually stopped through the `stopPolling` method, * the poller will be rejected with an instance of the PollerStoppedError. */ var PollerStoppedError = /** @class */ (function (_super) { tslib.__extends(PollerStoppedError, _super); function PollerStoppedError(message) { var _this = _super.call(this, message) || this; _this.name = "PollerStoppedError"; Object.setPrototypeOf(_this, PollerStoppedError.prototype); return _this; } return PollerStoppedError; }(Error)); /** * When a poller is cancelled through the `cancelOperation` method, * the poller will be rejected with an instance of the PollerCancelledError. */ var PollerCancelledError = /** @class */ (function (_super) { tslib.__extends(PollerCancelledError, _super); function PollerCancelledError(message) { var _this = _super.call(this, message) || this; _this.name = "PollerCancelledError"; Object.setPrototypeOf(_this, PollerCancelledError.prototype); return _this; } return PollerCancelledError; }(Error)); /** * A class that represents the definition of a program that polls through consecutive requests * until it reaches a state of completion. * * A poller can be executed manually, by polling request by request by calling to the `poll()` method repeatedly, until its operation is completed. * It also provides a way to wait until the operation completes, by calling `pollUntilDone()` and waiting until the operation finishes. * Pollers can also request the cancellation of the ongoing process to whom is providing the underlying long running operation. * * ```ts * const poller = new MyPoller(); * * // Polling just once: * await poller.poll(); * * // We can try to cancel the request here, by calling: * // * // await poller.cancelOperation(); * // * * // Getting the final result: * const result = await poller.pollUntilDone(); * ``` * * The Poller is defined by two types, a type representing the state of the poller, which * must include a basic set of properties from `PollOperationState`, * and a return type defined by `TResult`, which can be anything. * * The Poller class implements the `PollerLike` interface, which allows poller implementations to avoid having * to export the Poller's class directly, and instead only export the already instantiated poller with the PollerLike type. * * ```ts * class Client { * public async makePoller: PollerLike { * const poller = new MyPoller({}); * // It might be preferred to return the poller after the first request is made, * // so that some information can be obtained right away. * await poller.poll(); * return poller; * } * } * * const poller: PollerLike = myClient.makePoller(); * ``` * * A poller can be created through its constructor, then it can be polled until it's completed. * At any point in time, the state of the poller can be obtained without delay through the getOperationState method. * At any point in time, the intermediate forms of the result type can be requested without delay. * Once the underlying operation is marked as completed, the poller will stop and the final value will be returned. * * ```ts * const poller = myClient.makePoller(); * const state: MyOperationState = poller.getOperationState(); * * // The intermediate result can be obtained at any time. * const result: MyResult | undefined = poller.getResult(); * * // The final result can only be obtained after the poller finishes. * const result: MyResult = await poller.pollUntilDone(); * ``` * */ // eslint-disable-next-line no-use-before-define var Poller = /** @class */ (function () { /** * A poller needs to be initialized by passing in at least the basic properties of the `PollOperation`. * * When writing an implementation of a Poller, this implementation needs to deal with the initialization * of any custom state beyond the basic definition of the poller. The basic poller assumes that the poller's * operation has already been defined, at least its basic properties. The code below shows how to approach * the definition of the constructor of a new custom poller. * * ```ts * export class MyPoller extends Poller { * constructor({ * // Anything you might need outside of the basics * }) { * let state: MyOperationState = { * privateProperty: private, * publicProperty: public, * }; * * const operation = { * state, * update, * cancel, * toString * } * * // Sending the operation to the parent's constructor. * super(operation); * * // You can assign more local properties here. * } * } * ``` * * Inside of this constructor, a new promise is created. This will be used to * tell the user when the poller finishes (see `pollUntilDone()`). The promise's * resolve and reject methods are also used internally to control when to resolve * or reject anyone waiting for the poller to finish. * * The constructor of a custom implementation of a poller is where any serialized version of * a previous poller's operation should be deserialized into the operation sent to the * base constructor. For example: * * ```ts * export class MyPoller extends Poller { * constructor( * baseOperation: string | undefined * ) { * let state: MyOperationState = {}; * if (baseOperation) { * state = { * ...JSON.parse(baseOperation).state, * ...state * }; * } * const operation = { * state, * // ... * } * super(operation); * } * } * ``` * * @param operation - Must contain the basic properties of `PollOperation`. */ function Poller(operation) { var _this = this; this.stopped = true; this.pollProgressCallbacks = []; this.operation = operation; this.promise = new Promise(function (resolve, reject) { _this.resolve = resolve; _this.reject = reject; }); // This prevents the UnhandledPromiseRejectionWarning in node.js from being thrown. // The above warning would get thrown if `poller.poll` is called, it returns an error, // and pullUntilDone did not have a .catch or await try/catch on it's return value. this.promise.catch(function () { /* intentionally blank */ }); } /** * @internal * Starts a loop that will break only if the poller is done * or if the poller is stopped. */ Poller.prototype.startPolling = function () { return tslib.__awaiter(this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: if (this.stopped) { this.stopped = false; } _a.label = 1; case 1: if (!(!this.isStopped() && !this.isDone())) return [3 /*break*/, 4]; return [4 /*yield*/, this.poll()]; case 2: _a.sent(); return [4 /*yield*/, this.delay()]; case 3: _a.sent(); return [3 /*break*/, 1]; case 4: return [2 /*return*/]; } }); }); }; /** * @internal * pollOnce does one polling, by calling to the update method of the underlying * poll operation to make any relevant change effective. * * It only optionally receives an object with an abortSignal property, from \@azure/abort-controller's AbortSignalLike. * * @param options - Optional properties passed to the operation's update method. */ Poller.prototype.pollOnce = function (options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, e_1; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _b.trys.push([0, 3, , 4]); if (!!this.isDone()) return [3 /*break*/, 2]; _a = this; return [4 /*yield*/, this.operation.update({ abortSignal: options.abortSignal, fireProgress: this.fireProgress.bind(this) })]; case 1: _a.operation = _b.sent(); if (this.isDone() && this.resolve) { // If the poller has finished polling, this means we now have a result. // However, it can be the case that TResult is instantiated to void, so // we are not expecting a result anyway. To assert that we might not // have a result eventually after finishing polling, we cast the result // to TResult. this.resolve(this.operation.state.result); } _b.label = 2; case 2: return [3 /*break*/, 4]; case 3: e_1 = _b.sent(); this.operation.state.error = e_1; if (this.reject) { this.reject(e_1); } throw e_1; case 4: return [2 /*return*/]; } }); }); }; /** * @internal * fireProgress calls the functions passed in via onProgress the method of the poller. * * It loops over all of the callbacks received from onProgress, and executes them, sending them * the current operation state. * * @param state - The current operation state. */ Poller.prototype.fireProgress = function (state) { for (var _i = 0, _a = this.pollProgressCallbacks; _i < _a.length; _i++) { var callback = _a[_i]; callback(state); } }; /** * @internal * Invokes the underlying operation's cancel method, and rejects the * pollUntilDone promise. */ Poller.prototype.cancelOnce = function (options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = this; return [4 /*yield*/, this.operation.cancel(options)]; case 1: _a.operation = _b.sent(); if (this.reject) { this.reject(new PollerCancelledError("Poller cancelled")); } return [2 /*return*/]; } }); }); }; /** * Returns a promise that will resolve once a single polling request finishes. * It does this by calling the update method of the Poller's operation. * * It only optionally receives an object with an abortSignal property, from \@azure/abort-controller's AbortSignalLike. * * @param options - Optional properties passed to the operation's update method. */ Poller.prototype.poll = function (options) { var _this = this; if (options === void 0) { options = {}; } if (!this.pollOncePromise) { this.pollOncePromise = this.pollOnce(options); var clearPollOncePromise = function () { _this.pollOncePromise = undefined; }; this.pollOncePromise.then(clearPollOncePromise, clearPollOncePromise).catch(this.reject); } return this.pollOncePromise; }; /** * Returns a promise that will resolve once the underlying operation is completed. */ Poller.prototype.pollUntilDone = function () { return tslib.__awaiter(this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { if (this.stopped) { this.startPolling().catch(this.reject); } return [2 /*return*/, this.promise]; }); }); }; /** * Invokes the provided callback after each polling is completed, * sending the current state of the poller's operation. * * It returns a method that can be used to stop receiving updates on the given callback function. */ Poller.prototype.onProgress = function (callback) { var _this = this; this.pollProgressCallbacks.push(callback); return function () { _this.pollProgressCallbacks = _this.pollProgressCallbacks.filter(function (c) { return c !== callback; }); }; }; /** * Returns true if the poller has finished polling. */ Poller.prototype.isDone = function () { var state = this.operation.state; return Boolean(state.isCompleted || state.isCancelled || state.error); }; /** * Stops the poller from continuing to poll. */ Poller.prototype.stopPolling = function () { if (!this.stopped) { this.stopped = true; if (this.reject) { this.reject(new PollerStoppedError("This poller is already stopped")); } } }; /** * Returns true if the poller is stopped. */ Poller.prototype.isStopped = function () { return this.stopped; }; /** * Attempts to cancel the underlying operation. * * It only optionally receives an object with an abortSignal property, from \@azure/abort-controller's AbortSignalLike. * * If it's called again before it finishes, it will throw an error. * * @param options - Optional properties passed to the operation's update method. */ Poller.prototype.cancelOperation = function (options) { if (options === void 0) { options = {}; } if (!this.stopped) { this.stopped = true; } if (!this.cancelPromise) { this.cancelPromise = this.cancelOnce(options); } else if (options.abortSignal) { throw new Error("A cancel request is currently pending"); } return this.cancelPromise; }; /** * Returns the state of the operation. * * Even though TState will be the same type inside any of the methods of any extension of the Poller class, * implementations of the pollers can customize what's shared with the public by writing their own * version of the `getOperationState` method, and by defining two types, one representing the internal state of the poller * and a public type representing a safe to share subset of the properties of the internal state. * Their definition of getOperationState can then return their public type. * * Example: * * ```ts * // Let's say we have our poller's operation state defined as: * interface MyOperationState extends PollOperationState { * privateProperty?: string; * publicProperty?: string; * } * * // To allow us to have a true separation of public and private state, we have to define another interface: * interface PublicState extends PollOperationState { * publicProperty?: string; * } * * // Then, we define our Poller as follows: * export class MyPoller extends Poller { * // ... More content is needed here ... * * public getOperationState(): PublicState { * const state: PublicState = this.operation.state; * return { * // Properties from PollOperationState * isStarted: state.isStarted, * isCompleted: state.isCompleted, * isCancelled: state.isCancelled, * error: state.error, * result: state.result, * * // The only other property needed by PublicState. * publicProperty: state.publicProperty * } * } * } * ``` * * You can see this in the tests of this repository, go to the file: * `../test/utils/testPoller.ts` * and look for the getOperationState implementation. */ Poller.prototype.getOperationState = function () { return this.operation.state; }; /** * Returns the result value of the operation, * regardless of the state of the poller. * It can return undefined or an incomplete form of the final TResult value * depending on the implementation. */ Poller.prototype.getResult = function () { var state = this.operation.state; return state.result; }; /** * Returns a serialized version of the poller's operation * by invoking the operation's toString method. */ Poller.prototype.toString = function () { return this.operation.toString(); }; return Poller; }()); exports.Poller = Poller; exports.PollerCancelledError = PollerCancelledError; exports.PollerStoppedError = PollerStoppedError; //# sourceMappingURL=index.js.map /***/ }), /***/ 4559: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. Object.defineProperty(exports, "__esModule", ({ value: true })); __nccwpck_require__(6821); /***/ }), /***/ 4175: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); var api = __nccwpck_require__(5163); var tslib = __nccwpck_require__(4351); // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. /** * A no-op implementation of Span that can safely be used without side-effects. */ var NoOpSpan = /** @class */ (function () { function NoOpSpan() { } /** * Returns the SpanContext associated with this Span. */ NoOpSpan.prototype.context = function () { return { spanId: "", traceId: "", traceFlags: 0 /* NONE */ }; }; /** * Marks the end of Span execution. * @param _endTime - The time to use as the Span's end time. Defaults to * the current time. */ NoOpSpan.prototype.end = function (_endTime) { /* Noop */ }; /** * Sets an attribute on the Span * @param _key - The attribute key * @param _value - The attribute value */ NoOpSpan.prototype.setAttribute = function (_key, _value) { return this; }; /** * Sets attributes on the Span * @param _attributes - The attributes to add */ NoOpSpan.prototype.setAttributes = function (_attributes) { return this; }; /** * Adds an event to the Span * @param _name - The name of the event * @param _attributes - The associated attributes to add for this event */ NoOpSpan.prototype.addEvent = function (_name, _attributes) { return this; }; /** * Sets a status on the span. Overrides the default of SpanStatusCode.OK. * @param _status - The status to set. */ NoOpSpan.prototype.setStatus = function (_status) { return this; }; /** * Updates the name of the Span * @param _name - the new Span name */ NoOpSpan.prototype.updateName = function (_name) { return this; }; /** * Returns whether this span will be recorded */ NoOpSpan.prototype.isRecording = function () { return false; }; /** * Sets exception as a span event * @param exception - the exception the only accepted values are string or Error * @param time - the time to set as Span's event time. If not provided, * use the current time. */ NoOpSpan.prototype.recordException = function (_exception, _time) { /* do nothing */ }; return NoOpSpan; }()); // Copyright (c) Microsoft Corporation. /** * A no-op implementation of Tracer that can be used when tracing * is disabled. */ var NoOpTracer = /** @class */ (function () { function NoOpTracer() { } /** * Starts a new Span. * @param _name - The name of the span. * @param _options - The SpanOptions used during Span creation. */ NoOpTracer.prototype.startSpan = function (_name, _options) { return new NoOpSpan(); }; /** * Returns the current Span from the current context, if available. */ NoOpTracer.prototype.getCurrentSpan = function () { return new NoOpSpan(); }; /** * Executes the given function within the context provided by a Span. * @param _span - The span that provides the context. * @param fn - The function to be executed. */ NoOpTracer.prototype.withSpan = function (_span, fn) { return fn(); }; /** * Bind a Span as the target's scope * @param target - An object to bind the scope. * @param _span - A specific Span to use. Otherwise, use the current one. */ NoOpTracer.prototype.bind = function (target, _span) { return target; }; return NoOpTracer; }()); // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. function getGlobalObject() { return global; } // Copyright (c) Microsoft Corporation. // V1 = OpenTelemetry 0.1 // V2 = OpenTelemetry 0.2 // V3 = OpenTelemetry 0.6.1 // V4 = OpenTelemetry 1.0.0-rc.0 var GLOBAL_TRACER_VERSION = 4; // preview5 shipped with @azure/core-tracing.tracerCache // and didn't have smart detection for collisions var GLOBAL_TRACER_SYMBOL = Symbol.for("@azure/core-tracing.tracerCache3"); var cache; function loadTracerCache() { var globalObj = getGlobalObject(); var existingCache = globalObj[GLOBAL_TRACER_SYMBOL]; var setGlobalCache = true; if (existingCache) { if (existingCache.version === GLOBAL_TRACER_VERSION) { cache = existingCache; } else { setGlobalCache = false; if (existingCache.tracer) { throw new Error("Two incompatible versions of @azure/core-tracing have been loaded.\n This library is " + GLOBAL_TRACER_VERSION + ", existing is " + existingCache.version + "."); } } } if (!cache) { cache = { tracer: undefined, version: GLOBAL_TRACER_VERSION }; } if (setGlobalCache) { globalObj[GLOBAL_TRACER_SYMBOL] = cache; } } function getCache() { if (!cache) { loadTracerCache(); } return cache; } // Copyright (c) Microsoft Corporation. var defaultTracer; function getDefaultTracer() { if (!defaultTracer) { defaultTracer = new NoOpTracer(); } return defaultTracer; } /** * Sets the global tracer, enabling tracing for the Azure SDK. * @param tracer - An OpenTelemetry Tracer instance. */ function setTracer(tracer) { var cache = getCache(); cache.tracer = tracer; } /** * Retrieves the active tracer, or returns a * no-op implementation if one is not set. */ function getTracer() { var cache = getCache(); if (!cache.tracer) { return getDefaultTracer(); } return cache.tracer; } // Copyright (c) Microsoft Corporation. (function (SpanKind) { /** Default value. Indicates that the span is used internally. */ SpanKind[SpanKind["INTERNAL"] = 0] = "INTERNAL"; /** * Indicates that the span covers server-side handling of an RPC or other * remote request. */ SpanKind[SpanKind["SERVER"] = 1] = "SERVER"; /** * Indicates that the span covers the client-side wrapper around an RPC or * other remote request. */ SpanKind[SpanKind["CLIENT"] = 2] = "CLIENT"; /** * Indicates that the span describes producer sending a message to a * broker. Unlike client and server, there is no direct critical path latency * relationship between producer and consumer spans. */ SpanKind[SpanKind["PRODUCER"] = 3] = "PRODUCER"; /** * Indicates that the span describes consumer receiving a message from a * broker. Unlike client and server, there is no direct critical path latency * relationship between producer and consumer spans. */ SpanKind[SpanKind["CONSUMER"] = 4] = "CONSUMER"; })(exports.SpanKind || (exports.SpanKind = {})); /** * Return the span if one exists * * @param context - context to get span from */ function getSpan(context) { return api.getSpan(context); } /** * Set the span on a context * * @param context - context to use as parent * @param span - span to set active */ function setSpan(context, span) { return api.setSpan(context, span); } /** * Wrap span context in a NoopSpan and set as span in a new * context * * @param context - context to set active span on * @param spanContext - span context to be wrapped */ function setSpanContext(context, spanContext) { return api.setSpanContext(context, spanContext); } /** * Get the span context of the span if it exists. * * @param context - context to get values from */ function getSpanContext(context) { return api.getSpanContext(context); } /** Entrypoint for context API */ var context = api.context; (function (SpanStatusCode) { /** * The default status. */ SpanStatusCode[SpanStatusCode["UNSET"] = 0] = "UNSET"; /** * The operation has been validated by an Application developer or * Operator to have completed successfully. */ SpanStatusCode[SpanStatusCode["OK"] = 1] = "OK"; /** * The operation contains an error. */ SpanStatusCode[SpanStatusCode["ERROR"] = 2] = "ERROR"; })(exports.SpanStatusCode || (exports.SpanStatusCode = {})); // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. /** * @internal */ var OpenCensusTraceStateWrapper = /** @class */ (function () { function OpenCensusTraceStateWrapper(state) { this._state = state; } OpenCensusTraceStateWrapper.prototype.get = function (_key) { throw new Error("Method not implemented."); }; OpenCensusTraceStateWrapper.prototype.set = function (_key, _value) { throw new Error("Method not implemented."); }; OpenCensusTraceStateWrapper.prototype.unset = function (_key) { throw new Error("Method not implemented"); }; OpenCensusTraceStateWrapper.prototype.serialize = function () { return this._state || ""; }; return OpenCensusTraceStateWrapper; }()); // Copyright (c) Microsoft Corporation. /** An enumeration of canonical status codes. */ var CanonicalCode; (function (CanonicalCode) { /** * Not an error; returned on success */ CanonicalCode[CanonicalCode["OK"] = 0] = "OK"; /** * Internal errors. Means some invariants expected by underlying * system has been broken. If you see one of these errors, * something is very broken. */ CanonicalCode[CanonicalCode["INTERNAL"] = 13] = "INTERNAL"; })(CanonicalCode || (CanonicalCode = {})); function isWrappedSpan(span) { return !!span && span.getWrappedSpan !== undefined; } function isTracer(tracerOrSpan) { return tracerOrSpan.getWrappedTracer !== undefined; } /** * An implementation of OpenTelemetry Span that wraps an OpenCensus Span. */ var OpenCensusSpanWrapper = /** @class */ (function () { function OpenCensusSpanWrapper(tracerOrSpan, name, options, context$1) { if (name === void 0) { name = ""; } if (options === void 0) { options = {}; } if (isTracer(tracerOrSpan)) { var span = getSpan(context$1 !== null && context$1 !== void 0 ? context$1 : context.active()); var parent = isWrappedSpan(span) ? span.getWrappedSpan() : undefined; this._span = tracerOrSpan.getWrappedTracer().startChildSpan({ name: name, childOf: parent }); this._span.start(); if (options.links) { for (var _i = 0, _a = options.links; _i < _a.length; _i++) { var link = _a[_i]; // Since there is no way to set the link relationship, leave it as Unspecified. this._span.addLink(link.context.traceId, link.context.spanId, 0 /* LinkType.UNSPECIFIED */, link.attributes); } } } else { this._span = tracerOrSpan; } } /** * The underlying OpenCensus Span */ OpenCensusSpanWrapper.prototype.getWrappedSpan = function () { return this._span; }; /** * Marks the end of Span execution. * @param endTime - The time to use as the Span's end time. Defaults to * the current time. */ OpenCensusSpanWrapper.prototype.end = function (_endTime) { this._span.end(); }; /** * Returns the SpanContext associated with this Span. */ OpenCensusSpanWrapper.prototype.context = function () { var openCensusSpanContext = this._span.spanContext; return { spanId: openCensusSpanContext.spanId, traceId: openCensusSpanContext.traceId, traceFlags: openCensusSpanContext.options, traceState: new OpenCensusTraceStateWrapper(openCensusSpanContext.traceState) }; }; /** * Sets an attribute on the Span * @param key - The attribute key * @param value - The attribute value */ OpenCensusSpanWrapper.prototype.setAttribute = function (key, value) { this._span.addAttribute(key, value); return this; }; /** * Sets attributes on the Span * @param attributes - The attributes to add */ OpenCensusSpanWrapper.prototype.setAttributes = function (attributes) { this._span.attributes = attributes; return this; }; /** * Adds an event to the Span * @param name - The name of the event * @param attributes - The associated attributes to add for this event */ OpenCensusSpanWrapper.prototype.addEvent = function (_name, _attributes) { throw new Error("Method not implemented."); }; /** * Sets a status on the span. Overrides the default of SpanStatusCode.OK. * @param status - The status to set. */ OpenCensusSpanWrapper.prototype.setStatus = function (status) { switch (status.code) { case exports.SpanStatusCode.ERROR: { this._span.setStatus(CanonicalCode.INTERNAL, status.message); break; } case exports.SpanStatusCode.OK: { this._span.setStatus(CanonicalCode.OK, status.message); break; } case exports.SpanStatusCode.UNSET: { break; } } return this; }; /** * Updates the name of the Span * @param name - The new Span name */ OpenCensusSpanWrapper.prototype.updateName = function (name) { this._span.name = name; return this; }; /** * Returns whether this span will be recorded */ OpenCensusSpanWrapper.prototype.isRecording = function () { // NoRecordSpans have an empty traceId return !!this._span.traceId; }; /** * Sets exception as a span event * @param exception - the exception the only accepted values are string or Error * @param time - the time to set as Span's event time. If not provided, * use the current time. */ OpenCensusSpanWrapper.prototype.recordException = function (_exception, _time) { throw new Error("Method not implemented"); }; return OpenCensusSpanWrapper; }()); // Copyright (c) Microsoft Corporation. /** * An implementation of OpenTelemetry Tracer that wraps an OpenCensus Tracer. */ var OpenCensusTracerWrapper = /** @class */ (function () { /** * Create a new wrapper around a given OpenCensus Tracer. * @param tracer - The OpenCensus Tracer to wrap. */ function OpenCensusTracerWrapper(tracer) { this._tracer = tracer; } /** * The wrapped OpenCensus Tracer */ OpenCensusTracerWrapper.prototype.getWrappedTracer = function () { return this._tracer; }; /** * Starts a new Span. * @param name - The name of the span. * @param options - The SpanOptions used during Span creation. */ OpenCensusTracerWrapper.prototype.startSpan = function (name, options) { return new OpenCensusSpanWrapper(this, name, options); }; /** * Returns the current Span from the current context, if available. */ OpenCensusTracerWrapper.prototype.getCurrentSpan = function () { return undefined; }; /** * Executes the given function within the context provided by a Span. * @param _span - The span that provides the context. * @param _fn - The function to be executed. */ OpenCensusTracerWrapper.prototype.withSpan = function (_span, _fn) { throw new Error("Method not implemented."); }; /** * Bind a Span as the target's scope * @param target - An object to bind the scope. * @param _span - A specific Span to use. Otherwise, use the current one. */ OpenCensusTracerWrapper.prototype.bind = function (_target, _span) { throw new Error("Method not implemented."); }; return OpenCensusTracerWrapper; }()); // Copyright (c) Microsoft Corporation. /** * A mock span useful for testing. */ var TestSpan = /** @class */ (function (_super) { tslib.__extends(TestSpan, _super); /** * Starts a new Span. * @param parentTracer- The tracer that created this Span * @param name - The name of the span. * @param context - The SpanContext this span belongs to * @param kind - The SpanKind of this Span * @param parentSpanId - The identifier of the parent Span * @param startTime - The startTime of the event (defaults to now) */ function TestSpan(parentTracer, name, context, kind, parentSpanId, startTime) { if (startTime === void 0) { startTime = Date.now(); } var _this = _super.call(this) || this; _this._tracer = parentTracer; _this.name = name; _this.kind = kind; _this.startTime = startTime; _this.parentSpanId = parentSpanId; _this.status = { code: exports.SpanStatusCode.OK }; _this.endCalled = false; _this._context = context; _this.attributes = {}; return _this; } /** * Returns the Tracer that created this Span */ TestSpan.prototype.tracer = function () { return this._tracer; }; /** * Returns the SpanContext associated with this Span. */ TestSpan.prototype.context = function () { return this._context; }; /** * Marks the end of Span execution. * @param _endTime - The time to use as the Span's end time. Defaults to * the current time. */ TestSpan.prototype.end = function (_endTime) { this.endCalled = true; }; /** * Sets a status on the span. Overrides the default of SpanStatusCode.OK. * @param status - The status to set. */ TestSpan.prototype.setStatus = function (status) { this.status = status; return this; }; /** * Returns whether this span will be recorded */ TestSpan.prototype.isRecording = function () { return true; }; /** * Sets an attribute on the Span * @param key - The attribute key * @param value - The attribute value */ TestSpan.prototype.setAttribute = function (key, value) { this.attributes[key] = value; return this; }; /** * Sets attributes on the Span * @param attributes - The attributes to add */ TestSpan.prototype.setAttributes = function (attributes) { for (var _i = 0, _a = Object.keys(attributes); _i < _a.length; _i++) { var key = _a[_i]; this.attributes[key] = attributes[key]; } return this; }; return TestSpan; }(NoOpSpan)); // Copyright (c) Microsoft Corporation. /** * A mock tracer useful for testing */ var TestTracer = /** @class */ (function (_super) { tslib.__extends(TestTracer, _super); function TestTracer() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.traceIdCounter = 0; _this.spanIdCounter = 0; _this.rootSpans = []; _this.knownSpans = []; return _this; } TestTracer.prototype.getNextTraceId = function () { this.traceIdCounter++; return String(this.traceIdCounter); }; TestTracer.prototype.getNextSpanId = function () { this.spanIdCounter++; return String(this.spanIdCounter); }; /** * Returns all Spans that were created without a parent */ TestTracer.prototype.getRootSpans = function () { return this.rootSpans; }; /** * Returns all Spans this Tracer knows about */ TestTracer.prototype.getKnownSpans = function () { return this.knownSpans; }; /** * Returns all Spans where end() has not been called */ TestTracer.prototype.getActiveSpans = function () { return this.knownSpans.filter(function (span) { return !span.endCalled; }); }; /** * Return all Spans for a particular trace, grouped by their * parent Span in a tree-like structure * @param traceId - The traceId to return the graph for */ TestTracer.prototype.getSpanGraph = function (traceId) { var traceSpans = this.knownSpans.filter(function (span) { return span.context().traceId === traceId; }); var roots = []; var nodeMap = new Map(); for (var _i = 0, traceSpans_1 = traceSpans; _i < traceSpans_1.length; _i++) { var span = traceSpans_1[_i]; var spanId = span.context().spanId; var node = { name: span.name, children: [] }; nodeMap.set(spanId, node); if (span.parentSpanId) { var parent = nodeMap.get(span.parentSpanId); if (!parent) { throw new Error("Span with name " + node.name + " has an unknown parentSpan with id " + span.parentSpanId); } parent.children.push(node); } else { roots.push(node); } } return { roots: roots }; }; /** * Starts a new Span. * @param name - The name of the span. * @param options - The SpanOptions used during Span creation. */ TestTracer.prototype.startSpan = function (name, options, context$1) { var parentContext = getSpanContext(context$1 || context.active()); var traceId; var isRootSpan = false; if (parentContext && parentContext.traceId) { traceId = parentContext.traceId; } else { traceId = this.getNextTraceId(); isRootSpan = true; } var spanContext = { traceId: traceId, spanId: this.getNextSpanId(), traceFlags: 0 /* NONE */ }; var span = new TestSpan(this, name, spanContext, (options === null || options === void 0 ? void 0 : options.kind) || exports.SpanKind.INTERNAL, parentContext ? parentContext.spanId : undefined, options === null || options === void 0 ? void 0 : options.startTime); this.knownSpans.push(span); if (isRootSpan) { this.rootSpans.push(span); } return span; }; return TestTracer; }(NoOpTracer)); // Copyright (c) Microsoft Corporation. /** * Creates a function that can be used to create spans using the global tracer. * * Usage: * * ```typescript * // once * const createSpan = createSpanFunction({ packagePrefix: "Azure.Data.AppConfiguration", namespace: "Microsoft.AppConfiguration" }); * * // in each operation * const span = createSpan("deleteConfigurationSetting", operationOptions); * // code... * span.end(); * ``` * * @hidden * @param args - allows configuration of the prefix for each span as well as the az.namespace field. */ function createSpanFunction(args) { return function (operationName, operationOptions) { var tracer = getTracer(); var tracingOptions = (operationOptions === null || operationOptions === void 0 ? void 0 : operationOptions.tracingOptions) || {}; var spanOptions = tslib.__assign({ kind: exports.SpanKind.INTERNAL }, tracingOptions.spanOptions); var spanName = args.packagePrefix ? args.packagePrefix + "." + operationName : operationName; var span = tracer.startSpan(spanName, spanOptions, tracingOptions.tracingContext); if (args.namespace) { span.setAttribute("az.namespace", args.namespace); } var newSpanOptions = tracingOptions.spanOptions || {}; if (span.isRecording() && args.namespace) { newSpanOptions = tslib.__assign(tslib.__assign({}, tracingOptions.spanOptions), { attributes: tslib.__assign(tslib.__assign({}, spanOptions.attributes), { "az.namespace": args.namespace }) }); } var newTracingOptions = tslib.__assign(tslib.__assign({}, tracingOptions), { spanOptions: newSpanOptions, tracingContext: setSpan(tracingOptions.tracingContext || context.active(), span) }); var newOperationOptions = tslib.__assign(tslib.__assign({}, operationOptions), { tracingOptions: newTracingOptions }); return { span: span, updatedOptions: newOperationOptions }; }; } // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. var VERSION = "00"; /** * Generates a `SpanContext` given a `traceparent` header value. * @param traceParent - Serialized span context data as a `traceparent` header value. * @returns The `SpanContext` generated from the `traceparent` value. */ function extractSpanContextFromTraceParentHeader(traceParentHeader) { var parts = traceParentHeader.split("-"); if (parts.length !== 4) { return; } var version = parts[0], traceId = parts[1], spanId = parts[2], traceOptions = parts[3]; if (version !== VERSION) { return; } var traceFlags = parseInt(traceOptions, 16); var spanContext = { spanId: spanId, traceId: traceId, traceFlags: traceFlags }; return spanContext; } /** * Generates a `traceparent` value given a span context. * @param spanContext - Contains context for a specific span. * @returns The `spanContext` represented as a `traceparent` value. */ function getTraceParentHeader(spanContext) { var missingFields = []; if (!spanContext.traceId) { missingFields.push("traceId"); } if (!spanContext.spanId) { missingFields.push("spanId"); } if (missingFields.length) { return; } var flags = spanContext.traceFlags || 0 /* NONE */; var hexFlags = flags.toString(16); var traceFlags = hexFlags.length === 1 ? "0" + hexFlags : hexFlags; // https://www.w3.org/TR/trace-context/#traceparent-header-field-values return VERSION + "-" + spanContext.traceId + "-" + spanContext.spanId + "-" + traceFlags; } exports.NoOpSpan = NoOpSpan; exports.NoOpTracer = NoOpTracer; exports.OpenCensusSpanWrapper = OpenCensusSpanWrapper; exports.OpenCensusTracerWrapper = OpenCensusTracerWrapper; exports.TestSpan = TestSpan; exports.TestTracer = TestTracer; exports.context = context; exports.createSpanFunction = createSpanFunction; exports.extractSpanContextFromTraceParentHeader = extractSpanContextFromTraceParentHeader; exports.getSpan = getSpan; exports.getSpanContext = getSpanContext; exports.getTraceParentHeader = getTraceParentHeader; exports.getTracer = getTracer; exports.setSpan = setSpan; exports.setSpanContext = setSpanContext; exports.setTracer = setTracer; //# sourceMappingURL=index.js.map /***/ }), /***/ 3233: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var tslib = __nccwpck_require__(4351); var util = _interopDefault(__nccwpck_require__(1669)); var os = __nccwpck_require__(2087); // Copyright (c) Microsoft Corporation. function log(message) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } process.stderr.write("" + util.format.apply(util, tslib.__spread([message], args)) + os.EOL); } // Copyright (c) Microsoft Corporation. var debugEnvVariable = (typeof process !== "undefined" && process.env && process.env.DEBUG) || undefined; var enabledString; var enabledNamespaces = []; var skippedNamespaces = []; var debuggers = []; if (debugEnvVariable) { enable(debugEnvVariable); } var debugObj = Object.assign(function (namespace) { return createDebugger(namespace); }, { enable: enable, enabled: enabled, disable: disable, log: log }); function enable(namespaces) { var e_1, _a, e_2, _b; enabledString = namespaces; enabledNamespaces = []; skippedNamespaces = []; var wildcard = /\*/g; var namespaceList = namespaces.split(",").map(function (ns) { return ns.trim().replace(wildcard, ".*?"); }); try { for (var namespaceList_1 = tslib.__values(namespaceList), namespaceList_1_1 = namespaceList_1.next(); !namespaceList_1_1.done; namespaceList_1_1 = namespaceList_1.next()) { var ns = namespaceList_1_1.value; if (ns.startsWith("-")) { skippedNamespaces.push(new RegExp("^" + ns.substr(1) + "$")); } else { enabledNamespaces.push(new RegExp("^" + ns + "$")); } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (namespaceList_1_1 && !namespaceList_1_1.done && (_a = namespaceList_1.return)) _a.call(namespaceList_1); } finally { if (e_1) throw e_1.error; } } try { for (var debuggers_1 = tslib.__values(debuggers), debuggers_1_1 = debuggers_1.next(); !debuggers_1_1.done; debuggers_1_1 = debuggers_1.next()) { var instance = debuggers_1_1.value; instance.enabled = enabled(instance.namespace); } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (debuggers_1_1 && !debuggers_1_1.done && (_b = debuggers_1.return)) _b.call(debuggers_1); } finally { if (e_2) throw e_2.error; } } } function enabled(namespace) { var e_3, _a, e_4, _b; if (namespace.endsWith("*")) { return true; } try { for (var skippedNamespaces_1 = tslib.__values(skippedNamespaces), skippedNamespaces_1_1 = skippedNamespaces_1.next(); !skippedNamespaces_1_1.done; skippedNamespaces_1_1 = skippedNamespaces_1.next()) { var skipped = skippedNamespaces_1_1.value; if (skipped.test(namespace)) { return false; } } } catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { if (skippedNamespaces_1_1 && !skippedNamespaces_1_1.done && (_a = skippedNamespaces_1.return)) _a.call(skippedNamespaces_1); } finally { if (e_3) throw e_3.error; } } try { for (var enabledNamespaces_1 = tslib.__values(enabledNamespaces), enabledNamespaces_1_1 = enabledNamespaces_1.next(); !enabledNamespaces_1_1.done; enabledNamespaces_1_1 = enabledNamespaces_1.next()) { var enabledNamespace = enabledNamespaces_1_1.value; if (enabledNamespace.test(namespace)) { return true; } } } catch (e_4_1) { e_4 = { error: e_4_1 }; } finally { try { if (enabledNamespaces_1_1 && !enabledNamespaces_1_1.done && (_b = enabledNamespaces_1.return)) _b.call(enabledNamespaces_1); } finally { if (e_4) throw e_4.error; } } return false; } function disable() { var result = enabledString || ""; enable(""); return result; } function createDebugger(namespace) { var newDebugger = Object.assign(debug, { enabled: enabled(namespace), destroy: destroy, log: debugObj.log, namespace: namespace, extend: extend }); function debug() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } if (!newDebugger.enabled) { return; } if (args.length > 0) { args[0] = namespace + " " + args[0]; } newDebugger.log.apply(newDebugger, tslib.__spread(args)); } debuggers.push(newDebugger); return newDebugger; } function destroy() { var index = debuggers.indexOf(this); if (index >= 0) { debuggers.splice(index, 1); return true; } return false; } function extend(namespace) { var newDebugger = createDebugger(this.namespace + ":" + namespace); newDebugger.log = this.log; return newDebugger; } // Copyright (c) Microsoft Corporation. var registeredLoggers = new Set(); var logLevelFromEnv = (typeof process !== "undefined" && process.env && process.env.AZURE_LOG_LEVEL) || undefined; var azureLogLevel; /** * The AzureLogger provides a mechanism for overriding where logs are output to. * By default, logs are sent to stderr. * Override the `log` method to redirect logs to another location. */ var AzureLogger = debugObj("azure"); AzureLogger.log = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } debugObj.log.apply(debugObj, tslib.__spread(args)); }; var AZURE_LOG_LEVELS = ["verbose", "info", "warning", "error"]; if (logLevelFromEnv) { // avoid calling setLogLevel because we don't want a mis-set environment variable to crash if (isAzureLogLevel(logLevelFromEnv)) { setLogLevel(logLevelFromEnv); } else { console.error("AZURE_LOG_LEVEL set to unknown log level '" + logLevelFromEnv + "'; logging is not enabled. Acceptable values: " + AZURE_LOG_LEVELS.join(", ") + "."); } } /** * Immediately enables logging at the specified log level. * @param level - The log level to enable for logging. * Options from most verbose to least verbose are: * - verbose * - info * - warning * - error */ function setLogLevel(level) { var e_1, _a; if (level && !isAzureLogLevel(level)) { throw new Error("Unknown log level '" + level + "'. Acceptable values: " + AZURE_LOG_LEVELS.join(",")); } azureLogLevel = level; var enabledNamespaces = []; try { for (var registeredLoggers_1 = tslib.__values(registeredLoggers), registeredLoggers_1_1 = registeredLoggers_1.next(); !registeredLoggers_1_1.done; registeredLoggers_1_1 = registeredLoggers_1.next()) { var logger = registeredLoggers_1_1.value; if (shouldEnable(logger)) { enabledNamespaces.push(logger.namespace); } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (registeredLoggers_1_1 && !registeredLoggers_1_1.done && (_a = registeredLoggers_1.return)) _a.call(registeredLoggers_1); } finally { if (e_1) throw e_1.error; } } debugObj.enable(enabledNamespaces.join(",")); } /** * Retrieves the currently specified log level. */ function getLogLevel() { return azureLogLevel; } var levelMap = { verbose: 400, info: 300, warning: 200, error: 100 }; /** * Creates a logger for use by the Azure SDKs that inherits from `AzureLogger`. * @param namespace - The name of the SDK package. * @hidden */ function createClientLogger(namespace) { var clientRootLogger = AzureLogger.extend(namespace); patchLogMethod(AzureLogger, clientRootLogger); return { error: createLogger(clientRootLogger, "error"), warning: createLogger(clientRootLogger, "warning"), info: createLogger(clientRootLogger, "info"), verbose: createLogger(clientRootLogger, "verbose") }; } function patchLogMethod(parent, child) { child.log = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } parent.log.apply(parent, tslib.__spread(args)); }; } function createLogger(parent, level) { var logger = Object.assign(parent.extend(level), { level: level }); patchLogMethod(parent, logger); if (shouldEnable(logger)) { var enabledNamespaces = debugObj.disable(); debugObj.enable(enabledNamespaces + "," + logger.namespace); } registeredLoggers.add(logger); return logger; } function shouldEnable(logger) { if (azureLogLevel && levelMap[logger.level] <= levelMap[azureLogLevel]) { return true; } else { return false; } } function isAzureLogLevel(logLevel) { return AZURE_LOG_LEVELS.includes(logLevel); } exports.AzureLogger = AzureLogger; exports.createClientLogger = createClientLogger; exports.getLogLevel = getLogLevel; exports.setLogLevel = setLogLevel; //# sourceMappingURL=index.js.map /***/ }), /***/ 4100: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); var coreHttp = __nccwpck_require__(4607); var tslib = __nccwpck_require__(4351); var coreTracing = __nccwpck_require__(4175); var logger$1 = __nccwpck_require__(3233); var abortController = __nccwpck_require__(2557); var os = __nccwpck_require__(2087); var crypto = __nccwpck_require__(6417); var stream = __nccwpck_require__(2413); __nccwpck_require__(4559); var coreLro = __nccwpck_require__(7094); var events = __nccwpck_require__(8614); var fs = __nccwpck_require__(5747); var util = __nccwpck_require__(1669); /* * Copyright (c) Microsoft Corporation. * Licensed under the MIT License. * * Code generated by Microsoft (R) AutoRest Code Generator. * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ var BlobServiceProperties = { serializedName: "BlobServiceProperties", xmlName: "StorageServiceProperties", type: { name: "Composite", className: "BlobServiceProperties", modelProperties: { blobAnalyticsLogging: { serializedName: "Logging", xmlName: "Logging", type: { name: "Composite", className: "Logging" } }, hourMetrics: { serializedName: "HourMetrics", xmlName: "HourMetrics", type: { name: "Composite", className: "Metrics" } }, minuteMetrics: { serializedName: "MinuteMetrics", xmlName: "MinuteMetrics", type: { name: "Composite", className: "Metrics" } }, cors: { serializedName: "Cors", xmlName: "Cors", xmlIsWrapped: true, xmlElementName: "CorsRule", type: { name: "Sequence", element: { type: { name: "Composite", className: "CorsRule" } } } }, defaultServiceVersion: { serializedName: "DefaultServiceVersion", xmlName: "DefaultServiceVersion", type: { name: "String" } }, deleteRetentionPolicy: { serializedName: "DeleteRetentionPolicy", xmlName: "DeleteRetentionPolicy", type: { name: "Composite", className: "RetentionPolicy" } }, staticWebsite: { serializedName: "StaticWebsite", xmlName: "StaticWebsite", type: { name: "Composite", className: "StaticWebsite" } } } } }; var Logging = { serializedName: "Logging", type: { name: "Composite", className: "Logging", modelProperties: { version: { serializedName: "Version", required: true, xmlName: "Version", type: { name: "String" } }, deleteProperty: { serializedName: "Delete", required: true, xmlName: "Delete", type: { name: "Boolean" } }, read: { serializedName: "Read", required: true, xmlName: "Read", type: { name: "Boolean" } }, write: { serializedName: "Write", required: true, xmlName: "Write", type: { name: "Boolean" } }, retentionPolicy: { serializedName: "RetentionPolicy", xmlName: "RetentionPolicy", type: { name: "Composite", className: "RetentionPolicy" } } } } }; var RetentionPolicy = { serializedName: "RetentionPolicy", type: { name: "Composite", className: "RetentionPolicy", modelProperties: { enabled: { serializedName: "Enabled", required: true, xmlName: "Enabled", type: { name: "Boolean" } }, days: { constraints: { InclusiveMinimum: 1 }, serializedName: "Days", xmlName: "Days", type: { name: "Number" } } } } }; var Metrics = { serializedName: "Metrics", type: { name: "Composite", className: "Metrics", modelProperties: { version: { serializedName: "Version", xmlName: "Version", type: { name: "String" } }, enabled: { serializedName: "Enabled", required: true, xmlName: "Enabled", type: { name: "Boolean" } }, includeAPIs: { serializedName: "IncludeAPIs", xmlName: "IncludeAPIs", type: { name: "Boolean" } }, retentionPolicy: { serializedName: "RetentionPolicy", xmlName: "RetentionPolicy", type: { name: "Composite", className: "RetentionPolicy" } } } } }; var CorsRule = { serializedName: "CorsRule", type: { name: "Composite", className: "CorsRule", modelProperties: { allowedOrigins: { serializedName: "AllowedOrigins", required: true, xmlName: "AllowedOrigins", type: { name: "String" } }, allowedMethods: { serializedName: "AllowedMethods", required: true, xmlName: "AllowedMethods", type: { name: "String" } }, allowedHeaders: { serializedName: "AllowedHeaders", required: true, xmlName: "AllowedHeaders", type: { name: "String" } }, exposedHeaders: { serializedName: "ExposedHeaders", required: true, xmlName: "ExposedHeaders", type: { name: "String" } }, maxAgeInSeconds: { constraints: { InclusiveMinimum: 0 }, serializedName: "MaxAgeInSeconds", required: true, xmlName: "MaxAgeInSeconds", type: { name: "Number" } } } } }; var StaticWebsite = { serializedName: "StaticWebsite", type: { name: "Composite", className: "StaticWebsite", modelProperties: { enabled: { serializedName: "Enabled", required: true, xmlName: "Enabled", type: { name: "Boolean" } }, indexDocument: { serializedName: "IndexDocument", xmlName: "IndexDocument", type: { name: "String" } }, errorDocument404Path: { serializedName: "ErrorDocument404Path", xmlName: "ErrorDocument404Path", type: { name: "String" } }, defaultIndexDocumentPath: { serializedName: "DefaultIndexDocumentPath", xmlName: "DefaultIndexDocumentPath", type: { name: "String" } } } } }; var StorageError = { serializedName: "StorageError", type: { name: "Composite", className: "StorageError", modelProperties: { message: { serializedName: "Message", xmlName: "Message", type: { name: "String" } }, code: { serializedName: "Code", xmlName: "Code", type: { name: "String" } } } } }; var BlobServiceStatistics = { serializedName: "BlobServiceStatistics", xmlName: "StorageServiceStats", type: { name: "Composite", className: "BlobServiceStatistics", modelProperties: { geoReplication: { serializedName: "GeoReplication", xmlName: "GeoReplication", type: { name: "Composite", className: "GeoReplication" } } } } }; var GeoReplication = { serializedName: "GeoReplication", type: { name: "Composite", className: "GeoReplication", modelProperties: { status: { serializedName: "Status", required: true, xmlName: "Status", type: { name: "Enum", allowedValues: ["live", "bootstrap", "unavailable"] } }, lastSyncOn: { serializedName: "LastSyncTime", required: true, xmlName: "LastSyncTime", type: { name: "DateTimeRfc1123" } } } } }; var ListContainersSegmentResponse = { serializedName: "ListContainersSegmentResponse", xmlName: "EnumerationResults", type: { name: "Composite", className: "ListContainersSegmentResponse", modelProperties: { serviceEndpoint: { serializedName: "ServiceEndpoint", required: true, xmlName: "ServiceEndpoint", xmlIsAttribute: true, type: { name: "String" } }, prefix: { serializedName: "Prefix", xmlName: "Prefix", type: { name: "String" } }, marker: { serializedName: "Marker", xmlName: "Marker", type: { name: "String" } }, maxPageSize: { serializedName: "MaxResults", xmlName: "MaxResults", type: { name: "Number" } }, containerItems: { serializedName: "ContainerItems", required: true, xmlName: "Containers", xmlIsWrapped: true, xmlElementName: "Container", type: { name: "Sequence", element: { type: { name: "Composite", className: "ContainerItem" } } } }, continuationToken: { serializedName: "NextMarker", xmlName: "NextMarker", type: { name: "String" } } } } }; var ContainerItem = { serializedName: "ContainerItem", xmlName: "Container", type: { name: "Composite", className: "ContainerItem", modelProperties: { name: { serializedName: "Name", required: true, xmlName: "Name", type: { name: "String" } }, deleted: { serializedName: "Deleted", xmlName: "Deleted", type: { name: "Boolean" } }, version: { serializedName: "Version", xmlName: "Version", type: { name: "String" } }, properties: { serializedName: "Properties", xmlName: "Properties", type: { name: "Composite", className: "ContainerProperties" } }, metadata: { serializedName: "Metadata", xmlName: "Metadata", type: { name: "Dictionary", value: { type: { name: "String" } } } } } } }; var ContainerProperties = { serializedName: "ContainerProperties", type: { name: "Composite", className: "ContainerProperties", modelProperties: { lastModified: { serializedName: "Last-Modified", required: true, xmlName: "Last-Modified", type: { name: "DateTimeRfc1123" } }, etag: { serializedName: "Etag", required: true, xmlName: "Etag", type: { name: "String" } }, leaseStatus: { serializedName: "LeaseStatus", xmlName: "LeaseStatus", type: { name: "Enum", allowedValues: ["locked", "unlocked"] } }, leaseState: { serializedName: "LeaseState", xmlName: "LeaseState", type: { name: "Enum", allowedValues: [ "available", "leased", "expired", "breaking", "broken" ] } }, leaseDuration: { serializedName: "LeaseDuration", xmlName: "LeaseDuration", type: { name: "Enum", allowedValues: ["infinite", "fixed"] } }, publicAccess: { serializedName: "PublicAccess", xmlName: "PublicAccess", type: { name: "Enum", allowedValues: ["container", "blob"] } }, hasImmutabilityPolicy: { serializedName: "HasImmutabilityPolicy", xmlName: "HasImmutabilityPolicy", type: { name: "Boolean" } }, hasLegalHold: { serializedName: "HasLegalHold", xmlName: "HasLegalHold", type: { name: "Boolean" } }, defaultEncryptionScope: { serializedName: "DefaultEncryptionScope", xmlName: "DefaultEncryptionScope", type: { name: "String" } }, preventEncryptionScopeOverride: { serializedName: "DenyEncryptionScopeOverride", xmlName: "DenyEncryptionScopeOverride", type: { name: "Boolean" } }, deletedOn: { serializedName: "DeletedTime", xmlName: "DeletedTime", type: { name: "DateTimeRfc1123" } }, remainingRetentionDays: { serializedName: "RemainingRetentionDays", xmlName: "RemainingRetentionDays", type: { name: "Number" } } } } }; var KeyInfo = { serializedName: "KeyInfo", type: { name: "Composite", className: "KeyInfo", modelProperties: { startsOn: { serializedName: "Start", required: true, xmlName: "Start", type: { name: "String" } }, expiresOn: { serializedName: "Expiry", required: true, xmlName: "Expiry", type: { name: "String" } } } } }; var UserDelegationKey = { serializedName: "UserDelegationKey", type: { name: "Composite", className: "UserDelegationKey", modelProperties: { signedObjectId: { serializedName: "SignedOid", required: true, xmlName: "SignedOid", type: { name: "String" } }, signedTenantId: { serializedName: "SignedTid", required: true, xmlName: "SignedTid", type: { name: "String" } }, signedStartsOn: { serializedName: "SignedStart", required: true, xmlName: "SignedStart", type: { name: "String" } }, signedExpiresOn: { serializedName: "SignedExpiry", required: true, xmlName: "SignedExpiry", type: { name: "String" } }, signedService: { serializedName: "SignedService", required: true, xmlName: "SignedService", type: { name: "String" } }, signedVersion: { serializedName: "SignedVersion", required: true, xmlName: "SignedVersion", type: { name: "String" } }, value: { serializedName: "Value", required: true, xmlName: "Value", type: { name: "String" } } } } }; var FilterBlobSegment = { serializedName: "FilterBlobSegment", xmlName: "EnumerationResults", type: { name: "Composite", className: "FilterBlobSegment", modelProperties: { serviceEndpoint: { serializedName: "ServiceEndpoint", required: true, xmlName: "ServiceEndpoint", xmlIsAttribute: true, type: { name: "String" } }, where: { serializedName: "Where", required: true, xmlName: "Where", type: { name: "String" } }, blobs: { serializedName: "Blobs", required: true, xmlName: "Blobs", xmlIsWrapped: true, xmlElementName: "Blob", type: { name: "Sequence", element: { type: { name: "Composite", className: "FilterBlobItem" } } } }, continuationToken: { serializedName: "NextMarker", xmlName: "NextMarker", type: { name: "String" } } } } }; var FilterBlobItem = { serializedName: "FilterBlobItem", xmlName: "Blob", type: { name: "Composite", className: "FilterBlobItem", modelProperties: { name: { serializedName: "Name", required: true, xmlName: "Name", type: { name: "String" } }, containerName: { serializedName: "ContainerName", required: true, xmlName: "ContainerName", type: { name: "String" } }, tags: { serializedName: "Tags", xmlName: "Tags", type: { name: "Composite", className: "BlobTags" } } } } }; var BlobTags = { serializedName: "BlobTags", xmlName: "Tags", type: { name: "Composite", className: "BlobTags", modelProperties: { blobTagSet: { serializedName: "BlobTagSet", required: true, xmlName: "TagSet", xmlIsWrapped: true, xmlElementName: "Tag", type: { name: "Sequence", element: { type: { name: "Composite", className: "BlobTag" } } } } } } }; var BlobTag = { serializedName: "BlobTag", xmlName: "Tag", type: { name: "Composite", className: "BlobTag", modelProperties: { key: { serializedName: "Key", required: true, xmlName: "Key", type: { name: "String" } }, value: { serializedName: "Value", required: true, xmlName: "Value", type: { name: "String" } } } } }; var SignedIdentifier = { serializedName: "SignedIdentifier", xmlName: "SignedIdentifier", type: { name: "Composite", className: "SignedIdentifier", modelProperties: { id: { serializedName: "Id", required: true, xmlName: "Id", type: { name: "String" } }, accessPolicy: { serializedName: "AccessPolicy", xmlName: "AccessPolicy", type: { name: "Composite", className: "AccessPolicy" } } } } }; var AccessPolicy = { serializedName: "AccessPolicy", type: { name: "Composite", className: "AccessPolicy", modelProperties: { startsOn: { serializedName: "Start", xmlName: "Start", type: { name: "String" } }, expiresOn: { serializedName: "Expiry", xmlName: "Expiry", type: { name: "String" } }, permissions: { serializedName: "Permission", xmlName: "Permission", type: { name: "String" } } } } }; var ListBlobsFlatSegmentResponse = { serializedName: "ListBlobsFlatSegmentResponse", xmlName: "EnumerationResults", type: { name: "Composite", className: "ListBlobsFlatSegmentResponse", modelProperties: { serviceEndpoint: { serializedName: "ServiceEndpoint", required: true, xmlName: "ServiceEndpoint", xmlIsAttribute: true, type: { name: "String" } }, containerName: { serializedName: "ContainerName", required: true, xmlName: "ContainerName", xmlIsAttribute: true, type: { name: "String" } }, prefix: { serializedName: "Prefix", xmlName: "Prefix", type: { name: "String" } }, marker: { serializedName: "Marker", xmlName: "Marker", type: { name: "String" } }, maxPageSize: { serializedName: "MaxResults", xmlName: "MaxResults", type: { name: "Number" } }, segment: { serializedName: "Segment", xmlName: "Blobs", type: { name: "Composite", className: "BlobFlatListSegment" } }, continuationToken: { serializedName: "NextMarker", xmlName: "NextMarker", type: { name: "String" } } } } }; var BlobFlatListSegment = { serializedName: "BlobFlatListSegment", xmlName: "Blobs", type: { name: "Composite", className: "BlobFlatListSegment", modelProperties: { blobItems: { serializedName: "BlobItems", required: true, xmlName: "BlobItems", xmlElementName: "Blob", type: { name: "Sequence", element: { type: { name: "Composite", className: "BlobItemInternal" } } } } } } }; var BlobItemInternal = { serializedName: "BlobItemInternal", xmlName: "Blob", type: { name: "Composite", className: "BlobItemInternal", modelProperties: { name: { serializedName: "Name", required: true, xmlName: "Name", type: { name: "String" } }, deleted: { serializedName: "Deleted", required: true, xmlName: "Deleted", type: { name: "Boolean" } }, snapshot: { serializedName: "Snapshot", required: true, xmlName: "Snapshot", type: { name: "String" } }, versionId: { serializedName: "VersionId", xmlName: "VersionId", type: { name: "String" } }, isCurrentVersion: { serializedName: "IsCurrentVersion", xmlName: "IsCurrentVersion", type: { name: "Boolean" } }, properties: { serializedName: "Properties", xmlName: "Properties", type: { name: "Composite", className: "BlobPropertiesInternal" } }, metadata: { serializedName: "Metadata", xmlName: "Metadata", type: { name: "Dictionary", value: { type: { name: "String" } } } }, blobTags: { serializedName: "BlobTags", xmlName: "Tags", type: { name: "Composite", className: "BlobTags" } }, objectReplicationMetadata: { serializedName: "ObjectReplicationMetadata", xmlName: "OrMetadata", type: { name: "Dictionary", value: { type: { name: "String" } } } } } } }; var BlobPropertiesInternal = { serializedName: "BlobPropertiesInternal", xmlName: "Properties", type: { name: "Composite", className: "BlobPropertiesInternal", modelProperties: { createdOn: { serializedName: "Creation-Time", xmlName: "Creation-Time", type: { name: "DateTimeRfc1123" } }, lastModified: { serializedName: "Last-Modified", required: true, xmlName: "Last-Modified", type: { name: "DateTimeRfc1123" } }, etag: { serializedName: "Etag", required: true, xmlName: "Etag", type: { name: "String" } }, contentLength: { serializedName: "Content-Length", xmlName: "Content-Length", type: { name: "Number" } }, contentType: { serializedName: "Content-Type", xmlName: "Content-Type", type: { name: "String" } }, contentEncoding: { serializedName: "Content-Encoding", xmlName: "Content-Encoding", type: { name: "String" } }, contentLanguage: { serializedName: "Content-Language", xmlName: "Content-Language", type: { name: "String" } }, contentMD5: { serializedName: "Content-MD5", xmlName: "Content-MD5", type: { name: "ByteArray" } }, contentDisposition: { serializedName: "Content-Disposition", xmlName: "Content-Disposition", type: { name: "String" } }, cacheControl: { serializedName: "Cache-Control", xmlName: "Cache-Control", type: { name: "String" } }, blobSequenceNumber: { serializedName: "x-ms-blob-sequence-number", xmlName: "x-ms-blob-sequence-number", type: { name: "Number" } }, blobType: { serializedName: "BlobType", xmlName: "BlobType", type: { name: "Enum", allowedValues: ["BlockBlob", "PageBlob", "AppendBlob"] } }, leaseStatus: { serializedName: "LeaseStatus", xmlName: "LeaseStatus", type: { name: "Enum", allowedValues: ["locked", "unlocked"] } }, leaseState: { serializedName: "LeaseState", xmlName: "LeaseState", type: { name: "Enum", allowedValues: [ "available", "leased", "expired", "breaking", "broken" ] } }, leaseDuration: { serializedName: "LeaseDuration", xmlName: "LeaseDuration", type: { name: "Enum", allowedValues: ["infinite", "fixed"] } }, copyId: { serializedName: "CopyId", xmlName: "CopyId", type: { name: "String" } }, copyStatus: { serializedName: "CopyStatus", xmlName: "CopyStatus", type: { name: "Enum", allowedValues: ["pending", "success", "aborted", "failed"] } }, copySource: { serializedName: "CopySource", xmlName: "CopySource", type: { name: "String" } }, copyProgress: { serializedName: "CopyProgress", xmlName: "CopyProgress", type: { name: "String" } }, copyCompletedOn: { serializedName: "CopyCompletionTime", xmlName: "CopyCompletionTime", type: { name: "DateTimeRfc1123" } }, copyStatusDescription: { serializedName: "CopyStatusDescription", xmlName: "CopyStatusDescription", type: { name: "String" } }, serverEncrypted: { serializedName: "ServerEncrypted", xmlName: "ServerEncrypted", type: { name: "Boolean" } }, incrementalCopy: { serializedName: "IncrementalCopy", xmlName: "IncrementalCopy", type: { name: "Boolean" } }, destinationSnapshot: { serializedName: "DestinationSnapshot", xmlName: "DestinationSnapshot", type: { name: "String" } }, deletedOn: { serializedName: "DeletedTime", xmlName: "DeletedTime", type: { name: "DateTimeRfc1123" } }, remainingRetentionDays: { serializedName: "RemainingRetentionDays", xmlName: "RemainingRetentionDays", type: { name: "Number" } }, accessTier: { serializedName: "AccessTier", xmlName: "AccessTier", type: { name: "Enum", allowedValues: [ "P4", "P6", "P10", "P15", "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive" ] } }, accessTierInferred: { serializedName: "AccessTierInferred", xmlName: "AccessTierInferred", type: { name: "Boolean" } }, archiveStatus: { serializedName: "ArchiveStatus", xmlName: "ArchiveStatus", type: { name: "Enum", allowedValues: [ "rehydrate-pending-to-hot", "rehydrate-pending-to-cool" ] } }, customerProvidedKeySha256: { serializedName: "CustomerProvidedKeySha256", xmlName: "CustomerProvidedKeySha256", type: { name: "String" } }, encryptionScope: { serializedName: "EncryptionScope", xmlName: "EncryptionScope", type: { name: "String" } }, accessTierChangedOn: { serializedName: "AccessTierChangeTime", xmlName: "AccessTierChangeTime", type: { name: "DateTimeRfc1123" } }, tagCount: { serializedName: "TagCount", xmlName: "TagCount", type: { name: "Number" } }, expiresOn: { serializedName: "Expiry-Time", xmlName: "Expiry-Time", type: { name: "DateTimeRfc1123" } }, isSealed: { serializedName: "Sealed", xmlName: "Sealed", type: { name: "Boolean" } }, rehydratePriority: { serializedName: "RehydratePriority", xmlName: "RehydratePriority", type: { name: "Enum", allowedValues: ["High", "Standard"] } }, lastAccessedOn: { serializedName: "LastAccessTime", xmlName: "LastAccessTime", type: { name: "DateTimeRfc1123" } } } } }; var ListBlobsHierarchySegmentResponse = { serializedName: "ListBlobsHierarchySegmentResponse", xmlName: "EnumerationResults", type: { name: "Composite", className: "ListBlobsHierarchySegmentResponse", modelProperties: { serviceEndpoint: { serializedName: "ServiceEndpoint", required: true, xmlName: "ServiceEndpoint", xmlIsAttribute: true, type: { name: "String" } }, containerName: { serializedName: "ContainerName", required: true, xmlName: "ContainerName", xmlIsAttribute: true, type: { name: "String" } }, prefix: { serializedName: "Prefix", xmlName: "Prefix", type: { name: "String" } }, marker: { serializedName: "Marker", xmlName: "Marker", type: { name: "String" } }, maxPageSize: { serializedName: "MaxResults", xmlName: "MaxResults", type: { name: "Number" } }, delimiter: { serializedName: "Delimiter", xmlName: "Delimiter", type: { name: "String" } }, segment: { serializedName: "Segment", xmlName: "Blobs", type: { name: "Composite", className: "BlobHierarchyListSegment" } }, continuationToken: { serializedName: "NextMarker", xmlName: "NextMarker", type: { name: "String" } } } } }; var BlobHierarchyListSegment = { serializedName: "BlobHierarchyListSegment", xmlName: "Blobs", type: { name: "Composite", className: "BlobHierarchyListSegment", modelProperties: { blobPrefixes: { serializedName: "BlobPrefixes", xmlName: "BlobPrefixes", xmlElementName: "BlobPrefix", type: { name: "Sequence", element: { type: { name: "Composite", className: "BlobPrefix" } } } }, blobItems: { serializedName: "BlobItems", required: true, xmlName: "BlobItems", xmlElementName: "Blob", type: { name: "Sequence", element: { type: { name: "Composite", className: "BlobItemInternal" } } } } } } }; var BlobPrefix = { serializedName: "BlobPrefix", type: { name: "Composite", className: "BlobPrefix", modelProperties: { name: { serializedName: "Name", required: true, xmlName: "Name", type: { name: "String" } } } } }; var DataLakeStorageError = { serializedName: "DataLakeStorageError", type: { name: "Composite", className: "DataLakeStorageError", modelProperties: { dataLakeStorageErrorDetails: { serializedName: "error", xmlName: "error", type: { name: "Composite", className: "DataLakeStorageErrorError" } } } } }; var DataLakeStorageErrorError = { serializedName: "DataLakeStorageErrorError", type: { name: "Composite", className: "DataLakeStorageErrorError", modelProperties: { code: { serializedName: "Code", xmlName: "Code", type: { name: "String" } }, message: { serializedName: "Message", xmlName: "Message", type: { name: "String" } } } } }; var BlockLookupList = { serializedName: "BlockLookupList", xmlName: "BlockList", type: { name: "Composite", className: "BlockLookupList", modelProperties: { committed: { serializedName: "Committed", xmlName: "Committed", xmlElementName: "Committed", type: { name: "Sequence", element: { type: { name: "String" } } } }, uncommitted: { serializedName: "Uncommitted", xmlName: "Uncommitted", xmlElementName: "Uncommitted", type: { name: "Sequence", element: { type: { name: "String" } } } }, latest: { serializedName: "Latest", xmlName: "Latest", xmlElementName: "Latest", type: { name: "Sequence", element: { type: { name: "String" } } } } } } }; var BlockList = { serializedName: "BlockList", type: { name: "Composite", className: "BlockList", modelProperties: { committedBlocks: { serializedName: "CommittedBlocks", xmlName: "CommittedBlocks", xmlIsWrapped: true, xmlElementName: "Block", type: { name: "Sequence", element: { type: { name: "Composite", className: "Block" } } } }, uncommittedBlocks: { serializedName: "UncommittedBlocks", xmlName: "UncommittedBlocks", xmlIsWrapped: true, xmlElementName: "Block", type: { name: "Sequence", element: { type: { name: "Composite", className: "Block" } } } } } } }; var Block = { serializedName: "Block", type: { name: "Composite", className: "Block", modelProperties: { name: { serializedName: "Name", required: true, xmlName: "Name", type: { name: "String" } }, size: { serializedName: "Size", required: true, xmlName: "Size", type: { name: "Number" } } } } }; var PageList = { serializedName: "PageList", type: { name: "Composite", className: "PageList", modelProperties: { pageRange: { serializedName: "PageRange", xmlName: "PageRange", xmlElementName: "PageRange", type: { name: "Sequence", element: { type: { name: "Composite", className: "PageRange" } } } }, clearRange: { serializedName: "ClearRange", xmlName: "ClearRange", xmlElementName: "ClearRange", type: { name: "Sequence", element: { type: { name: "Composite", className: "ClearRange" } } } } } } }; var PageRange = { serializedName: "PageRange", xmlName: "PageRange", type: { name: "Composite", className: "PageRange", modelProperties: { start: { serializedName: "Start", required: true, xmlName: "Start", type: { name: "Number" } }, end: { serializedName: "End", required: true, xmlName: "End", type: { name: "Number" } } } } }; var ClearRange = { serializedName: "ClearRange", xmlName: "ClearRange", type: { name: "Composite", className: "ClearRange", modelProperties: { start: { serializedName: "Start", required: true, xmlName: "Start", type: { name: "Number" } }, end: { serializedName: "End", required: true, xmlName: "End", type: { name: "Number" } } } } }; var QueryRequest = { serializedName: "QueryRequest", xmlName: "QueryRequest", type: { name: "Composite", className: "QueryRequest", modelProperties: { queryType: { serializedName: "QueryType", required: true, xmlName: "QueryType", type: { name: "String" } }, expression: { serializedName: "Expression", required: true, xmlName: "Expression", type: { name: "String" } }, inputSerialization: { serializedName: "InputSerialization", xmlName: "InputSerialization", type: { name: "Composite", className: "QuerySerialization" } }, outputSerialization: { serializedName: "OutputSerialization", xmlName: "OutputSerialization", type: { name: "Composite", className: "QuerySerialization" } } } } }; var QuerySerialization = { serializedName: "QuerySerialization", type: { name: "Composite", className: "QuerySerialization", modelProperties: { format: { serializedName: "Format", xmlName: "Format", type: { name: "Composite", className: "QueryFormat" } } } } }; var QueryFormat = { serializedName: "QueryFormat", type: { name: "Composite", className: "QueryFormat", modelProperties: { type: { serializedName: "Type", xmlName: "Type", type: { name: "Enum", allowedValues: ["delimited", "json", "arrow"] } }, delimitedTextConfiguration: { serializedName: "DelimitedTextConfiguration", xmlName: "DelimitedTextConfiguration", type: { name: "Composite", className: "DelimitedTextConfiguration" } }, jsonTextConfiguration: { serializedName: "JsonTextConfiguration", xmlName: "JsonTextConfiguration", type: { name: "Composite", className: "JsonTextConfiguration" } }, arrowConfiguration: { serializedName: "ArrowConfiguration", xmlName: "ArrowConfiguration", type: { name: "Composite", className: "ArrowConfiguration" } } } } }; var DelimitedTextConfiguration = { serializedName: "DelimitedTextConfiguration", xmlName: "DelimitedTextConfiguration", type: { name: "Composite", className: "DelimitedTextConfiguration", modelProperties: { columnSeparator: { serializedName: "ColumnSeparator", required: true, xmlName: "ColumnSeparator", type: { name: "String" } }, fieldQuote: { serializedName: "FieldQuote", required: true, xmlName: "FieldQuote", type: { name: "String" } }, recordSeparator: { serializedName: "RecordSeparator", required: true, xmlName: "RecordSeparator", type: { name: "String" } }, escapeChar: { serializedName: "EscapeChar", required: true, xmlName: "EscapeChar", type: { name: "String" } }, headersPresent: { serializedName: "HeadersPresent", required: true, xmlName: "HasHeaders", type: { name: "Boolean" } } } } }; var JsonTextConfiguration = { serializedName: "JsonTextConfiguration", xmlName: "JsonTextConfiguration", type: { name: "Composite", className: "JsonTextConfiguration", modelProperties: { recordSeparator: { serializedName: "RecordSeparator", required: true, xmlName: "RecordSeparator", type: { name: "String" } } } } }; var ArrowConfiguration = { serializedName: "ArrowConfiguration", xmlName: "ArrowConfiguration", type: { name: "Composite", className: "ArrowConfiguration", modelProperties: { schema: { serializedName: "Schema", required: true, xmlName: "Schema", xmlIsWrapped: true, xmlElementName: "Field", type: { name: "Sequence", element: { type: { name: "Composite", className: "ArrowField" } } } } } } }; var ArrowField = { serializedName: "ArrowField", xmlName: "Field", type: { name: "Composite", className: "ArrowField", modelProperties: { type: { serializedName: "Type", required: true, xmlName: "Type", type: { name: "String" } }, name: { serializedName: "Name", xmlName: "Name", type: { name: "String" } }, precision: { serializedName: "Precision", xmlName: "Precision", type: { name: "Number" } }, scale: { serializedName: "Scale", xmlName: "Scale", type: { name: "Number" } } } } }; var ServiceSetPropertiesHeaders = { serializedName: "Service_setPropertiesHeaders", type: { name: "Composite", className: "ServiceSetPropertiesHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ServiceSetPropertiesExceptionHeaders = { serializedName: "Service_setPropertiesExceptionHeaders", type: { name: "Composite", className: "ServiceSetPropertiesExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ServiceGetPropertiesHeaders = { serializedName: "Service_getPropertiesHeaders", type: { name: "Composite", className: "ServiceGetPropertiesHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ServiceGetPropertiesExceptionHeaders = { serializedName: "Service_getPropertiesExceptionHeaders", type: { name: "Composite", className: "ServiceGetPropertiesExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ServiceGetStatisticsHeaders = { serializedName: "Service_getStatisticsHeaders", type: { name: "Composite", className: "ServiceGetStatisticsHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ServiceGetStatisticsExceptionHeaders = { serializedName: "Service_getStatisticsExceptionHeaders", type: { name: "Composite", className: "ServiceGetStatisticsExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ServiceListContainersSegmentHeaders = { serializedName: "Service_listContainersSegmentHeaders", type: { name: "Composite", className: "ServiceListContainersSegmentHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ServiceListContainersSegmentExceptionHeaders = { serializedName: "Service_listContainersSegmentExceptionHeaders", type: { name: "Composite", className: "ServiceListContainersSegmentExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ServiceGetUserDelegationKeyHeaders = { serializedName: "Service_getUserDelegationKeyHeaders", type: { name: "Composite", className: "ServiceGetUserDelegationKeyHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ServiceGetUserDelegationKeyExceptionHeaders = { serializedName: "Service_getUserDelegationKeyExceptionHeaders", type: { name: "Composite", className: "ServiceGetUserDelegationKeyExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ServiceGetAccountInfoHeaders = { serializedName: "Service_getAccountInfoHeaders", type: { name: "Composite", className: "ServiceGetAccountInfoHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, skuName: { serializedName: "x-ms-sku-name", xmlName: "x-ms-sku-name", type: { name: "Enum", allowedValues: [ "Standard_LRS", "Standard_GRS", "Standard_RAGRS", "Standard_ZRS", "Premium_LRS" ] } }, accountKind: { serializedName: "x-ms-account-kind", xmlName: "x-ms-account-kind", type: { name: "Enum", allowedValues: [ "Storage", "BlobStorage", "StorageV2", "FileStorage", "BlockBlobStorage" ] } }, isHierarchicalNamespaceEnabled: { serializedName: "x-ms-is-hns-enabled", xmlName: "x-ms-is-hns-enabled", type: { name: "Boolean" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ServiceGetAccountInfoExceptionHeaders = { serializedName: "Service_getAccountInfoExceptionHeaders", type: { name: "Composite", className: "ServiceGetAccountInfoExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ServiceSubmitBatchHeaders = { serializedName: "Service_submitBatchHeaders", type: { name: "Composite", className: "ServiceSubmitBatchHeaders", modelProperties: { contentType: { serializedName: "content-type", xmlName: "content-type", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ServiceSubmitBatchExceptionHeaders = { serializedName: "Service_submitBatchExceptionHeaders", type: { name: "Composite", className: "ServiceSubmitBatchExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ServiceFilterBlobsHeaders = { serializedName: "Service_filterBlobsHeaders", type: { name: "Composite", className: "ServiceFilterBlobsHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ServiceFilterBlobsExceptionHeaders = { serializedName: "Service_filterBlobsExceptionHeaders", type: { name: "Composite", className: "ServiceFilterBlobsExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerCreateHeaders = { serializedName: "Container_createHeaders", type: { name: "Composite", className: "ContainerCreateHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerCreateExceptionHeaders = { serializedName: "Container_createExceptionHeaders", type: { name: "Composite", className: "ContainerCreateExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerGetPropertiesHeaders = { serializedName: "Container_getPropertiesHeaders", type: { name: "Composite", className: "ContainerGetPropertiesHeaders", modelProperties: { metadata: { serializedName: "x-ms-meta", xmlName: "x-ms-meta", type: { name: "Dictionary", value: { type: { name: "String" } } }, headerCollectionPrefix: "x-ms-meta-" }, etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, leaseDuration: { serializedName: "x-ms-lease-duration", xmlName: "x-ms-lease-duration", type: { name: "Enum", allowedValues: ["infinite", "fixed"] } }, leaseState: { serializedName: "x-ms-lease-state", xmlName: "x-ms-lease-state", type: { name: "Enum", allowedValues: [ "available", "leased", "expired", "breaking", "broken" ] } }, leaseStatus: { serializedName: "x-ms-lease-status", xmlName: "x-ms-lease-status", type: { name: "Enum", allowedValues: ["locked", "unlocked"] } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, blobPublicAccess: { serializedName: "x-ms-blob-public-access", xmlName: "x-ms-blob-public-access", type: { name: "Enum", allowedValues: ["container", "blob"] } }, hasImmutabilityPolicy: { serializedName: "x-ms-has-immutability-policy", xmlName: "x-ms-has-immutability-policy", type: { name: "Boolean" } }, hasLegalHold: { serializedName: "x-ms-has-legal-hold", xmlName: "x-ms-has-legal-hold", type: { name: "Boolean" } }, defaultEncryptionScope: { serializedName: "x-ms-default-encryption-scope", xmlName: "x-ms-default-encryption-scope", type: { name: "String" } }, denyEncryptionScopeOverride: { serializedName: "x-ms-deny-encryption-scope-override", xmlName: "x-ms-deny-encryption-scope-override", type: { name: "Boolean" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerGetPropertiesExceptionHeaders = { serializedName: "Container_getPropertiesExceptionHeaders", type: { name: "Composite", className: "ContainerGetPropertiesExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerDeleteHeaders = { serializedName: "Container_deleteHeaders", type: { name: "Composite", className: "ContainerDeleteHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerDeleteExceptionHeaders = { serializedName: "Container_deleteExceptionHeaders", type: { name: "Composite", className: "ContainerDeleteExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerSetMetadataHeaders = { serializedName: "Container_setMetadataHeaders", type: { name: "Composite", className: "ContainerSetMetadataHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerSetMetadataExceptionHeaders = { serializedName: "Container_setMetadataExceptionHeaders", type: { name: "Composite", className: "ContainerSetMetadataExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerGetAccessPolicyHeaders = { serializedName: "Container_getAccessPolicyHeaders", type: { name: "Composite", className: "ContainerGetAccessPolicyHeaders", modelProperties: { blobPublicAccess: { serializedName: "x-ms-blob-public-access", xmlName: "x-ms-blob-public-access", type: { name: "Enum", allowedValues: ["container", "blob"] } }, etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerGetAccessPolicyExceptionHeaders = { serializedName: "Container_getAccessPolicyExceptionHeaders", type: { name: "Composite", className: "ContainerGetAccessPolicyExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerSetAccessPolicyHeaders = { serializedName: "Container_setAccessPolicyHeaders", type: { name: "Composite", className: "ContainerSetAccessPolicyHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerSetAccessPolicyExceptionHeaders = { serializedName: "Container_setAccessPolicyExceptionHeaders", type: { name: "Composite", className: "ContainerSetAccessPolicyExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerRestoreHeaders = { serializedName: "Container_restoreHeaders", type: { name: "Composite", className: "ContainerRestoreHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerRestoreExceptionHeaders = { serializedName: "Container_restoreExceptionHeaders", type: { name: "Composite", className: "ContainerRestoreExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerRenameHeaders = { serializedName: "Container_renameHeaders", type: { name: "Composite", className: "ContainerRenameHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerRenameExceptionHeaders = { serializedName: "Container_renameExceptionHeaders", type: { name: "Composite", className: "ContainerRenameExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerSubmitBatchHeaders = { serializedName: "Container_submitBatchHeaders", type: { name: "Composite", className: "ContainerSubmitBatchHeaders", modelProperties: { contentType: { serializedName: "content-type", xmlName: "content-type", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } } } } }; var ContainerSubmitBatchExceptionHeaders = { serializedName: "Container_submitBatchExceptionHeaders", type: { name: "Composite", className: "ContainerSubmitBatchExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerAcquireLeaseHeaders = { serializedName: "Container_acquireLeaseHeaders", type: { name: "Composite", className: "ContainerAcquireLeaseHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, leaseId: { serializedName: "x-ms-lease-id", xmlName: "x-ms-lease-id", type: { name: "String" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } } } } }; var ContainerAcquireLeaseExceptionHeaders = { serializedName: "Container_acquireLeaseExceptionHeaders", type: { name: "Composite", className: "ContainerAcquireLeaseExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerReleaseLeaseHeaders = { serializedName: "Container_releaseLeaseHeaders", type: { name: "Composite", className: "ContainerReleaseLeaseHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } } } } }; var ContainerReleaseLeaseExceptionHeaders = { serializedName: "Container_releaseLeaseExceptionHeaders", type: { name: "Composite", className: "ContainerReleaseLeaseExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerRenewLeaseHeaders = { serializedName: "Container_renewLeaseHeaders", type: { name: "Composite", className: "ContainerRenewLeaseHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, leaseId: { serializedName: "x-ms-lease-id", xmlName: "x-ms-lease-id", type: { name: "String" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } } } } }; var ContainerRenewLeaseExceptionHeaders = { serializedName: "Container_renewLeaseExceptionHeaders", type: { name: "Composite", className: "ContainerRenewLeaseExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerBreakLeaseHeaders = { serializedName: "Container_breakLeaseHeaders", type: { name: "Composite", className: "ContainerBreakLeaseHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, leaseTime: { serializedName: "x-ms-lease-time", xmlName: "x-ms-lease-time", type: { name: "Number" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } } } } }; var ContainerBreakLeaseExceptionHeaders = { serializedName: "Container_breakLeaseExceptionHeaders", type: { name: "Composite", className: "ContainerBreakLeaseExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerChangeLeaseHeaders = { serializedName: "Container_changeLeaseHeaders", type: { name: "Composite", className: "ContainerChangeLeaseHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, leaseId: { serializedName: "x-ms-lease-id", xmlName: "x-ms-lease-id", type: { name: "String" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } } } } }; var ContainerChangeLeaseExceptionHeaders = { serializedName: "Container_changeLeaseExceptionHeaders", type: { name: "Composite", className: "ContainerChangeLeaseExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerListBlobFlatSegmentHeaders = { serializedName: "Container_listBlobFlatSegmentHeaders", type: { name: "Composite", className: "ContainerListBlobFlatSegmentHeaders", modelProperties: { contentType: { serializedName: "content-type", xmlName: "content-type", type: { name: "String" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerListBlobFlatSegmentExceptionHeaders = { serializedName: "Container_listBlobFlatSegmentExceptionHeaders", type: { name: "Composite", className: "ContainerListBlobFlatSegmentExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerListBlobHierarchySegmentHeaders = { serializedName: "Container_listBlobHierarchySegmentHeaders", type: { name: "Composite", className: "ContainerListBlobHierarchySegmentHeaders", modelProperties: { contentType: { serializedName: "content-type", xmlName: "content-type", type: { name: "String" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerListBlobHierarchySegmentExceptionHeaders = { serializedName: "Container_listBlobHierarchySegmentExceptionHeaders", type: { name: "Composite", className: "ContainerListBlobHierarchySegmentExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var ContainerGetAccountInfoHeaders = { serializedName: "Container_getAccountInfoHeaders", type: { name: "Composite", className: "ContainerGetAccountInfoHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, skuName: { serializedName: "x-ms-sku-name", xmlName: "x-ms-sku-name", type: { name: "Enum", allowedValues: [ "Standard_LRS", "Standard_GRS", "Standard_RAGRS", "Standard_ZRS", "Premium_LRS" ] } }, accountKind: { serializedName: "x-ms-account-kind", xmlName: "x-ms-account-kind", type: { name: "Enum", allowedValues: [ "Storage", "BlobStorage", "StorageV2", "FileStorage", "BlockBlobStorage" ] } } } } }; var ContainerGetAccountInfoExceptionHeaders = { serializedName: "Container_getAccountInfoExceptionHeaders", type: { name: "Composite", className: "ContainerGetAccountInfoExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var DirectoryCreateHeaders = { serializedName: "Directory_createHeaders", type: { name: "Composite", className: "DirectoryCreateHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, contentLength: { serializedName: "content-length", xmlName: "content-length", type: { name: "Number" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } } } } }; var DirectoryCreateExceptionHeaders = { serializedName: "Directory_createExceptionHeaders", type: { name: "Composite", className: "DirectoryCreateExceptionHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } } } } }; var DirectoryRenameHeaders = { serializedName: "Directory_renameHeaders", type: { name: "Composite", className: "DirectoryRenameHeaders", modelProperties: { marker: { serializedName: "x-ms-continuation", xmlName: "x-ms-continuation", type: { name: "String" } }, etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, contentLength: { serializedName: "content-length", xmlName: "content-length", type: { name: "Number" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } } } } }; var DirectoryRenameExceptionHeaders = { serializedName: "Directory_renameExceptionHeaders", type: { name: "Composite", className: "DirectoryRenameExceptionHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } } } } }; var DirectoryDeleteHeaders = { serializedName: "Directory_deleteHeaders", type: { name: "Composite", className: "DirectoryDeleteHeaders", modelProperties: { marker: { serializedName: "x-ms-continuation", xmlName: "x-ms-continuation", type: { name: "String" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } } } } }; var DirectoryDeleteExceptionHeaders = { serializedName: "Directory_deleteExceptionHeaders", type: { name: "Composite", className: "DirectoryDeleteExceptionHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } } } } }; var DirectorySetAccessControlHeaders = { serializedName: "Directory_setAccessControlHeaders", type: { name: "Composite", className: "DirectorySetAccessControlHeaders", modelProperties: { date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } } } } }; var DirectorySetAccessControlExceptionHeaders = { serializedName: "Directory_setAccessControlExceptionHeaders", type: { name: "Composite", className: "DirectorySetAccessControlExceptionHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } } } } }; var DirectoryGetAccessControlHeaders = { serializedName: "Directory_getAccessControlHeaders", type: { name: "Composite", className: "DirectoryGetAccessControlHeaders", modelProperties: { date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, xMsOwner: { serializedName: "x-ms-owner", xmlName: "x-ms-owner", type: { name: "String" } }, xMsGroup: { serializedName: "x-ms-group", xmlName: "x-ms-group", type: { name: "String" } }, xMsPermissions: { serializedName: "x-ms-permissions", xmlName: "x-ms-permissions", type: { name: "String" } }, xMsAcl: { serializedName: "x-ms-acl", xmlName: "x-ms-acl", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } } } } }; var DirectoryGetAccessControlExceptionHeaders = { serializedName: "Directory_getAccessControlExceptionHeaders", type: { name: "Composite", className: "DirectoryGetAccessControlExceptionHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } } } } }; var BlobDownloadHeaders = { serializedName: "Blob_downloadHeaders", type: { name: "Composite", className: "BlobDownloadHeaders", modelProperties: { lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, metadata: { serializedName: "x-ms-meta", xmlName: "x-ms-meta", type: { name: "Dictionary", value: { type: { name: "String" } } }, headerCollectionPrefix: "x-ms-meta-" }, objectReplicationPolicyId: { serializedName: "x-ms-or-policy-id", xmlName: "x-ms-or-policy-id", type: { name: "String" } }, objectReplicationRules: { serializedName: "x-ms-or", xmlName: "x-ms-or", type: { name: "Dictionary", value: { type: { name: "String" } } }, headerCollectionPrefix: "x-ms-or-" }, contentLength: { serializedName: "content-length", xmlName: "content-length", type: { name: "Number" } }, contentType: { serializedName: "content-type", xmlName: "content-type", type: { name: "String" } }, contentRange: { serializedName: "content-range", xmlName: "content-range", type: { name: "String" } }, etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, contentMD5: { serializedName: "content-md5", xmlName: "content-md5", type: { name: "ByteArray" } }, contentEncoding: { serializedName: "content-encoding", xmlName: "content-encoding", type: { name: "String" } }, cacheControl: { serializedName: "cache-control", xmlName: "cache-control", type: { name: "String" } }, contentDisposition: { serializedName: "content-disposition", xmlName: "content-disposition", type: { name: "String" } }, contentLanguage: { serializedName: "content-language", xmlName: "content-language", type: { name: "String" } }, blobSequenceNumber: { serializedName: "x-ms-blob-sequence-number", xmlName: "x-ms-blob-sequence-number", type: { name: "Number" } }, blobType: { serializedName: "x-ms-blob-type", xmlName: "x-ms-blob-type", type: { name: "Enum", allowedValues: ["BlockBlob", "PageBlob", "AppendBlob"] } }, copyCompletedOn: { serializedName: "x-ms-copy-completion-time", xmlName: "x-ms-copy-completion-time", type: { name: "DateTimeRfc1123" } }, copyStatusDescription: { serializedName: "x-ms-copy-status-description", xmlName: "x-ms-copy-status-description", type: { name: "String" } }, copyId: { serializedName: "x-ms-copy-id", xmlName: "x-ms-copy-id", type: { name: "String" } }, copyProgress: { serializedName: "x-ms-copy-progress", xmlName: "x-ms-copy-progress", type: { name: "String" } }, copySource: { serializedName: "x-ms-copy-source", xmlName: "x-ms-copy-source", type: { name: "String" } }, copyStatus: { serializedName: "x-ms-copy-status", xmlName: "x-ms-copy-status", type: { name: "Enum", allowedValues: ["pending", "success", "aborted", "failed"] } }, leaseDuration: { serializedName: "x-ms-lease-duration", xmlName: "x-ms-lease-duration", type: { name: "Enum", allowedValues: ["infinite", "fixed"] } }, leaseState: { serializedName: "x-ms-lease-state", xmlName: "x-ms-lease-state", type: { name: "Enum", allowedValues: [ "available", "leased", "expired", "breaking", "broken" ] } }, leaseStatus: { serializedName: "x-ms-lease-status", xmlName: "x-ms-lease-status", type: { name: "Enum", allowedValues: ["locked", "unlocked"] } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, versionId: { serializedName: "x-ms-version-id", xmlName: "x-ms-version-id", type: { name: "String" } }, isCurrentVersion: { serializedName: "x-ms-is-current-version", xmlName: "x-ms-is-current-version", type: { name: "Boolean" } }, acceptRanges: { serializedName: "accept-ranges", xmlName: "accept-ranges", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, blobCommittedBlockCount: { serializedName: "x-ms-blob-committed-block-count", xmlName: "x-ms-blob-committed-block-count", type: { name: "Number" } }, isServerEncrypted: { serializedName: "x-ms-server-encrypted", xmlName: "x-ms-server-encrypted", type: { name: "Boolean" } }, encryptionKeySha256: { serializedName: "x-ms-encryption-key-sha256", xmlName: "x-ms-encryption-key-sha256", type: { name: "String" } }, encryptionScope: { serializedName: "x-ms-encryption-scope", xmlName: "x-ms-encryption-scope", type: { name: "String" } }, blobContentMD5: { serializedName: "x-ms-blob-content-md5", xmlName: "x-ms-blob-content-md5", type: { name: "ByteArray" } }, tagCount: { serializedName: "x-ms-tag-count", xmlName: "x-ms-tag-count", type: { name: "Number" } }, isSealed: { serializedName: "x-ms-blob-sealed", xmlName: "x-ms-blob-sealed", type: { name: "Boolean" } }, lastAccessed: { serializedName: "x-ms-last-access-time", xmlName: "x-ms-last-access-time", type: { name: "DateTimeRfc1123" } }, contentCrc64: { serializedName: "x-ms-content-crc64", xmlName: "x-ms-content-crc64", type: { name: "ByteArray" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobDownloadExceptionHeaders = { serializedName: "Blob_downloadExceptionHeaders", type: { name: "Composite", className: "BlobDownloadExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobGetPropertiesHeaders = { serializedName: "Blob_getPropertiesHeaders", type: { name: "Composite", className: "BlobGetPropertiesHeaders", modelProperties: { lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, createdOn: { serializedName: "x-ms-creation-time", xmlName: "x-ms-creation-time", type: { name: "DateTimeRfc1123" } }, metadata: { serializedName: "x-ms-meta", xmlName: "x-ms-meta", type: { name: "Dictionary", value: { type: { name: "String" } } }, headerCollectionPrefix: "x-ms-meta-" }, objectReplicationPolicyId: { serializedName: "x-ms-or-policy-id", xmlName: "x-ms-or-policy-id", type: { name: "String" } }, objectReplicationRules: { serializedName: "x-ms-or", xmlName: "x-ms-or", type: { name: "Dictionary", value: { type: { name: "String" } } }, headerCollectionPrefix: "x-ms-or-" }, blobType: { serializedName: "x-ms-blob-type", xmlName: "x-ms-blob-type", type: { name: "Enum", allowedValues: ["BlockBlob", "PageBlob", "AppendBlob"] } }, copyCompletedOn: { serializedName: "x-ms-copy-completion-time", xmlName: "x-ms-copy-completion-time", type: { name: "DateTimeRfc1123" } }, copyStatusDescription: { serializedName: "x-ms-copy-status-description", xmlName: "x-ms-copy-status-description", type: { name: "String" } }, copyId: { serializedName: "x-ms-copy-id", xmlName: "x-ms-copy-id", type: { name: "String" } }, copyProgress: { serializedName: "x-ms-copy-progress", xmlName: "x-ms-copy-progress", type: { name: "String" } }, copySource: { serializedName: "x-ms-copy-source", xmlName: "x-ms-copy-source", type: { name: "String" } }, copyStatus: { serializedName: "x-ms-copy-status", xmlName: "x-ms-copy-status", type: { name: "Enum", allowedValues: ["pending", "success", "aborted", "failed"] } }, isIncrementalCopy: { serializedName: "x-ms-incremental-copy", xmlName: "x-ms-incremental-copy", type: { name: "Boolean" } }, destinationSnapshot: { serializedName: "x-ms-copy-destination-snapshot", xmlName: "x-ms-copy-destination-snapshot", type: { name: "String" } }, leaseDuration: { serializedName: "x-ms-lease-duration", xmlName: "x-ms-lease-duration", type: { name: "Enum", allowedValues: ["infinite", "fixed"] } }, leaseState: { serializedName: "x-ms-lease-state", xmlName: "x-ms-lease-state", type: { name: "Enum", allowedValues: [ "available", "leased", "expired", "breaking", "broken" ] } }, leaseStatus: { serializedName: "x-ms-lease-status", xmlName: "x-ms-lease-status", type: { name: "Enum", allowedValues: ["locked", "unlocked"] } }, contentLength: { serializedName: "content-length", xmlName: "content-length", type: { name: "Number" } }, contentType: { serializedName: "content-type", xmlName: "content-type", type: { name: "String" } }, etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, contentMD5: { serializedName: "content-md5", xmlName: "content-md5", type: { name: "ByteArray" } }, contentEncoding: { serializedName: "content-encoding", xmlName: "content-encoding", type: { name: "String" } }, contentDisposition: { serializedName: "content-disposition", xmlName: "content-disposition", type: { name: "String" } }, contentLanguage: { serializedName: "content-language", xmlName: "content-language", type: { name: "String" } }, cacheControl: { serializedName: "cache-control", xmlName: "cache-control", type: { name: "String" } }, blobSequenceNumber: { serializedName: "x-ms-blob-sequence-number", xmlName: "x-ms-blob-sequence-number", type: { name: "Number" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, acceptRanges: { serializedName: "accept-ranges", xmlName: "accept-ranges", type: { name: "String" } }, blobCommittedBlockCount: { serializedName: "x-ms-blob-committed-block-count", xmlName: "x-ms-blob-committed-block-count", type: { name: "Number" } }, isServerEncrypted: { serializedName: "x-ms-server-encrypted", xmlName: "x-ms-server-encrypted", type: { name: "Boolean" } }, encryptionKeySha256: { serializedName: "x-ms-encryption-key-sha256", xmlName: "x-ms-encryption-key-sha256", type: { name: "String" } }, encryptionScope: { serializedName: "x-ms-encryption-scope", xmlName: "x-ms-encryption-scope", type: { name: "String" } }, accessTier: { serializedName: "x-ms-access-tier", xmlName: "x-ms-access-tier", type: { name: "String" } }, accessTierInferred: { serializedName: "x-ms-access-tier-inferred", xmlName: "x-ms-access-tier-inferred", type: { name: "Boolean" } }, archiveStatus: { serializedName: "x-ms-archive-status", xmlName: "x-ms-archive-status", type: { name: "String" } }, accessTierChangedOn: { serializedName: "x-ms-access-tier-change-time", xmlName: "x-ms-access-tier-change-time", type: { name: "DateTimeRfc1123" } }, versionId: { serializedName: "x-ms-version-id", xmlName: "x-ms-version-id", type: { name: "String" } }, isCurrentVersion: { serializedName: "x-ms-is-current-version", xmlName: "x-ms-is-current-version", type: { name: "Boolean" } }, tagCount: { serializedName: "x-ms-tag-count", xmlName: "x-ms-tag-count", type: { name: "Number" } }, expiresOn: { serializedName: "x-ms-expiry-time", xmlName: "x-ms-expiry-time", type: { name: "DateTimeRfc1123" } }, isSealed: { serializedName: "x-ms-blob-sealed", xmlName: "x-ms-blob-sealed", type: { name: "Boolean" } }, rehydratePriority: { serializedName: "x-ms-rehydrate-priority", xmlName: "x-ms-rehydrate-priority", type: { name: "Enum", allowedValues: ["High", "Standard"] } }, lastAccessed: { serializedName: "x-ms-last-access-time", xmlName: "x-ms-last-access-time", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobGetPropertiesExceptionHeaders = { serializedName: "Blob_getPropertiesExceptionHeaders", type: { name: "Composite", className: "BlobGetPropertiesExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobDeleteHeaders = { serializedName: "Blob_deleteHeaders", type: { name: "Composite", className: "BlobDeleteHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobDeleteExceptionHeaders = { serializedName: "Blob_deleteExceptionHeaders", type: { name: "Composite", className: "BlobDeleteExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobSetAccessControlHeaders = { serializedName: "Blob_setAccessControlHeaders", type: { name: "Composite", className: "BlobSetAccessControlHeaders", modelProperties: { date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } } } } }; var BlobSetAccessControlExceptionHeaders = { serializedName: "Blob_setAccessControlExceptionHeaders", type: { name: "Composite", className: "BlobSetAccessControlExceptionHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } } } } }; var BlobGetAccessControlHeaders = { serializedName: "Blob_getAccessControlHeaders", type: { name: "Composite", className: "BlobGetAccessControlHeaders", modelProperties: { date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, xMsOwner: { serializedName: "x-ms-owner", xmlName: "x-ms-owner", type: { name: "String" } }, xMsGroup: { serializedName: "x-ms-group", xmlName: "x-ms-group", type: { name: "String" } }, xMsPermissions: { serializedName: "x-ms-permissions", xmlName: "x-ms-permissions", type: { name: "String" } }, xMsAcl: { serializedName: "x-ms-acl", xmlName: "x-ms-acl", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } } } } }; var BlobGetAccessControlExceptionHeaders = { serializedName: "Blob_getAccessControlExceptionHeaders", type: { name: "Composite", className: "BlobGetAccessControlExceptionHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } } } } }; var BlobRenameHeaders = { serializedName: "Blob_renameHeaders", type: { name: "Composite", className: "BlobRenameHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, contentLength: { serializedName: "content-length", xmlName: "content-length", type: { name: "Number" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } } } } }; var BlobRenameExceptionHeaders = { serializedName: "Blob_renameExceptionHeaders", type: { name: "Composite", className: "BlobRenameExceptionHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } } } } }; var BlobUndeleteHeaders = { serializedName: "Blob_undeleteHeaders", type: { name: "Composite", className: "BlobUndeleteHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobUndeleteExceptionHeaders = { serializedName: "Blob_undeleteExceptionHeaders", type: { name: "Composite", className: "BlobUndeleteExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobSetExpiryHeaders = { serializedName: "Blob_setExpiryHeaders", type: { name: "Composite", className: "BlobSetExpiryHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } } } } }; var BlobSetExpiryExceptionHeaders = { serializedName: "Blob_setExpiryExceptionHeaders", type: { name: "Composite", className: "BlobSetExpiryExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobSetHttpHeadersHeaders = { serializedName: "Blob_setHttpHeadersHeaders", type: { name: "Composite", className: "BlobSetHttpHeadersHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, blobSequenceNumber: { serializedName: "x-ms-blob-sequence-number", xmlName: "x-ms-blob-sequence-number", type: { name: "Number" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobSetHttpHeadersExceptionHeaders = { serializedName: "Blob_setHttpHeadersExceptionHeaders", type: { name: "Composite", className: "BlobSetHttpHeadersExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobSetMetadataHeaders = { serializedName: "Blob_setMetadataHeaders", type: { name: "Composite", className: "BlobSetMetadataHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, versionId: { serializedName: "x-ms-version-id", xmlName: "x-ms-version-id", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, isServerEncrypted: { serializedName: "x-ms-request-server-encrypted", xmlName: "x-ms-request-server-encrypted", type: { name: "Boolean" } }, encryptionKeySha256: { serializedName: "x-ms-encryption-key-sha256", xmlName: "x-ms-encryption-key-sha256", type: { name: "String" } }, encryptionScope: { serializedName: "x-ms-encryption-scope", xmlName: "x-ms-encryption-scope", type: { name: "String" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobSetMetadataExceptionHeaders = { serializedName: "Blob_setMetadataExceptionHeaders", type: { name: "Composite", className: "BlobSetMetadataExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobAcquireLeaseHeaders = { serializedName: "Blob_acquireLeaseHeaders", type: { name: "Composite", className: "BlobAcquireLeaseHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, leaseId: { serializedName: "x-ms-lease-id", xmlName: "x-ms-lease-id", type: { name: "String" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } } } } }; var BlobAcquireLeaseExceptionHeaders = { serializedName: "Blob_acquireLeaseExceptionHeaders", type: { name: "Composite", className: "BlobAcquireLeaseExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobReleaseLeaseHeaders = { serializedName: "Blob_releaseLeaseHeaders", type: { name: "Composite", className: "BlobReleaseLeaseHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } } } } }; var BlobReleaseLeaseExceptionHeaders = { serializedName: "Blob_releaseLeaseExceptionHeaders", type: { name: "Composite", className: "BlobReleaseLeaseExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobRenewLeaseHeaders = { serializedName: "Blob_renewLeaseHeaders", type: { name: "Composite", className: "BlobRenewLeaseHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, leaseId: { serializedName: "x-ms-lease-id", xmlName: "x-ms-lease-id", type: { name: "String" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } } } } }; var BlobRenewLeaseExceptionHeaders = { serializedName: "Blob_renewLeaseExceptionHeaders", type: { name: "Composite", className: "BlobRenewLeaseExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobChangeLeaseHeaders = { serializedName: "Blob_changeLeaseHeaders", type: { name: "Composite", className: "BlobChangeLeaseHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, leaseId: { serializedName: "x-ms-lease-id", xmlName: "x-ms-lease-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } } } } }; var BlobChangeLeaseExceptionHeaders = { serializedName: "Blob_changeLeaseExceptionHeaders", type: { name: "Composite", className: "BlobChangeLeaseExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobBreakLeaseHeaders = { serializedName: "Blob_breakLeaseHeaders", type: { name: "Composite", className: "BlobBreakLeaseHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, leaseTime: { serializedName: "x-ms-lease-time", xmlName: "x-ms-lease-time", type: { name: "Number" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } } } } }; var BlobBreakLeaseExceptionHeaders = { serializedName: "Blob_breakLeaseExceptionHeaders", type: { name: "Composite", className: "BlobBreakLeaseExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobCreateSnapshotHeaders = { serializedName: "Blob_createSnapshotHeaders", type: { name: "Composite", className: "BlobCreateSnapshotHeaders", modelProperties: { snapshot: { serializedName: "x-ms-snapshot", xmlName: "x-ms-snapshot", type: { name: "String" } }, etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, versionId: { serializedName: "x-ms-version-id", xmlName: "x-ms-version-id", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, isServerEncrypted: { serializedName: "x-ms-request-server-encrypted", xmlName: "x-ms-request-server-encrypted", type: { name: "Boolean" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobCreateSnapshotExceptionHeaders = { serializedName: "Blob_createSnapshotExceptionHeaders", type: { name: "Composite", className: "BlobCreateSnapshotExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobStartCopyFromURLHeaders = { serializedName: "Blob_startCopyFromURLHeaders", type: { name: "Composite", className: "BlobStartCopyFromURLHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, versionId: { serializedName: "x-ms-version-id", xmlName: "x-ms-version-id", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, copyId: { serializedName: "x-ms-copy-id", xmlName: "x-ms-copy-id", type: { name: "String" } }, copyStatus: { serializedName: "x-ms-copy-status", xmlName: "x-ms-copy-status", type: { name: "Enum", allowedValues: ["pending", "success", "aborted", "failed"] } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobStartCopyFromURLExceptionHeaders = { serializedName: "Blob_startCopyFromURLExceptionHeaders", type: { name: "Composite", className: "BlobStartCopyFromURLExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobCopyFromURLHeaders = { serializedName: "Blob_copyFromURLHeaders", type: { name: "Composite", className: "BlobCopyFromURLHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, versionId: { serializedName: "x-ms-version-id", xmlName: "x-ms-version-id", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, copyId: { serializedName: "x-ms-copy-id", xmlName: "x-ms-copy-id", type: { name: "String" } }, copyStatus: { defaultValue: "success", isConstant: true, serializedName: "x-ms-copy-status", type: { name: "String" } }, contentMD5: { serializedName: "content-md5", xmlName: "content-md5", type: { name: "ByteArray" } }, xMsContentCrc64: { serializedName: "x-ms-content-crc64", xmlName: "x-ms-content-crc64", type: { name: "ByteArray" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobCopyFromURLExceptionHeaders = { serializedName: "Blob_copyFromURLExceptionHeaders", type: { name: "Composite", className: "BlobCopyFromURLExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobAbortCopyFromURLHeaders = { serializedName: "Blob_abortCopyFromURLHeaders", type: { name: "Composite", className: "BlobAbortCopyFromURLHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobAbortCopyFromURLExceptionHeaders = { serializedName: "Blob_abortCopyFromURLExceptionHeaders", type: { name: "Composite", className: "BlobAbortCopyFromURLExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobSetTierHeaders = { serializedName: "Blob_setTierHeaders", type: { name: "Composite", className: "BlobSetTierHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobSetTierExceptionHeaders = { serializedName: "Blob_setTierExceptionHeaders", type: { name: "Composite", className: "BlobSetTierExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobGetAccountInfoHeaders = { serializedName: "Blob_getAccountInfoHeaders", type: { name: "Composite", className: "BlobGetAccountInfoHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, skuName: { serializedName: "x-ms-sku-name", xmlName: "x-ms-sku-name", type: { name: "Enum", allowedValues: [ "Standard_LRS", "Standard_GRS", "Standard_RAGRS", "Standard_ZRS", "Premium_LRS" ] } }, accountKind: { serializedName: "x-ms-account-kind", xmlName: "x-ms-account-kind", type: { name: "Enum", allowedValues: [ "Storage", "BlobStorage", "StorageV2", "FileStorage", "BlockBlobStorage" ] } } } } }; var BlobGetAccountInfoExceptionHeaders = { serializedName: "Blob_getAccountInfoExceptionHeaders", type: { name: "Composite", className: "BlobGetAccountInfoExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobQueryHeaders = { serializedName: "Blob_queryHeaders", type: { name: "Composite", className: "BlobQueryHeaders", modelProperties: { lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, metadata: { serializedName: "x-ms-meta", xmlName: "x-ms-meta", type: { name: "Dictionary", value: { type: { name: "String" } } } }, contentLength: { serializedName: "content-length", xmlName: "content-length", type: { name: "Number" } }, contentType: { serializedName: "content-type", xmlName: "content-type", type: { name: "String" } }, contentRange: { serializedName: "content-range", xmlName: "content-range", type: { name: "String" } }, etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, contentMD5: { serializedName: "content-md5", xmlName: "content-md5", type: { name: "ByteArray" } }, contentEncoding: { serializedName: "content-encoding", xmlName: "content-encoding", type: { name: "String" } }, cacheControl: { serializedName: "cache-control", xmlName: "cache-control", type: { name: "String" } }, contentDisposition: { serializedName: "content-disposition", xmlName: "content-disposition", type: { name: "String" } }, contentLanguage: { serializedName: "content-language", xmlName: "content-language", type: { name: "String" } }, blobSequenceNumber: { serializedName: "x-ms-blob-sequence-number", xmlName: "x-ms-blob-sequence-number", type: { name: "Number" } }, blobType: { serializedName: "x-ms-blob-type", xmlName: "x-ms-blob-type", type: { name: "Enum", allowedValues: ["BlockBlob", "PageBlob", "AppendBlob"] } }, copyCompletionTime: { serializedName: "x-ms-copy-completion-time", xmlName: "x-ms-copy-completion-time", type: { name: "DateTimeRfc1123" } }, copyStatusDescription: { serializedName: "x-ms-copy-status-description", xmlName: "x-ms-copy-status-description", type: { name: "String" } }, copyId: { serializedName: "x-ms-copy-id", xmlName: "x-ms-copy-id", type: { name: "String" } }, copyProgress: { serializedName: "x-ms-copy-progress", xmlName: "x-ms-copy-progress", type: { name: "String" } }, copySource: { serializedName: "x-ms-copy-source", xmlName: "x-ms-copy-source", type: { name: "String" } }, copyStatus: { serializedName: "x-ms-copy-status", xmlName: "x-ms-copy-status", type: { name: "Enum", allowedValues: ["pending", "success", "aborted", "failed"] } }, leaseDuration: { serializedName: "x-ms-lease-duration", xmlName: "x-ms-lease-duration", type: { name: "Enum", allowedValues: ["infinite", "fixed"] } }, leaseState: { serializedName: "x-ms-lease-state", xmlName: "x-ms-lease-state", type: { name: "Enum", allowedValues: [ "available", "leased", "expired", "breaking", "broken" ] } }, leaseStatus: { serializedName: "x-ms-lease-status", xmlName: "x-ms-lease-status", type: { name: "Enum", allowedValues: ["locked", "unlocked"] } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, acceptRanges: { serializedName: "accept-ranges", xmlName: "accept-ranges", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, blobCommittedBlockCount: { serializedName: "x-ms-blob-committed-block-count", xmlName: "x-ms-blob-committed-block-count", type: { name: "Number" } }, isServerEncrypted: { serializedName: "x-ms-server-encrypted", xmlName: "x-ms-server-encrypted", type: { name: "Boolean" } }, encryptionKeySha256: { serializedName: "x-ms-encryption-key-sha256", xmlName: "x-ms-encryption-key-sha256", type: { name: "String" } }, encryptionScope: { serializedName: "x-ms-encryption-scope", xmlName: "x-ms-encryption-scope", type: { name: "String" } }, blobContentMD5: { serializedName: "x-ms-blob-content-md5", xmlName: "x-ms-blob-content-md5", type: { name: "ByteArray" } }, contentCrc64: { serializedName: "x-ms-content-crc64", xmlName: "x-ms-content-crc64", type: { name: "ByteArray" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobQueryExceptionHeaders = { serializedName: "Blob_queryExceptionHeaders", type: { name: "Composite", className: "BlobQueryExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobGetTagsHeaders = { serializedName: "Blob_getTagsHeaders", type: { name: "Composite", className: "BlobGetTagsHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobGetTagsExceptionHeaders = { serializedName: "Blob_getTagsExceptionHeaders", type: { name: "Composite", className: "BlobGetTagsExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobSetTagsHeaders = { serializedName: "Blob_setTagsHeaders", type: { name: "Composite", className: "BlobSetTagsHeaders", modelProperties: { clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlobSetTagsExceptionHeaders = { serializedName: "Blob_setTagsExceptionHeaders", type: { name: "Composite", className: "BlobSetTagsExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var PageBlobCreateHeaders = { serializedName: "PageBlob_createHeaders", type: { name: "Composite", className: "PageBlobCreateHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, contentMD5: { serializedName: "content-md5", xmlName: "content-md5", type: { name: "ByteArray" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, versionId: { serializedName: "x-ms-version-id", xmlName: "x-ms-version-id", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, isServerEncrypted: { serializedName: "x-ms-request-server-encrypted", xmlName: "x-ms-request-server-encrypted", type: { name: "Boolean" } }, encryptionKeySha256: { serializedName: "x-ms-encryption-key-sha256", xmlName: "x-ms-encryption-key-sha256", type: { name: "String" } }, encryptionScope: { serializedName: "x-ms-encryption-scope", xmlName: "x-ms-encryption-scope", type: { name: "String" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var PageBlobCreateExceptionHeaders = { serializedName: "PageBlob_createExceptionHeaders", type: { name: "Composite", className: "PageBlobCreateExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var PageBlobUploadPagesHeaders = { serializedName: "PageBlob_uploadPagesHeaders", type: { name: "Composite", className: "PageBlobUploadPagesHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, contentMD5: { serializedName: "content-md5", xmlName: "content-md5", type: { name: "ByteArray" } }, xMsContentCrc64: { serializedName: "x-ms-content-crc64", xmlName: "x-ms-content-crc64", type: { name: "ByteArray" } }, blobSequenceNumber: { serializedName: "x-ms-blob-sequence-number", xmlName: "x-ms-blob-sequence-number", type: { name: "Number" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, isServerEncrypted: { serializedName: "x-ms-request-server-encrypted", xmlName: "x-ms-request-server-encrypted", type: { name: "Boolean" } }, encryptionKeySha256: { serializedName: "x-ms-encryption-key-sha256", xmlName: "x-ms-encryption-key-sha256", type: { name: "String" } }, encryptionScope: { serializedName: "x-ms-encryption-scope", xmlName: "x-ms-encryption-scope", type: { name: "String" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var PageBlobUploadPagesExceptionHeaders = { serializedName: "PageBlob_uploadPagesExceptionHeaders", type: { name: "Composite", className: "PageBlobUploadPagesExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var PageBlobClearPagesHeaders = { serializedName: "PageBlob_clearPagesHeaders", type: { name: "Composite", className: "PageBlobClearPagesHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, contentMD5: { serializedName: "content-md5", xmlName: "content-md5", type: { name: "ByteArray" } }, xMsContentCrc64: { serializedName: "x-ms-content-crc64", xmlName: "x-ms-content-crc64", type: { name: "ByteArray" } }, blobSequenceNumber: { serializedName: "x-ms-blob-sequence-number", xmlName: "x-ms-blob-sequence-number", type: { name: "Number" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var PageBlobClearPagesExceptionHeaders = { serializedName: "PageBlob_clearPagesExceptionHeaders", type: { name: "Composite", className: "PageBlobClearPagesExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var PageBlobUploadPagesFromURLHeaders = { serializedName: "PageBlob_uploadPagesFromURLHeaders", type: { name: "Composite", className: "PageBlobUploadPagesFromURLHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, contentMD5: { serializedName: "content-md5", xmlName: "content-md5", type: { name: "ByteArray" } }, xMsContentCrc64: { serializedName: "x-ms-content-crc64", xmlName: "x-ms-content-crc64", type: { name: "ByteArray" } }, blobSequenceNumber: { serializedName: "x-ms-blob-sequence-number", xmlName: "x-ms-blob-sequence-number", type: { name: "Number" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, isServerEncrypted: { serializedName: "x-ms-request-server-encrypted", xmlName: "x-ms-request-server-encrypted", type: { name: "Boolean" } }, encryptionKeySha256: { serializedName: "x-ms-encryption-key-sha256", xmlName: "x-ms-encryption-key-sha256", type: { name: "String" } }, encryptionScope: { serializedName: "x-ms-encryption-scope", xmlName: "x-ms-encryption-scope", type: { name: "String" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var PageBlobUploadPagesFromURLExceptionHeaders = { serializedName: "PageBlob_uploadPagesFromURLExceptionHeaders", type: { name: "Composite", className: "PageBlobUploadPagesFromURLExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var PageBlobGetPageRangesHeaders = { serializedName: "PageBlob_getPageRangesHeaders", type: { name: "Composite", className: "PageBlobGetPageRangesHeaders", modelProperties: { lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, blobContentLength: { serializedName: "x-ms-blob-content-length", xmlName: "x-ms-blob-content-length", type: { name: "Number" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var PageBlobGetPageRangesExceptionHeaders = { serializedName: "PageBlob_getPageRangesExceptionHeaders", type: { name: "Composite", className: "PageBlobGetPageRangesExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var PageBlobGetPageRangesDiffHeaders = { serializedName: "PageBlob_getPageRangesDiffHeaders", type: { name: "Composite", className: "PageBlobGetPageRangesDiffHeaders", modelProperties: { lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, blobContentLength: { serializedName: "x-ms-blob-content-length", xmlName: "x-ms-blob-content-length", type: { name: "Number" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var PageBlobGetPageRangesDiffExceptionHeaders = { serializedName: "PageBlob_getPageRangesDiffExceptionHeaders", type: { name: "Composite", className: "PageBlobGetPageRangesDiffExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var PageBlobResizeHeaders = { serializedName: "PageBlob_resizeHeaders", type: { name: "Composite", className: "PageBlobResizeHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, blobSequenceNumber: { serializedName: "x-ms-blob-sequence-number", xmlName: "x-ms-blob-sequence-number", type: { name: "Number" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var PageBlobResizeExceptionHeaders = { serializedName: "PageBlob_resizeExceptionHeaders", type: { name: "Composite", className: "PageBlobResizeExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var PageBlobUpdateSequenceNumberHeaders = { serializedName: "PageBlob_updateSequenceNumberHeaders", type: { name: "Composite", className: "PageBlobUpdateSequenceNumberHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, blobSequenceNumber: { serializedName: "x-ms-blob-sequence-number", xmlName: "x-ms-blob-sequence-number", type: { name: "Number" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var PageBlobUpdateSequenceNumberExceptionHeaders = { serializedName: "PageBlob_updateSequenceNumberExceptionHeaders", type: { name: "Composite", className: "PageBlobUpdateSequenceNumberExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var PageBlobCopyIncrementalHeaders = { serializedName: "PageBlob_copyIncrementalHeaders", type: { name: "Composite", className: "PageBlobCopyIncrementalHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, copyId: { serializedName: "x-ms-copy-id", xmlName: "x-ms-copy-id", type: { name: "String" } }, copyStatus: { serializedName: "x-ms-copy-status", xmlName: "x-ms-copy-status", type: { name: "Enum", allowedValues: ["pending", "success", "aborted", "failed"] } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var PageBlobCopyIncrementalExceptionHeaders = { serializedName: "PageBlob_copyIncrementalExceptionHeaders", type: { name: "Composite", className: "PageBlobCopyIncrementalExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var AppendBlobCreateHeaders = { serializedName: "AppendBlob_createHeaders", type: { name: "Composite", className: "AppendBlobCreateHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, contentMD5: { serializedName: "content-md5", xmlName: "content-md5", type: { name: "ByteArray" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, versionId: { serializedName: "x-ms-version-id", xmlName: "x-ms-version-id", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, isServerEncrypted: { serializedName: "x-ms-request-server-encrypted", xmlName: "x-ms-request-server-encrypted", type: { name: "Boolean" } }, encryptionKeySha256: { serializedName: "x-ms-encryption-key-sha256", xmlName: "x-ms-encryption-key-sha256", type: { name: "String" } }, encryptionScope: { serializedName: "x-ms-encryption-scope", xmlName: "x-ms-encryption-scope", type: { name: "String" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var AppendBlobCreateExceptionHeaders = { serializedName: "AppendBlob_createExceptionHeaders", type: { name: "Composite", className: "AppendBlobCreateExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var AppendBlobAppendBlockHeaders = { serializedName: "AppendBlob_appendBlockHeaders", type: { name: "Composite", className: "AppendBlobAppendBlockHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, contentMD5: { serializedName: "content-md5", xmlName: "content-md5", type: { name: "ByteArray" } }, xMsContentCrc64: { serializedName: "x-ms-content-crc64", xmlName: "x-ms-content-crc64", type: { name: "ByteArray" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, blobAppendOffset: { serializedName: "x-ms-blob-append-offset", xmlName: "x-ms-blob-append-offset", type: { name: "String" } }, blobCommittedBlockCount: { serializedName: "x-ms-blob-committed-block-count", xmlName: "x-ms-blob-committed-block-count", type: { name: "Number" } }, isServerEncrypted: { serializedName: "x-ms-request-server-encrypted", xmlName: "x-ms-request-server-encrypted", type: { name: "Boolean" } }, encryptionKeySha256: { serializedName: "x-ms-encryption-key-sha256", xmlName: "x-ms-encryption-key-sha256", type: { name: "String" } }, encryptionScope: { serializedName: "x-ms-encryption-scope", xmlName: "x-ms-encryption-scope", type: { name: "String" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var AppendBlobAppendBlockExceptionHeaders = { serializedName: "AppendBlob_appendBlockExceptionHeaders", type: { name: "Composite", className: "AppendBlobAppendBlockExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var AppendBlobAppendBlockFromUrlHeaders = { serializedName: "AppendBlob_appendBlockFromUrlHeaders", type: { name: "Composite", className: "AppendBlobAppendBlockFromUrlHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, contentMD5: { serializedName: "content-md5", xmlName: "content-md5", type: { name: "ByteArray" } }, xMsContentCrc64: { serializedName: "x-ms-content-crc64", xmlName: "x-ms-content-crc64", type: { name: "ByteArray" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, blobAppendOffset: { serializedName: "x-ms-blob-append-offset", xmlName: "x-ms-blob-append-offset", type: { name: "String" } }, blobCommittedBlockCount: { serializedName: "x-ms-blob-committed-block-count", xmlName: "x-ms-blob-committed-block-count", type: { name: "Number" } }, encryptionKeySha256: { serializedName: "x-ms-encryption-key-sha256", xmlName: "x-ms-encryption-key-sha256", type: { name: "String" } }, encryptionScope: { serializedName: "x-ms-encryption-scope", xmlName: "x-ms-encryption-scope", type: { name: "String" } }, isServerEncrypted: { serializedName: "x-ms-request-server-encrypted", xmlName: "x-ms-request-server-encrypted", type: { name: "Boolean" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var AppendBlobAppendBlockFromUrlExceptionHeaders = { serializedName: "AppendBlob_appendBlockFromUrlExceptionHeaders", type: { name: "Composite", className: "AppendBlobAppendBlockFromUrlExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var AppendBlobSealHeaders = { serializedName: "AppendBlob_sealHeaders", type: { name: "Composite", className: "AppendBlobSealHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, isSealed: { serializedName: "x-ms-blob-sealed", xmlName: "x-ms-blob-sealed", type: { name: "Boolean" } } } } }; var AppendBlobSealExceptionHeaders = { serializedName: "AppendBlob_sealExceptionHeaders", type: { name: "Composite", className: "AppendBlobSealExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlockBlobUploadHeaders = { serializedName: "BlockBlob_uploadHeaders", type: { name: "Composite", className: "BlockBlobUploadHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, contentMD5: { serializedName: "content-md5", xmlName: "content-md5", type: { name: "ByteArray" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, versionId: { serializedName: "x-ms-version-id", xmlName: "x-ms-version-id", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, isServerEncrypted: { serializedName: "x-ms-request-server-encrypted", xmlName: "x-ms-request-server-encrypted", type: { name: "Boolean" } }, encryptionKeySha256: { serializedName: "x-ms-encryption-key-sha256", xmlName: "x-ms-encryption-key-sha256", type: { name: "String" } }, encryptionScope: { serializedName: "x-ms-encryption-scope", xmlName: "x-ms-encryption-scope", type: { name: "String" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlockBlobUploadExceptionHeaders = { serializedName: "BlockBlob_uploadExceptionHeaders", type: { name: "Composite", className: "BlockBlobUploadExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlockBlobPutBlobFromUrlHeaders = { serializedName: "BlockBlob_putBlobFromUrlHeaders", type: { name: "Composite", className: "BlockBlobPutBlobFromUrlHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, contentMD5: { serializedName: "content-md5", xmlName: "content-md5", type: { name: "ByteArray" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, versionId: { serializedName: "x-ms-version-id", xmlName: "x-ms-version-id", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, isServerEncrypted: { serializedName: "x-ms-request-server-encrypted", xmlName: "x-ms-request-server-encrypted", type: { name: "Boolean" } }, encryptionKeySha256: { serializedName: "x-ms-encryption-key-sha256", xmlName: "x-ms-encryption-key-sha256", type: { name: "String" } }, encryptionScope: { serializedName: "x-ms-encryption-scope", xmlName: "x-ms-encryption-scope", type: { name: "String" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlockBlobPutBlobFromUrlExceptionHeaders = { serializedName: "BlockBlob_putBlobFromUrlExceptionHeaders", type: { name: "Composite", className: "BlockBlobPutBlobFromUrlExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlockBlobStageBlockHeaders = { serializedName: "BlockBlob_stageBlockHeaders", type: { name: "Composite", className: "BlockBlobStageBlockHeaders", modelProperties: { contentMD5: { serializedName: "content-md5", xmlName: "content-md5", type: { name: "ByteArray" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, xMsContentCrc64: { serializedName: "x-ms-content-crc64", xmlName: "x-ms-content-crc64", type: { name: "ByteArray" } }, isServerEncrypted: { serializedName: "x-ms-request-server-encrypted", xmlName: "x-ms-request-server-encrypted", type: { name: "Boolean" } }, encryptionKeySha256: { serializedName: "x-ms-encryption-key-sha256", xmlName: "x-ms-encryption-key-sha256", type: { name: "String" } }, encryptionScope: { serializedName: "x-ms-encryption-scope", xmlName: "x-ms-encryption-scope", type: { name: "String" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlockBlobStageBlockExceptionHeaders = { serializedName: "BlockBlob_stageBlockExceptionHeaders", type: { name: "Composite", className: "BlockBlobStageBlockExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlockBlobStageBlockFromURLHeaders = { serializedName: "BlockBlob_stageBlockFromURLHeaders", type: { name: "Composite", className: "BlockBlobStageBlockFromURLHeaders", modelProperties: { contentMD5: { serializedName: "content-md5", xmlName: "content-md5", type: { name: "ByteArray" } }, xMsContentCrc64: { serializedName: "x-ms-content-crc64", xmlName: "x-ms-content-crc64", type: { name: "ByteArray" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, isServerEncrypted: { serializedName: "x-ms-request-server-encrypted", xmlName: "x-ms-request-server-encrypted", type: { name: "Boolean" } }, encryptionKeySha256: { serializedName: "x-ms-encryption-key-sha256", xmlName: "x-ms-encryption-key-sha256", type: { name: "String" } }, encryptionScope: { serializedName: "x-ms-encryption-scope", xmlName: "x-ms-encryption-scope", type: { name: "String" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlockBlobStageBlockFromURLExceptionHeaders = { serializedName: "BlockBlob_stageBlockFromURLExceptionHeaders", type: { name: "Composite", className: "BlockBlobStageBlockFromURLExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlockBlobCommitBlockListHeaders = { serializedName: "BlockBlob_commitBlockListHeaders", type: { name: "Composite", className: "BlockBlobCommitBlockListHeaders", modelProperties: { etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, contentMD5: { serializedName: "content-md5", xmlName: "content-md5", type: { name: "ByteArray" } }, xMsContentCrc64: { serializedName: "x-ms-content-crc64", xmlName: "x-ms-content-crc64", type: { name: "ByteArray" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, versionId: { serializedName: "x-ms-version-id", xmlName: "x-ms-version-id", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, isServerEncrypted: { serializedName: "x-ms-request-server-encrypted", xmlName: "x-ms-request-server-encrypted", type: { name: "Boolean" } }, encryptionKeySha256: { serializedName: "x-ms-encryption-key-sha256", xmlName: "x-ms-encryption-key-sha256", type: { name: "String" } }, encryptionScope: { serializedName: "x-ms-encryption-scope", xmlName: "x-ms-encryption-scope", type: { name: "String" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlockBlobCommitBlockListExceptionHeaders = { serializedName: "BlockBlob_commitBlockListExceptionHeaders", type: { name: "Composite", className: "BlockBlobCommitBlockListExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlockBlobGetBlockListHeaders = { serializedName: "BlockBlob_getBlockListHeaders", type: { name: "Composite", className: "BlockBlobGetBlockListHeaders", modelProperties: { lastModified: { serializedName: "last-modified", xmlName: "last-modified", type: { name: "DateTimeRfc1123" } }, etag: { serializedName: "etag", xmlName: "etag", type: { name: "String" } }, contentType: { serializedName: "content-type", xmlName: "content-type", type: { name: "String" } }, blobContentLength: { serializedName: "x-ms-blob-content-length", xmlName: "x-ms-blob-content-length", type: { name: "Number" } }, clientRequestId: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } }, requestId: { serializedName: "x-ms-request-id", xmlName: "x-ms-request-id", type: { name: "String" } }, version: { serializedName: "x-ms-version", xmlName: "x-ms-version", type: { name: "String" } }, date: { serializedName: "date", xmlName: "date", type: { name: "DateTimeRfc1123" } }, errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var BlockBlobGetBlockListExceptionHeaders = { serializedName: "BlockBlob_getBlockListExceptionHeaders", type: { name: "Composite", className: "BlockBlobGetBlockListExceptionHeaders", modelProperties: { errorCode: { serializedName: "x-ms-error-code", xmlName: "x-ms-error-code", type: { name: "String" } } } } }; var Mappers = /*#__PURE__*/Object.freeze({ __proto__: null, BlobServiceProperties: BlobServiceProperties, Logging: Logging, RetentionPolicy: RetentionPolicy, Metrics: Metrics, CorsRule: CorsRule, StaticWebsite: StaticWebsite, StorageError: StorageError, BlobServiceStatistics: BlobServiceStatistics, GeoReplication: GeoReplication, ListContainersSegmentResponse: ListContainersSegmentResponse, ContainerItem: ContainerItem, ContainerProperties: ContainerProperties, KeyInfo: KeyInfo, UserDelegationKey: UserDelegationKey, FilterBlobSegment: FilterBlobSegment, FilterBlobItem: FilterBlobItem, BlobTags: BlobTags, BlobTag: BlobTag, SignedIdentifier: SignedIdentifier, AccessPolicy: AccessPolicy, ListBlobsFlatSegmentResponse: ListBlobsFlatSegmentResponse, BlobFlatListSegment: BlobFlatListSegment, BlobItemInternal: BlobItemInternal, BlobPropertiesInternal: BlobPropertiesInternal, ListBlobsHierarchySegmentResponse: ListBlobsHierarchySegmentResponse, BlobHierarchyListSegment: BlobHierarchyListSegment, BlobPrefix: BlobPrefix, DataLakeStorageError: DataLakeStorageError, DataLakeStorageErrorError: DataLakeStorageErrorError, BlockLookupList: BlockLookupList, BlockList: BlockList, Block: Block, PageList: PageList, PageRange: PageRange, ClearRange: ClearRange, QueryRequest: QueryRequest, QuerySerialization: QuerySerialization, QueryFormat: QueryFormat, DelimitedTextConfiguration: DelimitedTextConfiguration, JsonTextConfiguration: JsonTextConfiguration, ArrowConfiguration: ArrowConfiguration, ArrowField: ArrowField, ServiceSetPropertiesHeaders: ServiceSetPropertiesHeaders, ServiceSetPropertiesExceptionHeaders: ServiceSetPropertiesExceptionHeaders, ServiceGetPropertiesHeaders: ServiceGetPropertiesHeaders, ServiceGetPropertiesExceptionHeaders: ServiceGetPropertiesExceptionHeaders, ServiceGetStatisticsHeaders: ServiceGetStatisticsHeaders, ServiceGetStatisticsExceptionHeaders: ServiceGetStatisticsExceptionHeaders, ServiceListContainersSegmentHeaders: ServiceListContainersSegmentHeaders, ServiceListContainersSegmentExceptionHeaders: ServiceListContainersSegmentExceptionHeaders, ServiceGetUserDelegationKeyHeaders: ServiceGetUserDelegationKeyHeaders, ServiceGetUserDelegationKeyExceptionHeaders: ServiceGetUserDelegationKeyExceptionHeaders, ServiceGetAccountInfoHeaders: ServiceGetAccountInfoHeaders, ServiceGetAccountInfoExceptionHeaders: ServiceGetAccountInfoExceptionHeaders, ServiceSubmitBatchHeaders: ServiceSubmitBatchHeaders, ServiceSubmitBatchExceptionHeaders: ServiceSubmitBatchExceptionHeaders, ServiceFilterBlobsHeaders: ServiceFilterBlobsHeaders, ServiceFilterBlobsExceptionHeaders: ServiceFilterBlobsExceptionHeaders, ContainerCreateHeaders: ContainerCreateHeaders, ContainerCreateExceptionHeaders: ContainerCreateExceptionHeaders, ContainerGetPropertiesHeaders: ContainerGetPropertiesHeaders, ContainerGetPropertiesExceptionHeaders: ContainerGetPropertiesExceptionHeaders, ContainerDeleteHeaders: ContainerDeleteHeaders, ContainerDeleteExceptionHeaders: ContainerDeleteExceptionHeaders, ContainerSetMetadataHeaders: ContainerSetMetadataHeaders, ContainerSetMetadataExceptionHeaders: ContainerSetMetadataExceptionHeaders, ContainerGetAccessPolicyHeaders: ContainerGetAccessPolicyHeaders, ContainerGetAccessPolicyExceptionHeaders: ContainerGetAccessPolicyExceptionHeaders, ContainerSetAccessPolicyHeaders: ContainerSetAccessPolicyHeaders, ContainerSetAccessPolicyExceptionHeaders: ContainerSetAccessPolicyExceptionHeaders, ContainerRestoreHeaders: ContainerRestoreHeaders, ContainerRestoreExceptionHeaders: ContainerRestoreExceptionHeaders, ContainerRenameHeaders: ContainerRenameHeaders, ContainerRenameExceptionHeaders: ContainerRenameExceptionHeaders, ContainerSubmitBatchHeaders: ContainerSubmitBatchHeaders, ContainerSubmitBatchExceptionHeaders: ContainerSubmitBatchExceptionHeaders, ContainerAcquireLeaseHeaders: ContainerAcquireLeaseHeaders, ContainerAcquireLeaseExceptionHeaders: ContainerAcquireLeaseExceptionHeaders, ContainerReleaseLeaseHeaders: ContainerReleaseLeaseHeaders, ContainerReleaseLeaseExceptionHeaders: ContainerReleaseLeaseExceptionHeaders, ContainerRenewLeaseHeaders: ContainerRenewLeaseHeaders, ContainerRenewLeaseExceptionHeaders: ContainerRenewLeaseExceptionHeaders, ContainerBreakLeaseHeaders: ContainerBreakLeaseHeaders, ContainerBreakLeaseExceptionHeaders: ContainerBreakLeaseExceptionHeaders, ContainerChangeLeaseHeaders: ContainerChangeLeaseHeaders, ContainerChangeLeaseExceptionHeaders: ContainerChangeLeaseExceptionHeaders, ContainerListBlobFlatSegmentHeaders: ContainerListBlobFlatSegmentHeaders, ContainerListBlobFlatSegmentExceptionHeaders: ContainerListBlobFlatSegmentExceptionHeaders, ContainerListBlobHierarchySegmentHeaders: ContainerListBlobHierarchySegmentHeaders, ContainerListBlobHierarchySegmentExceptionHeaders: ContainerListBlobHierarchySegmentExceptionHeaders, ContainerGetAccountInfoHeaders: ContainerGetAccountInfoHeaders, ContainerGetAccountInfoExceptionHeaders: ContainerGetAccountInfoExceptionHeaders, DirectoryCreateHeaders: DirectoryCreateHeaders, DirectoryCreateExceptionHeaders: DirectoryCreateExceptionHeaders, DirectoryRenameHeaders: DirectoryRenameHeaders, DirectoryRenameExceptionHeaders: DirectoryRenameExceptionHeaders, DirectoryDeleteHeaders: DirectoryDeleteHeaders, DirectoryDeleteExceptionHeaders: DirectoryDeleteExceptionHeaders, DirectorySetAccessControlHeaders: DirectorySetAccessControlHeaders, DirectorySetAccessControlExceptionHeaders: DirectorySetAccessControlExceptionHeaders, DirectoryGetAccessControlHeaders: DirectoryGetAccessControlHeaders, DirectoryGetAccessControlExceptionHeaders: DirectoryGetAccessControlExceptionHeaders, BlobDownloadHeaders: BlobDownloadHeaders, BlobDownloadExceptionHeaders: BlobDownloadExceptionHeaders, BlobGetPropertiesHeaders: BlobGetPropertiesHeaders, BlobGetPropertiesExceptionHeaders: BlobGetPropertiesExceptionHeaders, BlobDeleteHeaders: BlobDeleteHeaders, BlobDeleteExceptionHeaders: BlobDeleteExceptionHeaders, BlobSetAccessControlHeaders: BlobSetAccessControlHeaders, BlobSetAccessControlExceptionHeaders: BlobSetAccessControlExceptionHeaders, BlobGetAccessControlHeaders: BlobGetAccessControlHeaders, BlobGetAccessControlExceptionHeaders: BlobGetAccessControlExceptionHeaders, BlobRenameHeaders: BlobRenameHeaders, BlobRenameExceptionHeaders: BlobRenameExceptionHeaders, BlobUndeleteHeaders: BlobUndeleteHeaders, BlobUndeleteExceptionHeaders: BlobUndeleteExceptionHeaders, BlobSetExpiryHeaders: BlobSetExpiryHeaders, BlobSetExpiryExceptionHeaders: BlobSetExpiryExceptionHeaders, BlobSetHttpHeadersHeaders: BlobSetHttpHeadersHeaders, BlobSetHttpHeadersExceptionHeaders: BlobSetHttpHeadersExceptionHeaders, BlobSetMetadataHeaders: BlobSetMetadataHeaders, BlobSetMetadataExceptionHeaders: BlobSetMetadataExceptionHeaders, BlobAcquireLeaseHeaders: BlobAcquireLeaseHeaders, BlobAcquireLeaseExceptionHeaders: BlobAcquireLeaseExceptionHeaders, BlobReleaseLeaseHeaders: BlobReleaseLeaseHeaders, BlobReleaseLeaseExceptionHeaders: BlobReleaseLeaseExceptionHeaders, BlobRenewLeaseHeaders: BlobRenewLeaseHeaders, BlobRenewLeaseExceptionHeaders: BlobRenewLeaseExceptionHeaders, BlobChangeLeaseHeaders: BlobChangeLeaseHeaders, BlobChangeLeaseExceptionHeaders: BlobChangeLeaseExceptionHeaders, BlobBreakLeaseHeaders: BlobBreakLeaseHeaders, BlobBreakLeaseExceptionHeaders: BlobBreakLeaseExceptionHeaders, BlobCreateSnapshotHeaders: BlobCreateSnapshotHeaders, BlobCreateSnapshotExceptionHeaders: BlobCreateSnapshotExceptionHeaders, BlobStartCopyFromURLHeaders: BlobStartCopyFromURLHeaders, BlobStartCopyFromURLExceptionHeaders: BlobStartCopyFromURLExceptionHeaders, BlobCopyFromURLHeaders: BlobCopyFromURLHeaders, BlobCopyFromURLExceptionHeaders: BlobCopyFromURLExceptionHeaders, BlobAbortCopyFromURLHeaders: BlobAbortCopyFromURLHeaders, BlobAbortCopyFromURLExceptionHeaders: BlobAbortCopyFromURLExceptionHeaders, BlobSetTierHeaders: BlobSetTierHeaders, BlobSetTierExceptionHeaders: BlobSetTierExceptionHeaders, BlobGetAccountInfoHeaders: BlobGetAccountInfoHeaders, BlobGetAccountInfoExceptionHeaders: BlobGetAccountInfoExceptionHeaders, BlobQueryHeaders: BlobQueryHeaders, BlobQueryExceptionHeaders: BlobQueryExceptionHeaders, BlobGetTagsHeaders: BlobGetTagsHeaders, BlobGetTagsExceptionHeaders: BlobGetTagsExceptionHeaders, BlobSetTagsHeaders: BlobSetTagsHeaders, BlobSetTagsExceptionHeaders: BlobSetTagsExceptionHeaders, PageBlobCreateHeaders: PageBlobCreateHeaders, PageBlobCreateExceptionHeaders: PageBlobCreateExceptionHeaders, PageBlobUploadPagesHeaders: PageBlobUploadPagesHeaders, PageBlobUploadPagesExceptionHeaders: PageBlobUploadPagesExceptionHeaders, PageBlobClearPagesHeaders: PageBlobClearPagesHeaders, PageBlobClearPagesExceptionHeaders: PageBlobClearPagesExceptionHeaders, PageBlobUploadPagesFromURLHeaders: PageBlobUploadPagesFromURLHeaders, PageBlobUploadPagesFromURLExceptionHeaders: PageBlobUploadPagesFromURLExceptionHeaders, PageBlobGetPageRangesHeaders: PageBlobGetPageRangesHeaders, PageBlobGetPageRangesExceptionHeaders: PageBlobGetPageRangesExceptionHeaders, PageBlobGetPageRangesDiffHeaders: PageBlobGetPageRangesDiffHeaders, PageBlobGetPageRangesDiffExceptionHeaders: PageBlobGetPageRangesDiffExceptionHeaders, PageBlobResizeHeaders: PageBlobResizeHeaders, PageBlobResizeExceptionHeaders: PageBlobResizeExceptionHeaders, PageBlobUpdateSequenceNumberHeaders: PageBlobUpdateSequenceNumberHeaders, PageBlobUpdateSequenceNumberExceptionHeaders: PageBlobUpdateSequenceNumberExceptionHeaders, PageBlobCopyIncrementalHeaders: PageBlobCopyIncrementalHeaders, PageBlobCopyIncrementalExceptionHeaders: PageBlobCopyIncrementalExceptionHeaders, AppendBlobCreateHeaders: AppendBlobCreateHeaders, AppendBlobCreateExceptionHeaders: AppendBlobCreateExceptionHeaders, AppendBlobAppendBlockHeaders: AppendBlobAppendBlockHeaders, AppendBlobAppendBlockExceptionHeaders: AppendBlobAppendBlockExceptionHeaders, AppendBlobAppendBlockFromUrlHeaders: AppendBlobAppendBlockFromUrlHeaders, AppendBlobAppendBlockFromUrlExceptionHeaders: AppendBlobAppendBlockFromUrlExceptionHeaders, AppendBlobSealHeaders: AppendBlobSealHeaders, AppendBlobSealExceptionHeaders: AppendBlobSealExceptionHeaders, BlockBlobUploadHeaders: BlockBlobUploadHeaders, BlockBlobUploadExceptionHeaders: BlockBlobUploadExceptionHeaders, BlockBlobPutBlobFromUrlHeaders: BlockBlobPutBlobFromUrlHeaders, BlockBlobPutBlobFromUrlExceptionHeaders: BlockBlobPutBlobFromUrlExceptionHeaders, BlockBlobStageBlockHeaders: BlockBlobStageBlockHeaders, BlockBlobStageBlockExceptionHeaders: BlockBlobStageBlockExceptionHeaders, BlockBlobStageBlockFromURLHeaders: BlockBlobStageBlockFromURLHeaders, BlockBlobStageBlockFromURLExceptionHeaders: BlockBlobStageBlockFromURLExceptionHeaders, BlockBlobCommitBlockListHeaders: BlockBlobCommitBlockListHeaders, BlockBlobCommitBlockListExceptionHeaders: BlockBlobCommitBlockListExceptionHeaders, BlockBlobGetBlockListHeaders: BlockBlobGetBlockListHeaders, BlockBlobGetBlockListExceptionHeaders: BlockBlobGetBlockListExceptionHeaders }); /* * Copyright (c) Microsoft Corporation. * Licensed under the MIT License. * * Code generated by Microsoft (R) AutoRest Code Generator. * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ var contentType = { parameterPath: ["options", "contentType"], mapper: { defaultValue: "application/xml", isConstant: true, serializedName: "Content-Type", type: { name: "String" } } }; var blobServiceProperties = { parameterPath: "blobServiceProperties", mapper: BlobServiceProperties }; var accept = { parameterPath: "accept", mapper: { defaultValue: "application/xml", isConstant: true, serializedName: "Accept", type: { name: "String" } } }; var url = { parameterPath: "url", mapper: { serializedName: "url", required: true, xmlName: "url", type: { name: "String" } }, skipEncoding: true }; var restype = { parameterPath: "restype", mapper: { defaultValue: "service", isConstant: true, serializedName: "restype", type: { name: "String" } } }; var comp = { parameterPath: "comp", mapper: { defaultValue: "properties", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var timeoutInSeconds = { parameterPath: ["options", "timeoutInSeconds"], mapper: { constraints: { InclusiveMinimum: 0 }, serializedName: "timeout", xmlName: "timeout", type: { name: "Number" } } }; var version = { parameterPath: "version", mapper: { defaultValue: "2020-08-04", isConstant: true, serializedName: "x-ms-version", type: { name: "String" } } }; var requestId = { parameterPath: ["options", "requestId"], mapper: { serializedName: "x-ms-client-request-id", xmlName: "x-ms-client-request-id", type: { name: "String" } } }; var accept1 = { parameterPath: "accept", mapper: { defaultValue: "application/xml", isConstant: true, serializedName: "Accept", type: { name: "String" } } }; var comp1 = { parameterPath: "comp", mapper: { defaultValue: "stats", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var comp2 = { parameterPath: "comp", mapper: { defaultValue: "list", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var prefix = { parameterPath: ["options", "prefix"], mapper: { serializedName: "prefix", xmlName: "prefix", type: { name: "String" } } }; var marker = { parameterPath: ["options", "marker"], mapper: { serializedName: "marker", xmlName: "marker", type: { name: "String" } } }; var maxPageSize = { parameterPath: ["options", "maxPageSize"], mapper: { constraints: { InclusiveMinimum: 1 }, serializedName: "maxresults", xmlName: "maxresults", type: { name: "Number" } } }; var include = { parameterPath: ["options", "include"], mapper: { serializedName: "include", xmlName: "include", xmlElementName: "ListContainersIncludeType", type: { name: "Sequence", element: { type: { name: "Enum", allowedValues: ["metadata", "deleted"] } } } }, collectionFormat: coreHttp.QueryCollectionFormat.Csv }; var keyInfo = { parameterPath: "keyInfo", mapper: KeyInfo }; var comp3 = { parameterPath: "comp", mapper: { defaultValue: "userdelegationkey", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var restype1 = { parameterPath: "restype", mapper: { defaultValue: "account", isConstant: true, serializedName: "restype", type: { name: "String" } } }; var body = { parameterPath: "body", mapper: { serializedName: "body", required: true, xmlName: "body", type: { name: "Stream" } } }; var comp4 = { parameterPath: "comp", mapper: { defaultValue: "batch", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var contentLength = { parameterPath: "contentLength", mapper: { serializedName: "Content-Length", required: true, xmlName: "Content-Length", type: { name: "Number" } } }; var multipartContentType = { parameterPath: "multipartContentType", mapper: { serializedName: "Content-Type", required: true, xmlName: "Content-Type", type: { name: "String" } } }; var comp5 = { parameterPath: "comp", mapper: { defaultValue: "blobs", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var where = { parameterPath: ["options", "where"], mapper: { serializedName: "where", xmlName: "where", type: { name: "String" } } }; var restype2 = { parameterPath: "restype", mapper: { defaultValue: "container", isConstant: true, serializedName: "restype", type: { name: "String" } } }; var metadata = { parameterPath: ["options", "metadata"], mapper: { serializedName: "x-ms-meta", xmlName: "x-ms-meta", type: { name: "Dictionary", value: { type: { name: "String" } } }, headerCollectionPrefix: "x-ms-meta-" } }; var access = { parameterPath: ["options", "access"], mapper: { serializedName: "x-ms-blob-public-access", xmlName: "x-ms-blob-public-access", type: { name: "Enum", allowedValues: ["container", "blob"] } } }; var defaultEncryptionScope = { parameterPath: [ "options", "containerEncryptionScope", "defaultEncryptionScope" ], mapper: { serializedName: "x-ms-default-encryption-scope", xmlName: "x-ms-default-encryption-scope", type: { name: "String" } } }; var preventEncryptionScopeOverride = { parameterPath: [ "options", "containerEncryptionScope", "preventEncryptionScopeOverride" ], mapper: { serializedName: "x-ms-deny-encryption-scope-override", xmlName: "x-ms-deny-encryption-scope-override", type: { name: "Boolean" } } }; var leaseId = { parameterPath: ["options", "leaseAccessConditions", "leaseId"], mapper: { serializedName: "x-ms-lease-id", xmlName: "x-ms-lease-id", type: { name: "String" } } }; var ifModifiedSince = { parameterPath: ["options", "modifiedAccessConditions", "ifModifiedSince"], mapper: { serializedName: "If-Modified-Since", xmlName: "If-Modified-Since", type: { name: "DateTimeRfc1123" } } }; var ifUnmodifiedSince = { parameterPath: ["options", "modifiedAccessConditions", "ifUnmodifiedSince"], mapper: { serializedName: "If-Unmodified-Since", xmlName: "If-Unmodified-Since", type: { name: "DateTimeRfc1123" } } }; var comp6 = { parameterPath: "comp", mapper: { defaultValue: "metadata", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var comp7 = { parameterPath: "comp", mapper: { defaultValue: "acl", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var containerAcl = { parameterPath: ["options", "containerAcl"], mapper: { serializedName: "containerAcl", xmlName: "SignedIdentifiers", xmlIsWrapped: true, xmlElementName: "SignedIdentifier", type: { name: "Sequence", element: { type: { name: "Composite", className: "SignedIdentifier" } } } } }; var comp8 = { parameterPath: "comp", mapper: { defaultValue: "undelete", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var deletedContainerName = { parameterPath: ["options", "deletedContainerName"], mapper: { serializedName: "x-ms-deleted-container-name", xmlName: "x-ms-deleted-container-name", type: { name: "String" } } }; var deletedContainerVersion = { parameterPath: ["options", "deletedContainerVersion"], mapper: { serializedName: "x-ms-deleted-container-version", xmlName: "x-ms-deleted-container-version", type: { name: "String" } } }; var comp9 = { parameterPath: "comp", mapper: { defaultValue: "rename", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var sourceContainerName = { parameterPath: "sourceContainerName", mapper: { serializedName: "x-ms-source-container-name", required: true, xmlName: "x-ms-source-container-name", type: { name: "String" } } }; var sourceLeaseId = { parameterPath: ["options", "sourceLeaseId"], mapper: { serializedName: "x-ms-source-lease-id", xmlName: "x-ms-source-lease-id", type: { name: "String" } } }; var comp10 = { parameterPath: "comp", mapper: { defaultValue: "lease", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var action = { parameterPath: "action", mapper: { defaultValue: "acquire", isConstant: true, serializedName: "x-ms-lease-action", type: { name: "String" } } }; var duration = { parameterPath: ["options", "duration"], mapper: { serializedName: "x-ms-lease-duration", xmlName: "x-ms-lease-duration", type: { name: "Number" } } }; var proposedLeaseId = { parameterPath: ["options", "proposedLeaseId"], mapper: { serializedName: "x-ms-proposed-lease-id", xmlName: "x-ms-proposed-lease-id", type: { name: "String" } } }; var action1 = { parameterPath: "action", mapper: { defaultValue: "release", isConstant: true, serializedName: "x-ms-lease-action", type: { name: "String" } } }; var leaseId1 = { parameterPath: "leaseId", mapper: { serializedName: "x-ms-lease-id", required: true, xmlName: "x-ms-lease-id", type: { name: "String" } } }; var action2 = { parameterPath: "action", mapper: { defaultValue: "renew", isConstant: true, serializedName: "x-ms-lease-action", type: { name: "String" } } }; var action3 = { parameterPath: "action", mapper: { defaultValue: "break", isConstant: true, serializedName: "x-ms-lease-action", type: { name: "String" } } }; var breakPeriod = { parameterPath: ["options", "breakPeriod"], mapper: { serializedName: "x-ms-lease-break-period", xmlName: "x-ms-lease-break-period", type: { name: "Number" } } }; var action4 = { parameterPath: "action", mapper: { defaultValue: "change", isConstant: true, serializedName: "x-ms-lease-action", type: { name: "String" } } }; var proposedLeaseId1 = { parameterPath: "proposedLeaseId", mapper: { serializedName: "x-ms-proposed-lease-id", required: true, xmlName: "x-ms-proposed-lease-id", type: { name: "String" } } }; var include1 = { parameterPath: ["options", "include"], mapper: { serializedName: "include", xmlName: "include", xmlElementName: "ListBlobsIncludeItem", type: { name: "Sequence", element: { type: { name: "Enum", allowedValues: [ "copy", "deleted", "metadata", "snapshots", "uncommittedblobs", "versions", "tags" ] } } } }, collectionFormat: coreHttp.QueryCollectionFormat.Csv }; var delimiter = { parameterPath: "delimiter", mapper: { serializedName: "delimiter", required: true, xmlName: "delimiter", type: { name: "String" } } }; var directoryProperties = { parameterPath: ["options", "directoryProperties"], mapper: { serializedName: "x-ms-properties", xmlName: "x-ms-properties", type: { name: "String" } } }; var posixPermissions = { parameterPath: ["options", "posixPermissions"], mapper: { serializedName: "x-ms-permissions", xmlName: "x-ms-permissions", type: { name: "String" } } }; var posixUmask = { parameterPath: ["options", "posixUmask"], mapper: { serializedName: "x-ms-umask", xmlName: "x-ms-umask", type: { name: "String" } } }; var cacheControl = { parameterPath: ["options", "directoryHttpHeaders", "cacheControl"], mapper: { serializedName: "x-ms-cache-control", xmlName: "x-ms-cache-control", type: { name: "String" } } }; var contentType1 = { parameterPath: ["options", "directoryHttpHeaders", "contentType"], mapper: { serializedName: "x-ms-content-type", xmlName: "x-ms-content-type", type: { name: "String" } } }; var contentEncoding = { parameterPath: ["options", "directoryHttpHeaders", "contentEncoding"], mapper: { serializedName: "x-ms-content-encoding", xmlName: "x-ms-content-encoding", type: { name: "String" } } }; var contentLanguage = { parameterPath: ["options", "directoryHttpHeaders", "contentLanguage"], mapper: { serializedName: "x-ms-content-language", xmlName: "x-ms-content-language", type: { name: "String" } } }; var contentDisposition = { parameterPath: ["options", "directoryHttpHeaders", "contentDisposition"], mapper: { serializedName: "x-ms-content-disposition", xmlName: "x-ms-content-disposition", type: { name: "String" } } }; var ifMatch = { parameterPath: ["options", "modifiedAccessConditions", "ifMatch"], mapper: { serializedName: "If-Match", xmlName: "If-Match", type: { name: "String" } } }; var ifNoneMatch = { parameterPath: ["options", "modifiedAccessConditions", "ifNoneMatch"], mapper: { serializedName: "If-None-Match", xmlName: "If-None-Match", type: { name: "String" } } }; var pathRenameMode = { parameterPath: ["options", "pathRenameMode"], mapper: { serializedName: "mode", xmlName: "mode", type: { name: "Enum", allowedValues: ["legacy", "posix"] } } }; var renameSource = { parameterPath: "renameSource", mapper: { serializedName: "x-ms-rename-source", required: true, xmlName: "x-ms-rename-source", type: { name: "String" } } }; var sourceIfModifiedSince = { parameterPath: [ "options", "sourceModifiedAccessConditions", "sourceIfModifiedSince" ], mapper: { serializedName: "x-ms-source-if-modified-since", xmlName: "x-ms-source-if-modified-since", type: { name: "DateTimeRfc1123" } } }; var sourceIfUnmodifiedSince = { parameterPath: [ "options", "sourceModifiedAccessConditions", "sourceIfUnmodifiedSince" ], mapper: { serializedName: "x-ms-source-if-unmodified-since", xmlName: "x-ms-source-if-unmodified-since", type: { name: "DateTimeRfc1123" } } }; var sourceIfMatch = { parameterPath: ["options", "sourceModifiedAccessConditions", "sourceIfMatch"], mapper: { serializedName: "x-ms-source-if-match", xmlName: "x-ms-source-if-match", type: { name: "String" } } }; var sourceIfNoneMatch = { parameterPath: [ "options", "sourceModifiedAccessConditions", "sourceIfNoneMatch" ], mapper: { serializedName: "x-ms-source-if-none-match", xmlName: "x-ms-source-if-none-match", type: { name: "String" } } }; var action5 = { parameterPath: "action", mapper: { defaultValue: "setAccessControl", isConstant: true, serializedName: "action", type: { name: "String" } } }; var owner = { parameterPath: ["options", "owner"], mapper: { serializedName: "x-ms-owner", xmlName: "x-ms-owner", type: { name: "String" } } }; var group = { parameterPath: ["options", "group"], mapper: { serializedName: "x-ms-group", xmlName: "x-ms-group", type: { name: "String" } } }; var posixAcl = { parameterPath: ["options", "posixAcl"], mapper: { serializedName: "x-ms-acl", xmlName: "x-ms-acl", type: { name: "String" } } }; var action6 = { parameterPath: "action", mapper: { defaultValue: "getAccessControl", isConstant: true, serializedName: "action", type: { name: "String" } } }; var upn = { parameterPath: ["options", "upn"], mapper: { serializedName: "upn", xmlName: "upn", type: { name: "Boolean" } } }; var snapshot = { parameterPath: ["options", "snapshot"], mapper: { serializedName: "snapshot", xmlName: "snapshot", type: { name: "String" } } }; var versionId = { parameterPath: ["options", "versionId"], mapper: { serializedName: "versionid", xmlName: "versionid", type: { name: "String" } } }; var range = { parameterPath: ["options", "range"], mapper: { serializedName: "x-ms-range", xmlName: "x-ms-range", type: { name: "String" } } }; var rangeGetContentMD5 = { parameterPath: ["options", "rangeGetContentMD5"], mapper: { serializedName: "x-ms-range-get-content-md5", xmlName: "x-ms-range-get-content-md5", type: { name: "Boolean" } } }; var rangeGetContentCRC64 = { parameterPath: ["options", "rangeGetContentCRC64"], mapper: { serializedName: "x-ms-range-get-content-crc64", xmlName: "x-ms-range-get-content-crc64", type: { name: "Boolean" } } }; var encryptionKey = { parameterPath: ["options", "cpkInfo", "encryptionKey"], mapper: { serializedName: "x-ms-encryption-key", xmlName: "x-ms-encryption-key", type: { name: "String" } } }; var encryptionKeySha256 = { parameterPath: ["options", "cpkInfo", "encryptionKeySha256"], mapper: { serializedName: "x-ms-encryption-key-sha256", xmlName: "x-ms-encryption-key-sha256", type: { name: "String" } } }; var encryptionAlgorithm = { parameterPath: ["options", "encryptionAlgorithm"], mapper: { defaultValue: "AES256", isConstant: true, serializedName: "x-ms-encryption-algorithm", type: { name: "String" } } }; var ifTags = { parameterPath: ["options", "modifiedAccessConditions", "ifTags"], mapper: { serializedName: "x-ms-if-tags", xmlName: "x-ms-if-tags", type: { name: "String" } } }; var deleteSnapshots = { parameterPath: ["options", "deleteSnapshots"], mapper: { serializedName: "x-ms-delete-snapshots", xmlName: "x-ms-delete-snapshots", type: { name: "Enum", allowedValues: ["include", "only"] } } }; var blobDeleteType = { parameterPath: ["options", "blobDeleteType"], mapper: { serializedName: "deletetype", xmlName: "deletetype", type: { name: "String" } } }; var comp11 = { parameterPath: "comp", mapper: { defaultValue: "expiry", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var expiryOptions = { parameterPath: "expiryOptions", mapper: { serializedName: "x-ms-expiry-option", required: true, xmlName: "x-ms-expiry-option", type: { name: "String" } } }; var expiresOn = { parameterPath: ["options", "expiresOn"], mapper: { serializedName: "x-ms-expiry-time", xmlName: "x-ms-expiry-time", type: { name: "String" } } }; var blobCacheControl = { parameterPath: ["options", "blobHttpHeaders", "blobCacheControl"], mapper: { serializedName: "x-ms-blob-cache-control", xmlName: "x-ms-blob-cache-control", type: { name: "String" } } }; var blobContentType = { parameterPath: ["options", "blobHttpHeaders", "blobContentType"], mapper: { serializedName: "x-ms-blob-content-type", xmlName: "x-ms-blob-content-type", type: { name: "String" } } }; var blobContentMD5 = { parameterPath: ["options", "blobHttpHeaders", "blobContentMD5"], mapper: { serializedName: "x-ms-blob-content-md5", xmlName: "x-ms-blob-content-md5", type: { name: "ByteArray" } } }; var blobContentEncoding = { parameterPath: ["options", "blobHttpHeaders", "blobContentEncoding"], mapper: { serializedName: "x-ms-blob-content-encoding", xmlName: "x-ms-blob-content-encoding", type: { name: "String" } } }; var blobContentLanguage = { parameterPath: ["options", "blobHttpHeaders", "blobContentLanguage"], mapper: { serializedName: "x-ms-blob-content-language", xmlName: "x-ms-blob-content-language", type: { name: "String" } } }; var blobContentDisposition = { parameterPath: ["options", "blobHttpHeaders", "blobContentDisposition"], mapper: { serializedName: "x-ms-blob-content-disposition", xmlName: "x-ms-blob-content-disposition", type: { name: "String" } } }; var encryptionScope = { parameterPath: ["options", "encryptionScope"], mapper: { serializedName: "x-ms-encryption-scope", xmlName: "x-ms-encryption-scope", type: { name: "String" } } }; var comp12 = { parameterPath: "comp", mapper: { defaultValue: "snapshot", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var tier = { parameterPath: ["options", "tier"], mapper: { serializedName: "x-ms-access-tier", xmlName: "x-ms-access-tier", type: { name: "Enum", allowedValues: [ "P4", "P6", "P10", "P15", "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive" ] } } }; var rehydratePriority = { parameterPath: ["options", "rehydratePriority"], mapper: { serializedName: "x-ms-rehydrate-priority", xmlName: "x-ms-rehydrate-priority", type: { name: "Enum", allowedValues: ["High", "Standard"] } } }; var sourceIfTags = { parameterPath: ["options", "sourceModifiedAccessConditions", "sourceIfTags"], mapper: { serializedName: "x-ms-source-if-tags", xmlName: "x-ms-source-if-tags", type: { name: "String" } } }; var copySource = { parameterPath: "copySource", mapper: { serializedName: "x-ms-copy-source", required: true, xmlName: "x-ms-copy-source", type: { name: "String" } } }; var blobTagsString = { parameterPath: ["options", "blobTagsString"], mapper: { serializedName: "x-ms-tags", xmlName: "x-ms-tags", type: { name: "String" } } }; var sealBlob = { parameterPath: ["options", "sealBlob"], mapper: { serializedName: "x-ms-seal-blob", xmlName: "x-ms-seal-blob", type: { name: "Boolean" } } }; var xMsRequiresSync = { parameterPath: "xMsRequiresSync", mapper: { defaultValue: "true", isConstant: true, serializedName: "x-ms-requires-sync", type: { name: "String" } } }; var sourceContentMD5 = { parameterPath: ["options", "sourceContentMD5"], mapper: { serializedName: "x-ms-source-content-md5", xmlName: "x-ms-source-content-md5", type: { name: "ByteArray" } } }; var comp13 = { parameterPath: "comp", mapper: { defaultValue: "copy", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var copyActionAbortConstant = { parameterPath: "copyActionAbortConstant", mapper: { defaultValue: "abort", isConstant: true, serializedName: "x-ms-copy-action", type: { name: "String" } } }; var copyId = { parameterPath: "copyId", mapper: { serializedName: "copyid", required: true, xmlName: "copyid", type: { name: "String" } } }; var comp14 = { parameterPath: "comp", mapper: { defaultValue: "tier", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var tier1 = { parameterPath: "tier", mapper: { serializedName: "x-ms-access-tier", required: true, xmlName: "x-ms-access-tier", type: { name: "Enum", allowedValues: [ "P4", "P6", "P10", "P15", "P20", "P30", "P40", "P50", "P60", "P70", "P80", "Hot", "Cool", "Archive" ] } } }; var queryRequest = { parameterPath: ["options", "queryRequest"], mapper: QueryRequest }; var comp15 = { parameterPath: "comp", mapper: { defaultValue: "query", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var comp16 = { parameterPath: "comp", mapper: { defaultValue: "tags", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var tags = { parameterPath: ["options", "tags"], mapper: BlobTags }; var transactionalContentMD5 = { parameterPath: ["options", "transactionalContentMD5"], mapper: { serializedName: "Content-MD5", xmlName: "Content-MD5", type: { name: "ByteArray" } } }; var transactionalContentCrc64 = { parameterPath: ["options", "transactionalContentCrc64"], mapper: { serializedName: "x-ms-content-crc64", xmlName: "x-ms-content-crc64", type: { name: "ByteArray" } } }; var blobType = { parameterPath: "blobType", mapper: { defaultValue: "PageBlob", isConstant: true, serializedName: "x-ms-blob-type", type: { name: "String" } } }; var blobContentLength = { parameterPath: "blobContentLength", mapper: { serializedName: "x-ms-blob-content-length", required: true, xmlName: "x-ms-blob-content-length", type: { name: "Number" } } }; var blobSequenceNumber = { parameterPath: ["options", "blobSequenceNumber"], mapper: { serializedName: "x-ms-blob-sequence-number", xmlName: "x-ms-blob-sequence-number", type: { name: "Number" } } }; var contentType2 = { parameterPath: ["options", "contentType"], mapper: { defaultValue: "application/octet-stream", isConstant: true, serializedName: "Content-Type", type: { name: "String" } } }; var body1 = { parameterPath: "body", mapper: { serializedName: "body", required: true, xmlName: "body", type: { name: "Stream" } } }; var accept2 = { parameterPath: "accept", mapper: { defaultValue: "application/xml", isConstant: true, serializedName: "Accept", type: { name: "String" } } }; var comp17 = { parameterPath: "comp", mapper: { defaultValue: "page", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var pageWrite = { parameterPath: "pageWrite", mapper: { defaultValue: "update", isConstant: true, serializedName: "x-ms-page-write", type: { name: "String" } } }; var ifSequenceNumberLessThanOrEqualTo = { parameterPath: [ "options", "sequenceNumberAccessConditions", "ifSequenceNumberLessThanOrEqualTo" ], mapper: { serializedName: "x-ms-if-sequence-number-le", xmlName: "x-ms-if-sequence-number-le", type: { name: "Number" } } }; var ifSequenceNumberLessThan = { parameterPath: [ "options", "sequenceNumberAccessConditions", "ifSequenceNumberLessThan" ], mapper: { serializedName: "x-ms-if-sequence-number-lt", xmlName: "x-ms-if-sequence-number-lt", type: { name: "Number" } } }; var ifSequenceNumberEqualTo = { parameterPath: [ "options", "sequenceNumberAccessConditions", "ifSequenceNumberEqualTo" ], mapper: { serializedName: "x-ms-if-sequence-number-eq", xmlName: "x-ms-if-sequence-number-eq", type: { name: "Number" } } }; var pageWrite1 = { parameterPath: "pageWrite", mapper: { defaultValue: "clear", isConstant: true, serializedName: "x-ms-page-write", type: { name: "String" } } }; var sourceUrl = { parameterPath: "sourceUrl", mapper: { serializedName: "x-ms-copy-source", required: true, xmlName: "x-ms-copy-source", type: { name: "String" } } }; var sourceRange = { parameterPath: "sourceRange", mapper: { serializedName: "x-ms-source-range", required: true, xmlName: "x-ms-source-range", type: { name: "String" } } }; var sourceContentCrc64 = { parameterPath: ["options", "sourceContentCrc64"], mapper: { serializedName: "x-ms-source-content-crc64", xmlName: "x-ms-source-content-crc64", type: { name: "ByteArray" } } }; var range1 = { parameterPath: "range", mapper: { serializedName: "x-ms-range", required: true, xmlName: "x-ms-range", type: { name: "String" } } }; var comp18 = { parameterPath: "comp", mapper: { defaultValue: "pagelist", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var prevsnapshot = { parameterPath: ["options", "prevsnapshot"], mapper: { serializedName: "prevsnapshot", xmlName: "prevsnapshot", type: { name: "String" } } }; var prevSnapshotUrl = { parameterPath: ["options", "prevSnapshotUrl"], mapper: { serializedName: "x-ms-previous-snapshot-url", xmlName: "x-ms-previous-snapshot-url", type: { name: "String" } } }; var sequenceNumberAction = { parameterPath: "sequenceNumberAction", mapper: { serializedName: "x-ms-sequence-number-action", required: true, xmlName: "x-ms-sequence-number-action", type: { name: "Enum", allowedValues: ["max", "update", "increment"] } } }; var comp19 = { parameterPath: "comp", mapper: { defaultValue: "incrementalcopy", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var blobType1 = { parameterPath: "blobType", mapper: { defaultValue: "AppendBlob", isConstant: true, serializedName: "x-ms-blob-type", type: { name: "String" } } }; var comp20 = { parameterPath: "comp", mapper: { defaultValue: "appendblock", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var maxSize = { parameterPath: ["options", "appendPositionAccessConditions", "maxSize"], mapper: { serializedName: "x-ms-blob-condition-maxsize", xmlName: "x-ms-blob-condition-maxsize", type: { name: "Number" } } }; var appendPosition = { parameterPath: [ "options", "appendPositionAccessConditions", "appendPosition" ], mapper: { serializedName: "x-ms-blob-condition-appendpos", xmlName: "x-ms-blob-condition-appendpos", type: { name: "Number" } } }; var sourceRange1 = { parameterPath: ["options", "sourceRange"], mapper: { serializedName: "x-ms-source-range", xmlName: "x-ms-source-range", type: { name: "String" } } }; var comp21 = { parameterPath: "comp", mapper: { defaultValue: "seal", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var blobType2 = { parameterPath: "blobType", mapper: { defaultValue: "BlockBlob", isConstant: true, serializedName: "x-ms-blob-type", type: { name: "String" } } }; var copySourceBlobProperties = { parameterPath: ["options", "copySourceBlobProperties"], mapper: { serializedName: "x-ms-copy-source-blob-properties", xmlName: "x-ms-copy-source-blob-properties", type: { name: "Boolean" } } }; var comp22 = { parameterPath: "comp", mapper: { defaultValue: "block", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var blockId = { parameterPath: "blockId", mapper: { serializedName: "blockid", required: true, xmlName: "blockid", type: { name: "String" } } }; var blocks = { parameterPath: "blocks", mapper: BlockLookupList }; var comp23 = { parameterPath: "comp", mapper: { defaultValue: "blocklist", isConstant: true, serializedName: "comp", type: { name: "String" } } }; var listType = { parameterPath: "listType", mapper: { defaultValue: "committed", serializedName: "blocklisttype", required: true, xmlName: "blocklisttype", type: { name: "Enum", allowedValues: ["committed", "uncommitted", "all"] } } }; /* * Copyright (c) Microsoft Corporation. * Licensed under the MIT License. * * Code generated by Microsoft (R) AutoRest Code Generator. * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ /** Class representing a Service. */ var Service = /** @class */ (function () { /** * Initialize a new instance of the class Service class. * @param client Reference to the service client */ function Service(client) { this.client = client; } /** * Sets properties for a storage account's Blob service endpoint, including properties for Storage * Analytics and CORS (Cross-Origin Resource Sharing) rules * @param blobServiceProperties The StorageService properties. * @param options The options parameters. */ Service.prototype.setProperties = function (blobServiceProperties, options) { var operationArguments = { blobServiceProperties: blobServiceProperties, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, setPropertiesOperationSpec); }; /** * gets the properties of a storage account's Blob service, including properties for Storage Analytics * and CORS (Cross-Origin Resource Sharing) rules. * @param options The options parameters. */ Service.prototype.getProperties = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, getPropertiesOperationSpec); }; /** * Retrieves statistics related to replication for the Blob service. It is only available on the * secondary location endpoint when read-access geo-redundant replication is enabled for the storage * account. * @param options The options parameters. */ Service.prototype.getStatistics = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, getStatisticsOperationSpec); }; /** * The List Containers Segment operation returns a list of the containers under the specified account * @param options The options parameters. */ Service.prototype.listContainersSegment = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, listContainersSegmentOperationSpec); }; /** * Retrieves a user delegation key for the Blob service. This is only a valid operation when using * bearer token authentication. * @param keyInfo Key information * @param options The options parameters. */ Service.prototype.getUserDelegationKey = function (keyInfo, options) { var operationArguments = { keyInfo: keyInfo, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, getUserDelegationKeyOperationSpec); }; /** * Returns the sku name and account kind * @param options The options parameters. */ Service.prototype.getAccountInfo = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, getAccountInfoOperationSpec); }; /** * The Batch operation allows multiple API calls to be embedded into a single HTTP request. * @param contentLength The length of the request. * @param multipartContentType Required. The value of this header must be multipart/mixed with a batch * boundary. Example header value: multipart/mixed; boundary=batch_ * @param body Initial data * @param options The options parameters. */ Service.prototype.submitBatch = function (contentLength, multipartContentType, body, options) { var operationArguments = { contentLength: contentLength, multipartContentType: multipartContentType, body: body, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, submitBatchOperationSpec); }; /** * The Filter Blobs operation enables callers to list blobs across all containers whose tags match a * given search expression. Filter blobs searches across all containers within a storage account but * can be scoped within the expression to a single container. * @param options The options parameters. */ Service.prototype.filterBlobs = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, filterBlobsOperationSpec); }; return Service; }()); // Operation Specifications var xmlSerializer = new coreHttp.Serializer(Mappers, /* isXml */ true); var setPropertiesOperationSpec = { path: "/", httpMethod: "PUT", responses: { 202: { headersMapper: ServiceSetPropertiesHeaders }, default: { bodyMapper: StorageError, headersMapper: ServiceSetPropertiesExceptionHeaders } }, requestBody: blobServiceProperties, queryParameters: [ restype, comp, timeoutInSeconds ], urlParameters: [url], headerParameters: [ contentType, accept, version, requestId ], isXML: true, contentType: "application/xml; charset=utf-8", mediaType: "xml", serializer: xmlSerializer }; var getPropertiesOperationSpec = { path: "/", httpMethod: "GET", responses: { 200: { bodyMapper: BlobServiceProperties, headersMapper: ServiceGetPropertiesHeaders }, default: { bodyMapper: StorageError, headersMapper: ServiceGetPropertiesExceptionHeaders } }, queryParameters: [ restype, comp, timeoutInSeconds ], urlParameters: [url], headerParameters: [ version, requestId, accept1 ], isXML: true, serializer: xmlSerializer }; var getStatisticsOperationSpec = { path: "/", httpMethod: "GET", responses: { 200: { bodyMapper: BlobServiceStatistics, headersMapper: ServiceGetStatisticsHeaders }, default: { bodyMapper: StorageError, headersMapper: ServiceGetStatisticsExceptionHeaders } }, queryParameters: [ restype, timeoutInSeconds, comp1 ], urlParameters: [url], headerParameters: [ version, requestId, accept1 ], isXML: true, serializer: xmlSerializer }; var listContainersSegmentOperationSpec = { path: "/", httpMethod: "GET", responses: { 200: { bodyMapper: ListContainersSegmentResponse, headersMapper: ServiceListContainersSegmentHeaders }, default: { bodyMapper: StorageError, headersMapper: ServiceListContainersSegmentExceptionHeaders } }, queryParameters: [ timeoutInSeconds, comp2, prefix, marker, maxPageSize, include ], urlParameters: [url], headerParameters: [ version, requestId, accept1 ], isXML: true, serializer: xmlSerializer }; var getUserDelegationKeyOperationSpec = { path: "/", httpMethod: "POST", responses: { 200: { bodyMapper: UserDelegationKey, headersMapper: ServiceGetUserDelegationKeyHeaders }, default: { bodyMapper: StorageError, headersMapper: ServiceGetUserDelegationKeyExceptionHeaders } }, requestBody: keyInfo, queryParameters: [ restype, timeoutInSeconds, comp3 ], urlParameters: [url], headerParameters: [ contentType, accept, version, requestId ], isXML: true, contentType: "application/xml; charset=utf-8", mediaType: "xml", serializer: xmlSerializer }; var getAccountInfoOperationSpec = { path: "/", httpMethod: "GET", responses: { 200: { headersMapper: ServiceGetAccountInfoHeaders }, default: { bodyMapper: StorageError, headersMapper: ServiceGetAccountInfoExceptionHeaders } }, queryParameters: [comp, restype1], urlParameters: [url], headerParameters: [version, accept1], isXML: true, serializer: xmlSerializer }; var submitBatchOperationSpec = { path: "/", httpMethod: "POST", responses: { 202: { bodyMapper: { type: { name: "Stream" }, serializedName: "parsedResponse" }, headersMapper: ServiceSubmitBatchHeaders }, default: { bodyMapper: StorageError, headersMapper: ServiceSubmitBatchExceptionHeaders } }, requestBody: body, queryParameters: [timeoutInSeconds, comp4], urlParameters: [url], headerParameters: [ contentType, accept, version, requestId, contentLength, multipartContentType ], isXML: true, contentType: "application/xml; charset=utf-8", mediaType: "xml", serializer: xmlSerializer }; var filterBlobsOperationSpec = { path: "/", httpMethod: "GET", responses: { 200: { bodyMapper: FilterBlobSegment, headersMapper: ServiceFilterBlobsHeaders }, default: { bodyMapper: StorageError, headersMapper: ServiceFilterBlobsExceptionHeaders } }, queryParameters: [ timeoutInSeconds, marker, maxPageSize, comp5, where ], urlParameters: [url], headerParameters: [ version, requestId, accept1 ], isXML: true, serializer: xmlSerializer }; /* * Copyright (c) Microsoft Corporation. * Licensed under the MIT License. * * Code generated by Microsoft (R) AutoRest Code Generator. * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ /** Class representing a Container. */ var Container = /** @class */ (function () { /** * Initialize a new instance of the class Container class. * @param client Reference to the service client */ function Container(client) { this.client = client; } /** * creates a new container under the specified account. If the container with the same name already * exists, the operation fails * @param options The options parameters. */ Container.prototype.create = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, createOperationSpec); }; /** * returns all user-defined metadata and system properties for the specified container. The data * returned does not include the container's list of blobs * @param options The options parameters. */ Container.prototype.getProperties = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, getPropertiesOperationSpec$1); }; /** * operation marks the specified container for deletion. The container and any blobs contained within * it are later deleted during garbage collection * @param options The options parameters. */ Container.prototype.delete = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, deleteOperationSpec); }; /** * operation sets one or more user-defined name-value pairs for the specified container. * @param options The options parameters. */ Container.prototype.setMetadata = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, setMetadataOperationSpec); }; /** * gets the permissions for the specified container. The permissions indicate whether container data * may be accessed publicly. * @param options The options parameters. */ Container.prototype.getAccessPolicy = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, getAccessPolicyOperationSpec); }; /** * sets the permissions for the specified container. The permissions indicate whether blobs in a * container may be accessed publicly. * @param options The options parameters. */ Container.prototype.setAccessPolicy = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, setAccessPolicyOperationSpec); }; /** * Restores a previously-deleted container. * @param options The options parameters. */ Container.prototype.restore = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, restoreOperationSpec); }; /** * Renames an existing container. * @param sourceContainerName Required. Specifies the name of the container to rename. * @param options The options parameters. */ Container.prototype.rename = function (sourceContainerName, options) { var operationArguments = { sourceContainerName: sourceContainerName, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, renameOperationSpec); }; /** * The Batch operation allows multiple API calls to be embedded into a single HTTP request. * @param contentLength The length of the request. * @param multipartContentType Required. The value of this header must be multipart/mixed with a batch * boundary. Example header value: multipart/mixed; boundary=batch_ * @param body Initial data * @param options The options parameters. */ Container.prototype.submitBatch = function (contentLength, multipartContentType, body, options) { var operationArguments = { contentLength: contentLength, multipartContentType: multipartContentType, body: body, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, submitBatchOperationSpec$1); }; /** * [Update] establishes and manages a lock on a container for delete operations. The lock duration can * be 15 to 60 seconds, or can be infinite * @param options The options parameters. */ Container.prototype.acquireLease = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, acquireLeaseOperationSpec); }; /** * [Update] establishes and manages a lock on a container for delete operations. The lock duration can * be 15 to 60 seconds, or can be infinite * @param leaseId Specifies the current lease ID on the resource. * @param options The options parameters. */ Container.prototype.releaseLease = function (leaseId, options) { var operationArguments = { leaseId: leaseId, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, releaseLeaseOperationSpec); }; /** * [Update] establishes and manages a lock on a container for delete operations. The lock duration can * be 15 to 60 seconds, or can be infinite * @param leaseId Specifies the current lease ID on the resource. * @param options The options parameters. */ Container.prototype.renewLease = function (leaseId, options) { var operationArguments = { leaseId: leaseId, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, renewLeaseOperationSpec); }; /** * [Update] establishes and manages a lock on a container for delete operations. The lock duration can * be 15 to 60 seconds, or can be infinite * @param options The options parameters. */ Container.prototype.breakLease = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, breakLeaseOperationSpec); }; /** * [Update] establishes and manages a lock on a container for delete operations. The lock duration can * be 15 to 60 seconds, or can be infinite * @param leaseId Specifies the current lease ID on the resource. * @param proposedLeaseId Proposed lease ID, in a GUID string format. The Blob service returns 400 * (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor * (String) for a list of valid GUID string formats. * @param options The options parameters. */ Container.prototype.changeLease = function (leaseId, proposedLeaseId, options) { var operationArguments = { leaseId: leaseId, proposedLeaseId: proposedLeaseId, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, changeLeaseOperationSpec); }; /** * [Update] The List Blobs operation returns a list of the blobs under the specified container * @param options The options parameters. */ Container.prototype.listBlobFlatSegment = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, listBlobFlatSegmentOperationSpec); }; /** * [Update] The List Blobs operation returns a list of the blobs under the specified container * @param delimiter When the request includes this parameter, the operation returns a BlobPrefix * element in the response body that acts as a placeholder for all blobs whose names begin with the * same substring up to the appearance of the delimiter character. The delimiter may be a single * character or a string. * @param options The options parameters. */ Container.prototype.listBlobHierarchySegment = function (delimiter, options) { var operationArguments = { delimiter: delimiter, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, listBlobHierarchySegmentOperationSpec); }; /** * Returns the sku name and account kind * @param options The options parameters. */ Container.prototype.getAccountInfo = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, getAccountInfoOperationSpec$1); }; return Container; }()); // Operation Specifications var xmlSerializer$1 = new coreHttp.Serializer(Mappers, /* isXml */ true); var createOperationSpec = { path: "/{containerName}", httpMethod: "PUT", responses: { 201: { headersMapper: ContainerCreateHeaders }, default: { bodyMapper: StorageError, headersMapper: ContainerCreateExceptionHeaders } }, queryParameters: [timeoutInSeconds, restype2], urlParameters: [url], headerParameters: [ version, requestId, accept1, metadata, access, defaultEncryptionScope, preventEncryptionScopeOverride ], isXML: true, serializer: xmlSerializer$1 }; var getPropertiesOperationSpec$1 = { path: "/{containerName}", httpMethod: "GET", responses: { 200: { headersMapper: ContainerGetPropertiesHeaders }, default: { bodyMapper: StorageError, headersMapper: ContainerGetPropertiesExceptionHeaders } }, queryParameters: [timeoutInSeconds, restype2], urlParameters: [url], headerParameters: [ version, requestId, accept1, leaseId ], isXML: true, serializer: xmlSerializer$1 }; var deleteOperationSpec = { path: "/{containerName}", httpMethod: "DELETE", responses: { 202: { headersMapper: ContainerDeleteHeaders }, default: { bodyMapper: StorageError, headersMapper: ContainerDeleteExceptionHeaders } }, queryParameters: [timeoutInSeconds, restype2], urlParameters: [url], headerParameters: [ version, requestId, accept1, leaseId, ifModifiedSince, ifUnmodifiedSince ], isXML: true, serializer: xmlSerializer$1 }; var setMetadataOperationSpec = { path: "/{containerName}", httpMethod: "PUT", responses: { 200: { headersMapper: ContainerSetMetadataHeaders }, default: { bodyMapper: StorageError, headersMapper: ContainerSetMetadataExceptionHeaders } }, queryParameters: [ timeoutInSeconds, restype2, comp6 ], urlParameters: [url], headerParameters: [ version, requestId, accept1, metadata, leaseId, ifModifiedSince ], isXML: true, serializer: xmlSerializer$1 }; var getAccessPolicyOperationSpec = { path: "/{containerName}", httpMethod: "GET", responses: { 200: { bodyMapper: { type: { name: "Sequence", element: { type: { name: "Composite", className: "SignedIdentifier" } } }, serializedName: "SignedIdentifiers", xmlName: "SignedIdentifiers", xmlIsWrapped: true, xmlElementName: "SignedIdentifier" }, headersMapper: ContainerGetAccessPolicyHeaders }, default: { bodyMapper: StorageError, headersMapper: ContainerGetAccessPolicyExceptionHeaders } }, queryParameters: [ timeoutInSeconds, restype2, comp7 ], urlParameters: [url], headerParameters: [ version, requestId, accept1, leaseId ], isXML: true, serializer: xmlSerializer$1 }; var setAccessPolicyOperationSpec = { path: "/{containerName}", httpMethod: "PUT", responses: { 200: { headersMapper: ContainerSetAccessPolicyHeaders }, default: { bodyMapper: StorageError, headersMapper: ContainerSetAccessPolicyExceptionHeaders } }, requestBody: containerAcl, queryParameters: [ timeoutInSeconds, restype2, comp7 ], urlParameters: [url], headerParameters: [ contentType, accept, version, requestId, access, leaseId, ifModifiedSince, ifUnmodifiedSince ], isXML: true, contentType: "application/xml; charset=utf-8", mediaType: "xml", serializer: xmlSerializer$1 }; var restoreOperationSpec = { path: "/{containerName}", httpMethod: "PUT", responses: { 201: { headersMapper: ContainerRestoreHeaders }, default: { bodyMapper: StorageError, headersMapper: ContainerRestoreExceptionHeaders } }, queryParameters: [ timeoutInSeconds, restype2, comp8 ], urlParameters: [url], headerParameters: [ version, requestId, accept1, deletedContainerName, deletedContainerVersion ], isXML: true, serializer: xmlSerializer$1 }; var renameOperationSpec = { path: "/{containerName}", httpMethod: "PUT", responses: { 200: { headersMapper: ContainerRenameHeaders }, default: { bodyMapper: StorageError, headersMapper: ContainerRenameExceptionHeaders } }, queryParameters: [ timeoutInSeconds, restype2, comp9 ], urlParameters: [url], headerParameters: [ version, requestId, accept1, sourceContainerName, sourceLeaseId ], isXML: true, serializer: xmlSerializer$1 }; var submitBatchOperationSpec$1 = { path: "/{containerName}", httpMethod: "POST", responses: { 202: { bodyMapper: { type: { name: "Stream" }, serializedName: "parsedResponse" }, headersMapper: ContainerSubmitBatchHeaders }, default: { bodyMapper: StorageError, headersMapper: ContainerSubmitBatchExceptionHeaders } }, requestBody: body, queryParameters: [ timeoutInSeconds, comp4, restype2 ], urlParameters: [url], headerParameters: [ contentType, accept, version, requestId, contentLength, multipartContentType ], isXML: true, contentType: "application/xml; charset=utf-8", mediaType: "xml", serializer: xmlSerializer$1 }; var acquireLeaseOperationSpec = { path: "/{containerName}", httpMethod: "PUT", responses: { 201: { headersMapper: ContainerAcquireLeaseHeaders }, default: { bodyMapper: StorageError, headersMapper: ContainerAcquireLeaseExceptionHeaders } }, queryParameters: [ timeoutInSeconds, restype2, comp10 ], urlParameters: [url], headerParameters: [ version, requestId, accept1, ifModifiedSince, ifUnmodifiedSince, action, duration, proposedLeaseId ], isXML: true, serializer: xmlSerializer$1 }; var releaseLeaseOperationSpec = { path: "/{containerName}", httpMethod: "PUT", responses: { 200: { headersMapper: ContainerReleaseLeaseHeaders }, default: { bodyMapper: StorageError, headersMapper: ContainerReleaseLeaseExceptionHeaders } }, queryParameters: [ timeoutInSeconds, restype2, comp10 ], urlParameters: [url], headerParameters: [ version, requestId, accept1, ifModifiedSince, ifUnmodifiedSince, action1, leaseId1 ], isXML: true, serializer: xmlSerializer$1 }; var renewLeaseOperationSpec = { path: "/{containerName}", httpMethod: "PUT", responses: { 200: { headersMapper: ContainerRenewLeaseHeaders }, default: { bodyMapper: StorageError, headersMapper: ContainerRenewLeaseExceptionHeaders } }, queryParameters: [ timeoutInSeconds, restype2, comp10 ], urlParameters: [url], headerParameters: [ version, requestId, accept1, ifModifiedSince, ifUnmodifiedSince, leaseId1, action2 ], isXML: true, serializer: xmlSerializer$1 }; var breakLeaseOperationSpec = { path: "/{containerName}", httpMethod: "PUT", responses: { 202: { headersMapper: ContainerBreakLeaseHeaders }, default: { bodyMapper: StorageError, headersMapper: ContainerBreakLeaseExceptionHeaders } }, queryParameters: [ timeoutInSeconds, restype2, comp10 ], urlParameters: [url], headerParameters: [ version, requestId, accept1, ifModifiedSince, ifUnmodifiedSince, action3, breakPeriod ], isXML: true, serializer: xmlSerializer$1 }; var changeLeaseOperationSpec = { path: "/{containerName}", httpMethod: "PUT", responses: { 200: { headersMapper: ContainerChangeLeaseHeaders }, default: { bodyMapper: StorageError, headersMapper: ContainerChangeLeaseExceptionHeaders } }, queryParameters: [ timeoutInSeconds, restype2, comp10 ], urlParameters: [url], headerParameters: [ version, requestId, accept1, ifModifiedSince, ifUnmodifiedSince, leaseId1, action4, proposedLeaseId1 ], isXML: true, serializer: xmlSerializer$1 }; var listBlobFlatSegmentOperationSpec = { path: "/{containerName}", httpMethod: "GET", responses: { 200: { bodyMapper: ListBlobsFlatSegmentResponse, headersMapper: ContainerListBlobFlatSegmentHeaders }, default: { bodyMapper: StorageError, headersMapper: ContainerListBlobFlatSegmentExceptionHeaders } }, queryParameters: [ timeoutInSeconds, comp2, prefix, marker, maxPageSize, restype2, include1 ], urlParameters: [url], headerParameters: [ version, requestId, accept1 ], isXML: true, serializer: xmlSerializer$1 }; var listBlobHierarchySegmentOperationSpec = { path: "/{containerName}", httpMethod: "GET", responses: { 200: { bodyMapper: ListBlobsHierarchySegmentResponse, headersMapper: ContainerListBlobHierarchySegmentHeaders }, default: { bodyMapper: StorageError, headersMapper: ContainerListBlobHierarchySegmentExceptionHeaders } }, queryParameters: [ timeoutInSeconds, comp2, prefix, marker, maxPageSize, restype2, include1, delimiter ], urlParameters: [url], headerParameters: [ version, requestId, accept1 ], isXML: true, serializer: xmlSerializer$1 }; var getAccountInfoOperationSpec$1 = { path: "/{containerName}", httpMethod: "GET", responses: { 200: { headersMapper: ContainerGetAccountInfoHeaders }, default: { bodyMapper: StorageError, headersMapper: ContainerGetAccountInfoExceptionHeaders } }, queryParameters: [comp, restype1], urlParameters: [url], headerParameters: [version, accept1], isXML: true, serializer: xmlSerializer$1 }; /* * Copyright (c) Microsoft Corporation. * Licensed under the MIT License. * * Code generated by Microsoft (R) AutoRest Code Generator. * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ /** Class representing a Blob. */ var Blob$1 = /** @class */ (function () { /** * Initialize a new instance of the class Blob class. * @param client Reference to the service client */ function Blob(client) { this.client = client; } /** * The Download operation reads or downloads a blob from the system, including its metadata and * properties. You can also call Download to read a snapshot. * @param options The options parameters. */ Blob.prototype.download = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, downloadOperationSpec); }; /** * The Get Properties operation returns all user-defined metadata, standard HTTP properties, and system * properties for the blob. It does not return the content of the blob. * @param options The options parameters. */ Blob.prototype.getProperties = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, getPropertiesOperationSpec$2); }; /** * If the storage account's soft delete feature is disabled then, when a blob is deleted, it is * permanently removed from the storage account. If the storage account's soft delete feature is * enabled, then, when a blob is deleted, it is marked for deletion and becomes inaccessible * immediately. However, the blob service retains the blob or snapshot for the number of days specified * by the DeleteRetentionPolicy section of [Storage service properties] * (Set-Blob-Service-Properties.md). After the specified number of days has passed, the blob's data is * permanently removed from the storage account. Note that you continue to be charged for the * soft-deleted blob's storage until it is permanently removed. Use the List Blobs API and specify the * "include=deleted" query parameter to discover which blobs and snapshots have been soft deleted. You * can then use the Undelete Blob API to restore a soft-deleted blob. All other operations on a * soft-deleted blob or snapshot causes the service to return an HTTP status code of 404 * (ResourceNotFound). * @param options The options parameters. */ Blob.prototype.delete = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, deleteOperationSpec$1); }; /** * Set the owner, group, permissions, or access control list for a blob. * @param options The options parameters. */ Blob.prototype.setAccessControl = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, setAccessControlOperationSpec); }; /** * Get the owner, group, permissions, or access control list for a blob. * @param options The options parameters. */ Blob.prototype.getAccessControl = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, getAccessControlOperationSpec); }; /** * Rename a blob/file. By default, the destination is overwritten and if the destination already * exists and has a lease the lease is broken. This operation supports conditional HTTP requests. For * more information, see [Specifying Conditional Headers for Blob Service * Operations](https://docs.microsoft.com/en-us/rest/api/storageservices/specifying-conditional-headers-for-blob-service-operations). * To fail if the destination already exists, use a conditional request with If-None-Match: "*". * @param renameSource The file or directory to be renamed. The value must have the following format: * "/{filesysystem}/{path}". If "x-ms-properties" is specified, the properties will overwrite the * existing properties; otherwise, the existing properties will be preserved. * @param options The options parameters. */ Blob.prototype.rename = function (renameSource, options) { var operationArguments = { renameSource: renameSource, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, renameOperationSpec$1); }; /** * Undelete a blob that was previously soft deleted * @param options The options parameters. */ Blob.prototype.undelete = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, undeleteOperationSpec); }; /** * Sets the time a blob will expire and be deleted. * @param expiryOptions Required. Indicates mode of the expiry time * @param options The options parameters. */ Blob.prototype.setExpiry = function (expiryOptions, options) { var operationArguments = { expiryOptions: expiryOptions, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, setExpiryOperationSpec); }; /** * The Set HTTP Headers operation sets system properties on the blob * @param options The options parameters. */ Blob.prototype.setHttpHeaders = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, setHttpHeadersOperationSpec); }; /** * The Set Blob Metadata operation sets user-defined metadata for the specified blob as one or more * name-value pairs * @param options The options parameters. */ Blob.prototype.setMetadata = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, setMetadataOperationSpec$1); }; /** * [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete * operations * @param options The options parameters. */ Blob.prototype.acquireLease = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, acquireLeaseOperationSpec$1); }; /** * [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete * operations * @param leaseId Specifies the current lease ID on the resource. * @param options The options parameters. */ Blob.prototype.releaseLease = function (leaseId, options) { var operationArguments = { leaseId: leaseId, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, releaseLeaseOperationSpec$1); }; /** * [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete * operations * @param leaseId Specifies the current lease ID on the resource. * @param options The options parameters. */ Blob.prototype.renewLease = function (leaseId, options) { var operationArguments = { leaseId: leaseId, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, renewLeaseOperationSpec$1); }; /** * [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete * operations * @param leaseId Specifies the current lease ID on the resource. * @param proposedLeaseId Proposed lease ID, in a GUID string format. The Blob service returns 400 * (Invalid request) if the proposed lease ID is not in the correct format. See Guid Constructor * (String) for a list of valid GUID string formats. * @param options The options parameters. */ Blob.prototype.changeLease = function (leaseId, proposedLeaseId, options) { var operationArguments = { leaseId: leaseId, proposedLeaseId: proposedLeaseId, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, changeLeaseOperationSpec$1); }; /** * [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete * operations * @param options The options parameters. */ Blob.prototype.breakLease = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, breakLeaseOperationSpec$1); }; /** * The Create Snapshot operation creates a read-only snapshot of a blob * @param options The options parameters. */ Blob.prototype.createSnapshot = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, createSnapshotOperationSpec); }; /** * The Start Copy From URL operation copies a blob or an internet resource to a new blob. * @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up to * 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it would * appear in a request URI. The source blob must either be public or must be authenticated via a shared * access signature. * @param options The options parameters. */ Blob.prototype.startCopyFromURL = function (copySource, options) { var operationArguments = { copySource: copySource, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, startCopyFromURLOperationSpec); }; /** * The Copy From URL operation copies a blob or an internet resource to a new blob. It will not return * a response until the copy is complete. * @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up to * 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it would * appear in a request URI. The source blob must either be public or must be authenticated via a shared * access signature. * @param options The options parameters. */ Blob.prototype.copyFromURL = function (copySource, options) { var operationArguments = { copySource: copySource, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, copyFromURLOperationSpec); }; /** * The Abort Copy From URL operation aborts a pending Copy From URL operation, and leaves a destination * blob with zero length and full metadata. * @param copyId The copy identifier provided in the x-ms-copy-id header of the original Copy Blob * operation. * @param options The options parameters. */ Blob.prototype.abortCopyFromURL = function (copyId, options) { var operationArguments = { copyId: copyId, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, abortCopyFromURLOperationSpec); }; /** * The Set Tier operation sets the tier on a blob. The operation is allowed on a page blob in a premium * storage account and on a block blob in a blob storage account (locally redundant storage only). A * premium page blob's tier determines the allowed size, IOPS, and bandwidth of the blob. A block * blob's tier determines Hot/Cool/Archive storage type. This operation does not update the blob's * ETag. * @param tier Indicates the tier to be set on the blob. * @param options The options parameters. */ Blob.prototype.setTier = function (tier, options) { var operationArguments = { tier: tier, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, setTierOperationSpec); }; /** * Returns the sku name and account kind * @param options The options parameters. */ Blob.prototype.getAccountInfo = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, getAccountInfoOperationSpec$2); }; /** * The Query operation enables users to select/project on blob data by providing simple query * expressions. * @param options The options parameters. */ Blob.prototype.query = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, queryOperationSpec); }; /** * The Get Tags operation enables users to get the tags associated with a blob. * @param options The options parameters. */ Blob.prototype.getTags = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, getTagsOperationSpec); }; /** * The Set Tags operation enables users to set tags on a blob. * @param options The options parameters. */ Blob.prototype.setTags = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, setTagsOperationSpec); }; return Blob; }()); // Operation Specifications var xmlSerializer$2 = new coreHttp.Serializer(Mappers, /* isXml */ true); var downloadOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "GET", responses: { 200: { bodyMapper: { type: { name: "Stream" }, serializedName: "parsedResponse" }, headersMapper: BlobDownloadHeaders }, 206: { bodyMapper: { type: { name: "Stream" }, serializedName: "parsedResponse" }, headersMapper: BlobDownloadHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobDownloadExceptionHeaders } }, queryParameters: [ timeoutInSeconds, snapshot, versionId ], urlParameters: [url], headerParameters: [ version, requestId, accept1, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, range, rangeGetContentMD5, rangeGetContentCRC64, encryptionKey, encryptionKeySha256, encryptionAlgorithm, ifTags ], isXML: true, serializer: xmlSerializer$2 }; var getPropertiesOperationSpec$2 = { path: "/{containerName}/{blob}", httpMethod: "HEAD", responses: { 200: { headersMapper: BlobGetPropertiesHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobGetPropertiesExceptionHeaders } }, queryParameters: [ timeoutInSeconds, snapshot, versionId ], urlParameters: [url], headerParameters: [ version, requestId, accept1, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, encryptionKey, encryptionKeySha256, encryptionAlgorithm, ifTags ], isXML: true, serializer: xmlSerializer$2 }; var deleteOperationSpec$1 = { path: "/{containerName}/{blob}", httpMethod: "DELETE", responses: { 202: { headersMapper: BlobDeleteHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobDeleteExceptionHeaders } }, queryParameters: [ timeoutInSeconds, snapshot, versionId, blobDeleteType ], urlParameters: [url], headerParameters: [ version, requestId, accept1, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, ifTags, deleteSnapshots ], isXML: true, serializer: xmlSerializer$2 }; var setAccessControlOperationSpec = { path: "/{filesystem}/{path}", httpMethod: "PATCH", responses: { 200: { headersMapper: BlobSetAccessControlHeaders }, default: { bodyMapper: DataLakeStorageError, headersMapper: BlobSetAccessControlExceptionHeaders } }, queryParameters: [timeoutInSeconds, action5], urlParameters: [url], headerParameters: [ version, requestId, accept1, leaseId, ifModifiedSince, ifUnmodifiedSince, posixPermissions, ifMatch, ifNoneMatch, owner, group, posixAcl ], isXML: true, serializer: xmlSerializer$2 }; var getAccessControlOperationSpec = { path: "/{filesystem}/{path}", httpMethod: "HEAD", responses: { 200: { headersMapper: BlobGetAccessControlHeaders }, default: { bodyMapper: DataLakeStorageError, headersMapper: BlobGetAccessControlExceptionHeaders } }, queryParameters: [ timeoutInSeconds, action6, upn ], urlParameters: [url], headerParameters: [ version, requestId, accept1, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch ], isXML: true, serializer: xmlSerializer$2 }; var renameOperationSpec$1 = { path: "/{filesystem}/{path}", httpMethod: "PUT", responses: { 201: { headersMapper: BlobRenameHeaders }, default: { bodyMapper: DataLakeStorageError, headersMapper: BlobRenameExceptionHeaders } }, queryParameters: [timeoutInSeconds, pathRenameMode], urlParameters: [url], headerParameters: [ version, requestId, accept1, leaseId, ifModifiedSince, ifUnmodifiedSince, sourceLeaseId, directoryProperties, posixPermissions, posixUmask, cacheControl, contentType1, contentEncoding, contentLanguage, contentDisposition, ifMatch, ifNoneMatch, renameSource, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch ], isXML: true, serializer: xmlSerializer$2 }; var undeleteOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 200: { headersMapper: BlobUndeleteHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobUndeleteExceptionHeaders } }, queryParameters: [timeoutInSeconds, comp8], urlParameters: [url], headerParameters: [ version, requestId, accept1 ], isXML: true, serializer: xmlSerializer$2 }; var setExpiryOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 200: { headersMapper: BlobSetExpiryHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobSetExpiryExceptionHeaders } }, queryParameters: [timeoutInSeconds, comp11], urlParameters: [url], headerParameters: [ version, requestId, accept1, expiryOptions, expiresOn ], isXML: true, serializer: xmlSerializer$2 }; var setHttpHeadersOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 200: { headersMapper: BlobSetHttpHeadersHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobSetHttpHeadersExceptionHeaders } }, queryParameters: [comp, timeoutInSeconds], urlParameters: [url], headerParameters: [ version, requestId, accept1, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, ifTags, blobCacheControl, blobContentType, blobContentMD5, blobContentEncoding, blobContentLanguage, blobContentDisposition ], isXML: true, serializer: xmlSerializer$2 }; var setMetadataOperationSpec$1 = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 200: { headersMapper: BlobSetMetadataHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobSetMetadataExceptionHeaders } }, queryParameters: [timeoutInSeconds, comp6], urlParameters: [url], headerParameters: [ version, requestId, accept1, metadata, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, encryptionKey, encryptionKeySha256, encryptionAlgorithm, ifTags, encryptionScope ], isXML: true, serializer: xmlSerializer$2 }; var acquireLeaseOperationSpec$1 = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 201: { headersMapper: BlobAcquireLeaseHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobAcquireLeaseExceptionHeaders } }, queryParameters: [timeoutInSeconds, comp10], urlParameters: [url], headerParameters: [ version, requestId, accept1, ifModifiedSince, ifUnmodifiedSince, action, duration, proposedLeaseId, ifMatch, ifNoneMatch, ifTags ], isXML: true, serializer: xmlSerializer$2 }; var releaseLeaseOperationSpec$1 = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 200: { headersMapper: BlobReleaseLeaseHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobReleaseLeaseExceptionHeaders } }, queryParameters: [timeoutInSeconds, comp10], urlParameters: [url], headerParameters: [ version, requestId, accept1, ifModifiedSince, ifUnmodifiedSince, action1, leaseId1, ifMatch, ifNoneMatch, ifTags ], isXML: true, serializer: xmlSerializer$2 }; var renewLeaseOperationSpec$1 = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 200: { headersMapper: BlobRenewLeaseHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobRenewLeaseExceptionHeaders } }, queryParameters: [timeoutInSeconds, comp10], urlParameters: [url], headerParameters: [ version, requestId, accept1, ifModifiedSince, ifUnmodifiedSince, leaseId1, action2, ifMatch, ifNoneMatch, ifTags ], isXML: true, serializer: xmlSerializer$2 }; var changeLeaseOperationSpec$1 = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 200: { headersMapper: BlobChangeLeaseHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobChangeLeaseExceptionHeaders } }, queryParameters: [timeoutInSeconds, comp10], urlParameters: [url], headerParameters: [ version, requestId, accept1, ifModifiedSince, ifUnmodifiedSince, leaseId1, action4, proposedLeaseId1, ifMatch, ifNoneMatch, ifTags ], isXML: true, serializer: xmlSerializer$2 }; var breakLeaseOperationSpec$1 = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 202: { headersMapper: BlobBreakLeaseHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobBreakLeaseExceptionHeaders } }, queryParameters: [timeoutInSeconds, comp10], urlParameters: [url], headerParameters: [ version, requestId, accept1, ifModifiedSince, ifUnmodifiedSince, action3, breakPeriod, ifMatch, ifNoneMatch, ifTags ], isXML: true, serializer: xmlSerializer$2 }; var createSnapshotOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 201: { headersMapper: BlobCreateSnapshotHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobCreateSnapshotExceptionHeaders } }, queryParameters: [timeoutInSeconds, comp12], urlParameters: [url], headerParameters: [ version, requestId, accept1, metadata, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, encryptionKey, encryptionKeySha256, encryptionAlgorithm, ifTags, encryptionScope ], isXML: true, serializer: xmlSerializer$2 }; var startCopyFromURLOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 202: { headersMapper: BlobStartCopyFromURLHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobStartCopyFromURLExceptionHeaders } }, queryParameters: [timeoutInSeconds], urlParameters: [url], headerParameters: [ version, requestId, accept1, metadata, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, ifTags, tier, rehydratePriority, sourceIfTags, copySource, blobTagsString, sealBlob ], isXML: true, serializer: xmlSerializer$2 }; var copyFromURLOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 202: { headersMapper: BlobCopyFromURLHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobCopyFromURLExceptionHeaders } }, queryParameters: [timeoutInSeconds], urlParameters: [url], headerParameters: [ version, requestId, accept1, metadata, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, ifTags, tier, copySource, blobTagsString, xMsRequiresSync, sourceContentMD5 ], isXML: true, serializer: xmlSerializer$2 }; var abortCopyFromURLOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 204: { headersMapper: BlobAbortCopyFromURLHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobAbortCopyFromURLExceptionHeaders } }, queryParameters: [ timeoutInSeconds, comp13, copyId ], urlParameters: [url], headerParameters: [ version, requestId, accept1, leaseId, copyActionAbortConstant ], isXML: true, serializer: xmlSerializer$2 }; var setTierOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 200: { headersMapper: BlobSetTierHeaders }, 202: { headersMapper: BlobSetTierHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobSetTierExceptionHeaders } }, queryParameters: [ timeoutInSeconds, snapshot, versionId, comp14 ], urlParameters: [url], headerParameters: [ version, requestId, accept1, leaseId, ifTags, rehydratePriority, tier1 ], isXML: true, serializer: xmlSerializer$2 }; var getAccountInfoOperationSpec$2 = { path: "/{containerName}/{blob}", httpMethod: "GET", responses: { 200: { headersMapper: BlobGetAccountInfoHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobGetAccountInfoExceptionHeaders } }, queryParameters: [comp, restype1], urlParameters: [url], headerParameters: [version, accept1], isXML: true, serializer: xmlSerializer$2 }; var queryOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "POST", responses: { 200: { bodyMapper: { type: { name: "Stream" }, serializedName: "parsedResponse" }, headersMapper: BlobQueryHeaders }, 206: { bodyMapper: { type: { name: "Stream" }, serializedName: "parsedResponse" }, headersMapper: BlobQueryHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobQueryExceptionHeaders } }, requestBody: queryRequest, queryParameters: [ timeoutInSeconds, snapshot, comp15 ], urlParameters: [url], headerParameters: [ contentType, accept, version, requestId, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, encryptionKey, encryptionKeySha256, encryptionAlgorithm, ifTags ], isXML: true, contentType: "application/xml; charset=utf-8", mediaType: "xml", serializer: xmlSerializer$2 }; var getTagsOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "GET", responses: { 200: { bodyMapper: BlobTags, headersMapper: BlobGetTagsHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobGetTagsExceptionHeaders } }, queryParameters: [ timeoutInSeconds, snapshot, versionId, comp16 ], urlParameters: [url], headerParameters: [ version, requestId, accept1, leaseId, ifTags ], isXML: true, serializer: xmlSerializer$2 }; var setTagsOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 204: { headersMapper: BlobSetTagsHeaders }, default: { bodyMapper: StorageError, headersMapper: BlobSetTagsExceptionHeaders } }, requestBody: tags, queryParameters: [ timeoutInSeconds, versionId, comp16 ], urlParameters: [url], headerParameters: [ contentType, accept, version, requestId, leaseId, ifTags, transactionalContentMD5, transactionalContentCrc64 ], isXML: true, contentType: "application/xml; charset=utf-8", mediaType: "xml", serializer: xmlSerializer$2 }; /* * Copyright (c) Microsoft Corporation. * Licensed under the MIT License. * * Code generated by Microsoft (R) AutoRest Code Generator. * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ /** Class representing a PageBlob. */ var PageBlob = /** @class */ (function () { /** * Initialize a new instance of the class PageBlob class. * @param client Reference to the service client */ function PageBlob(client) { this.client = client; } /** * The Create operation creates a new page blob. * @param contentLength The length of the request. * @param blobContentLength This header specifies the maximum size for the page blob, up to 1 TB. The * page blob size must be aligned to a 512-byte boundary. * @param options The options parameters. */ PageBlob.prototype.create = function (contentLength, blobContentLength, options) { var operationArguments = { contentLength: contentLength, blobContentLength: blobContentLength, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, createOperationSpec$1); }; /** * The Upload Pages operation writes a range of pages to a page blob * @param contentLength The length of the request. * @param body Initial data * @param options The options parameters. */ PageBlob.prototype.uploadPages = function (contentLength, body, options) { var operationArguments = { contentLength: contentLength, body: body, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, uploadPagesOperationSpec); }; /** * The Clear Pages operation clears a set of pages from a page blob * @param contentLength The length of the request. * @param options The options parameters. */ PageBlob.prototype.clearPages = function (contentLength, options) { var operationArguments = { contentLength: contentLength, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, clearPagesOperationSpec); }; /** * The Upload Pages operation writes a range of pages to a page blob where the contents are read from a * URL * @param sourceUrl Specify a URL to the copy source. * @param sourceRange Bytes of source data in the specified range. The length of this range should * match the ContentLength header and x-ms-range/Range destination range header. * @param contentLength The length of the request. * @param range The range of bytes to which the source range would be written. The range should be 512 * aligned and range-end is required. * @param options The options parameters. */ PageBlob.prototype.uploadPagesFromURL = function (sourceUrl, sourceRange, contentLength, range, options) { var operationArguments = { sourceUrl: sourceUrl, sourceRange: sourceRange, contentLength: contentLength, range: range, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, uploadPagesFromURLOperationSpec); }; /** * The Get Page Ranges operation returns the list of valid page ranges for a page blob or snapshot of a * page blob * @param options The options parameters. */ PageBlob.prototype.getPageRanges = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, getPageRangesOperationSpec); }; /** * The Get Page Ranges Diff operation returns the list of valid page ranges for a page blob that were * changed between target blob and previous snapshot. * @param options The options parameters. */ PageBlob.prototype.getPageRangesDiff = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, getPageRangesDiffOperationSpec); }; /** * Resize the Blob * @param blobContentLength This header specifies the maximum size for the page blob, up to 1 TB. The * page blob size must be aligned to a 512-byte boundary. * @param options The options parameters. */ PageBlob.prototype.resize = function (blobContentLength, options) { var operationArguments = { blobContentLength: blobContentLength, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, resizeOperationSpec); }; /** * Update the sequence number of the blob * @param sequenceNumberAction Required if the x-ms-blob-sequence-number header is set for the request. * This property applies to page blobs only. This property indicates how the service should modify the * blob's sequence number * @param options The options parameters. */ PageBlob.prototype.updateSequenceNumber = function (sequenceNumberAction, options) { var operationArguments = { sequenceNumberAction: sequenceNumberAction, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, updateSequenceNumberOperationSpec); }; /** * The Copy Incremental operation copies a snapshot of the source page blob to a destination page blob. * The snapshot is copied such that only the differential changes between the previously copied * snapshot are transferred to the destination. The copied snapshots are complete copies of the * original snapshot and can be read or copied from as usual. This API is supported since REST version * 2016-05-31. * @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up to * 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it would * appear in a request URI. The source blob must either be public or must be authenticated via a shared * access signature. * @param options The options parameters. */ PageBlob.prototype.copyIncremental = function (copySource, options) { var operationArguments = { copySource: copySource, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, copyIncrementalOperationSpec); }; return PageBlob; }()); // Operation Specifications var xmlSerializer$3 = new coreHttp.Serializer(Mappers, /* isXml */ true); var serializer = new coreHttp.Serializer(Mappers, /* isXml */ false); var createOperationSpec$1 = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 201: { headersMapper: PageBlobCreateHeaders }, default: { bodyMapper: StorageError, headersMapper: PageBlobCreateExceptionHeaders } }, queryParameters: [timeoutInSeconds], urlParameters: [url], headerParameters: [ version, requestId, accept1, contentLength, metadata, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, encryptionKey, encryptionKeySha256, encryptionAlgorithm, ifTags, blobCacheControl, blobContentType, blobContentMD5, blobContentEncoding, blobContentLanguage, blobContentDisposition, encryptionScope, tier, blobTagsString, blobType, blobContentLength, blobSequenceNumber ], isXML: true, serializer: xmlSerializer$3 }; var uploadPagesOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 201: { headersMapper: PageBlobUploadPagesHeaders }, default: { bodyMapper: StorageError, headersMapper: PageBlobUploadPagesExceptionHeaders } }, requestBody: body1, queryParameters: [timeoutInSeconds, comp17], urlParameters: [url], headerParameters: [ version, requestId, contentLength, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, range, encryptionKey, encryptionKeySha256, encryptionAlgorithm, ifTags, encryptionScope, transactionalContentMD5, transactionalContentCrc64, contentType2, accept2, pageWrite, ifSequenceNumberLessThanOrEqualTo, ifSequenceNumberLessThan, ifSequenceNumberEqualTo ], mediaType: "binary", serializer: serializer }; var clearPagesOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 201: { headersMapper: PageBlobClearPagesHeaders }, default: { bodyMapper: StorageError, headersMapper: PageBlobClearPagesExceptionHeaders } }, queryParameters: [timeoutInSeconds, comp17], urlParameters: [url], headerParameters: [ version, requestId, accept1, contentLength, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, range, encryptionKey, encryptionKeySha256, encryptionAlgorithm, ifTags, encryptionScope, ifSequenceNumberLessThanOrEqualTo, ifSequenceNumberLessThan, ifSequenceNumberEqualTo, pageWrite1 ], isXML: true, serializer: xmlSerializer$3 }; var uploadPagesFromURLOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 201: { headersMapper: PageBlobUploadPagesFromURLHeaders }, default: { bodyMapper: StorageError, headersMapper: PageBlobUploadPagesFromURLExceptionHeaders } }, queryParameters: [timeoutInSeconds, comp17], urlParameters: [url], headerParameters: [ version, requestId, accept1, contentLength, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, encryptionKey, encryptionKeySha256, encryptionAlgorithm, ifTags, encryptionScope, sourceContentMD5, pageWrite, ifSequenceNumberLessThanOrEqualTo, ifSequenceNumberLessThan, ifSequenceNumberEqualTo, sourceUrl, sourceRange, sourceContentCrc64, range1 ], isXML: true, serializer: xmlSerializer$3 }; var getPageRangesOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "GET", responses: { 200: { bodyMapper: PageList, headersMapper: PageBlobGetPageRangesHeaders }, default: { bodyMapper: StorageError, headersMapper: PageBlobGetPageRangesExceptionHeaders } }, queryParameters: [ timeoutInSeconds, snapshot, comp18 ], urlParameters: [url], headerParameters: [ version, requestId, accept1, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, range, ifTags ], isXML: true, serializer: xmlSerializer$3 }; var getPageRangesDiffOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "GET", responses: { 200: { bodyMapper: PageList, headersMapper: PageBlobGetPageRangesDiffHeaders }, default: { bodyMapper: StorageError, headersMapper: PageBlobGetPageRangesDiffExceptionHeaders } }, queryParameters: [ timeoutInSeconds, snapshot, comp18, prevsnapshot ], urlParameters: [url], headerParameters: [ version, requestId, accept1, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, range, ifTags, prevSnapshotUrl ], isXML: true, serializer: xmlSerializer$3 }; var resizeOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 200: { headersMapper: PageBlobResizeHeaders }, default: { bodyMapper: StorageError, headersMapper: PageBlobResizeExceptionHeaders } }, queryParameters: [comp, timeoutInSeconds], urlParameters: [url], headerParameters: [ version, requestId, accept1, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, encryptionKey, encryptionKeySha256, encryptionAlgorithm, ifTags, encryptionScope, blobContentLength ], isXML: true, serializer: xmlSerializer$3 }; var updateSequenceNumberOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 200: { headersMapper: PageBlobUpdateSequenceNumberHeaders }, default: { bodyMapper: StorageError, headersMapper: PageBlobUpdateSequenceNumberExceptionHeaders } }, queryParameters: [comp, timeoutInSeconds], urlParameters: [url], headerParameters: [ version, requestId, accept1, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, ifTags, blobSequenceNumber, sequenceNumberAction ], isXML: true, serializer: xmlSerializer$3 }; var copyIncrementalOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 202: { headersMapper: PageBlobCopyIncrementalHeaders }, default: { bodyMapper: StorageError, headersMapper: PageBlobCopyIncrementalExceptionHeaders } }, queryParameters: [timeoutInSeconds, comp19], urlParameters: [url], headerParameters: [ version, requestId, accept1, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, ifTags, copySource ], isXML: true, serializer: xmlSerializer$3 }; /* * Copyright (c) Microsoft Corporation. * Licensed under the MIT License. * * Code generated by Microsoft (R) AutoRest Code Generator. * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ /** Class representing a AppendBlob. */ var AppendBlob = /** @class */ (function () { /** * Initialize a new instance of the class AppendBlob class. * @param client Reference to the service client */ function AppendBlob(client) { this.client = client; } /** * The Create Append Blob operation creates a new append blob. * @param contentLength The length of the request. * @param options The options parameters. */ AppendBlob.prototype.create = function (contentLength, options) { var operationArguments = { contentLength: contentLength, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, createOperationSpec$2); }; /** * The Append Block operation commits a new block of data to the end of an existing append blob. The * Append Block operation is permitted only if the blob was created with x-ms-blob-type set to * AppendBlob. Append Block is supported only on version 2015-02-21 version or later. * @param contentLength The length of the request. * @param body Initial data * @param options The options parameters. */ AppendBlob.prototype.appendBlock = function (contentLength, body, options) { var operationArguments = { contentLength: contentLength, body: body, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, appendBlockOperationSpec); }; /** * The Append Block operation commits a new block of data to the end of an existing append blob where * the contents are read from a source url. The Append Block operation is permitted only if the blob * was created with x-ms-blob-type set to AppendBlob. Append Block is supported only on version * 2015-02-21 version or later. * @param sourceUrl Specify a URL to the copy source. * @param contentLength The length of the request. * @param options The options parameters. */ AppendBlob.prototype.appendBlockFromUrl = function (sourceUrl, contentLength, options) { var operationArguments = { sourceUrl: sourceUrl, contentLength: contentLength, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, appendBlockFromUrlOperationSpec); }; /** * The Seal operation seals the Append Blob to make it read-only. Seal is supported only on version * 2019-12-12 version or later. * @param options The options parameters. */ AppendBlob.prototype.seal = function (options) { var operationArguments = { options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, sealOperationSpec); }; return AppendBlob; }()); // Operation Specifications var xmlSerializer$4 = new coreHttp.Serializer(Mappers, /* isXml */ true); var serializer$1 = new coreHttp.Serializer(Mappers, /* isXml */ false); var createOperationSpec$2 = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 201: { headersMapper: AppendBlobCreateHeaders }, default: { bodyMapper: StorageError, headersMapper: AppendBlobCreateExceptionHeaders } }, queryParameters: [timeoutInSeconds], urlParameters: [url], headerParameters: [ version, requestId, accept1, contentLength, metadata, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, encryptionKey, encryptionKeySha256, encryptionAlgorithm, ifTags, blobCacheControl, blobContentType, blobContentMD5, blobContentEncoding, blobContentLanguage, blobContentDisposition, encryptionScope, blobTagsString, blobType1 ], isXML: true, serializer: xmlSerializer$4 }; var appendBlockOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 201: { headersMapper: AppendBlobAppendBlockHeaders }, default: { bodyMapper: StorageError, headersMapper: AppendBlobAppendBlockExceptionHeaders } }, requestBody: body1, queryParameters: [timeoutInSeconds, comp20], urlParameters: [url], headerParameters: [ version, requestId, contentLength, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, encryptionKey, encryptionKeySha256, encryptionAlgorithm, ifTags, encryptionScope, transactionalContentMD5, transactionalContentCrc64, contentType2, accept2, maxSize, appendPosition ], mediaType: "binary", serializer: serializer$1 }; var appendBlockFromUrlOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 201: { headersMapper: AppendBlobAppendBlockFromUrlHeaders }, default: { bodyMapper: StorageError, headersMapper: AppendBlobAppendBlockFromUrlExceptionHeaders } }, queryParameters: [timeoutInSeconds, comp20], urlParameters: [url], headerParameters: [ version, requestId, accept1, contentLength, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, encryptionKey, encryptionKeySha256, encryptionAlgorithm, ifTags, encryptionScope, sourceContentMD5, transactionalContentMD5, sourceUrl, sourceContentCrc64, maxSize, appendPosition, sourceRange1 ], isXML: true, serializer: xmlSerializer$4 }; var sealOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 200: { headersMapper: AppendBlobSealHeaders }, default: { bodyMapper: StorageError, headersMapper: AppendBlobSealExceptionHeaders } }, queryParameters: [timeoutInSeconds, comp21], urlParameters: [url], headerParameters: [ version, requestId, accept1, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, appendPosition ], isXML: true, serializer: xmlSerializer$4 }; /* * Copyright (c) Microsoft Corporation. * Licensed under the MIT License. * * Code generated by Microsoft (R) AutoRest Code Generator. * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ /** Class representing a BlockBlob. */ var BlockBlob = /** @class */ (function () { /** * Initialize a new instance of the class BlockBlob class. * @param client Reference to the service client */ function BlockBlob(client) { this.client = client; } /** * The Upload Block Blob operation updates the content of an existing block blob. Updating an existing * block blob overwrites any existing metadata on the blob. Partial updates are not supported with Put * Blob; the content of the existing blob is overwritten with the content of the new blob. To perform a * partial update of the content of a block blob, use the Put Block List operation. * @param contentLength The length of the request. * @param body Initial data * @param options The options parameters. */ BlockBlob.prototype.upload = function (contentLength, body, options) { var operationArguments = { contentLength: contentLength, body: body, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, uploadOperationSpec); }; /** * The Put Blob from URL operation creates a new Block Blob where the contents of the blob are read * from a given URL. This API is supported beginning with the 2020-04-08 version. Partial updates are * not supported with Put Blob from URL; the content of an existing blob is overwritten with the * content of the new blob. To perform partial updates to a block blob’s contents using a source URL, * use the Put Block from URL API in conjunction with Put Block List. * @param contentLength The length of the request. * @param copySource Specifies the name of the source page blob snapshot. This value is a URL of up to * 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it would * appear in a request URI. The source blob must either be public or must be authenticated via a shared * access signature. * @param options The options parameters. */ BlockBlob.prototype.putBlobFromUrl = function (contentLength, copySource, options) { var operationArguments = { contentLength: contentLength, copySource: copySource, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, putBlobFromUrlOperationSpec); }; /** * The Stage Block operation creates a new block to be committed as part of a blob * @param blockId A valid Base64 string value that identifies the block. Prior to encoding, the string * must be less than or equal to 64 bytes in size. For a given blob, the length of the value specified * for the blockid parameter must be the same size for each block. * @param contentLength The length of the request. * @param body Initial data * @param options The options parameters. */ BlockBlob.prototype.stageBlock = function (blockId, contentLength, body, options) { var operationArguments = { blockId: blockId, contentLength: contentLength, body: body, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, stageBlockOperationSpec); }; /** * The Stage Block operation creates a new block to be committed as part of a blob where the contents * are read from a URL. * @param blockId A valid Base64 string value that identifies the block. Prior to encoding, the string * must be less than or equal to 64 bytes in size. For a given blob, the length of the value specified * for the blockid parameter must be the same size for each block. * @param contentLength The length of the request. * @param sourceUrl Specify a URL to the copy source. * @param options The options parameters. */ BlockBlob.prototype.stageBlockFromURL = function (blockId, contentLength, sourceUrl, options) { var operationArguments = { blockId: blockId, contentLength: contentLength, sourceUrl: sourceUrl, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, stageBlockFromURLOperationSpec); }; /** * The Commit Block List operation writes a blob by specifying the list of block IDs that make up the * blob. In order to be written as part of a blob, a block must have been successfully written to the * server in a prior Put Block operation. You can call Put Block List to update a blob by uploading * only those blocks that have changed, then committing the new and existing blocks together. You can * do this by specifying whether to commit a block from the committed block list or from the * uncommitted block list, or to commit the most recently uploaded version of the block, whichever list * it may belong to. * @param blocks * @param options The options parameters. */ BlockBlob.prototype.commitBlockList = function (blocks, options) { var operationArguments = { blocks: blocks, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, commitBlockListOperationSpec); }; /** * The Get Block List operation retrieves the list of blocks that have been uploaded as part of a block * blob * @param listType Specifies whether to return the list of committed blocks, the list of uncommitted * blocks, or both lists together. * @param options The options parameters. */ BlockBlob.prototype.getBlockList = function (listType, options) { var operationArguments = { listType: listType, options: coreHttp.operationOptionsToRequestOptionsBase(options || {}) }; return this.client.sendOperationRequest(operationArguments, getBlockListOperationSpec); }; return BlockBlob; }()); // Operation Specifications var xmlSerializer$5 = new coreHttp.Serializer(Mappers, /* isXml */ true); var serializer$2 = new coreHttp.Serializer(Mappers, /* isXml */ false); var uploadOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 201: { headersMapper: BlockBlobUploadHeaders }, default: { bodyMapper: StorageError, headersMapper: BlockBlobUploadExceptionHeaders } }, requestBody: body1, queryParameters: [timeoutInSeconds], urlParameters: [url], headerParameters: [ version, requestId, contentLength, metadata, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, encryptionKey, encryptionKeySha256, encryptionAlgorithm, ifTags, blobCacheControl, blobContentType, blobContentMD5, blobContentEncoding, blobContentLanguage, blobContentDisposition, encryptionScope, tier, blobTagsString, transactionalContentMD5, contentType2, accept2, blobType2 ], mediaType: "binary", serializer: serializer$2 }; var putBlobFromUrlOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 201: { headersMapper: BlockBlobPutBlobFromUrlHeaders }, default: { bodyMapper: StorageError, headersMapper: BlockBlobPutBlobFromUrlExceptionHeaders } }, queryParameters: [timeoutInSeconds], urlParameters: [url], headerParameters: [ version, requestId, accept1, contentLength, metadata, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, encryptionKey, encryptionKeySha256, encryptionAlgorithm, ifTags, blobCacheControl, blobContentType, blobContentMD5, blobContentEncoding, blobContentLanguage, blobContentDisposition, encryptionScope, tier, sourceIfTags, copySource, blobTagsString, sourceContentMD5, transactionalContentMD5, blobType2, copySourceBlobProperties ], isXML: true, serializer: xmlSerializer$5 }; var stageBlockOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 201: { headersMapper: BlockBlobStageBlockHeaders }, default: { bodyMapper: StorageError, headersMapper: BlockBlobStageBlockExceptionHeaders } }, requestBody: body1, queryParameters: [ timeoutInSeconds, comp22, blockId ], urlParameters: [url], headerParameters: [ version, requestId, contentLength, leaseId, encryptionKey, encryptionKeySha256, encryptionAlgorithm, encryptionScope, transactionalContentMD5, transactionalContentCrc64, contentType2, accept2 ], mediaType: "binary", serializer: serializer$2 }; var stageBlockFromURLOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 201: { headersMapper: BlockBlobStageBlockFromURLHeaders }, default: { bodyMapper: StorageError, headersMapper: BlockBlobStageBlockFromURLExceptionHeaders } }, queryParameters: [ timeoutInSeconds, comp22, blockId ], urlParameters: [url], headerParameters: [ version, requestId, accept1, contentLength, leaseId, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, encryptionKey, encryptionKeySha256, encryptionAlgorithm, encryptionScope, sourceContentMD5, sourceUrl, sourceContentCrc64, sourceRange1 ], isXML: true, serializer: xmlSerializer$5 }; var commitBlockListOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "PUT", responses: { 201: { headersMapper: BlockBlobCommitBlockListHeaders }, default: { bodyMapper: StorageError, headersMapper: BlockBlobCommitBlockListExceptionHeaders } }, requestBody: blocks, queryParameters: [timeoutInSeconds, comp23], urlParameters: [url], headerParameters: [ contentType, accept, version, requestId, metadata, leaseId, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, encryptionKey, encryptionKeySha256, encryptionAlgorithm, ifTags, blobCacheControl, blobContentType, blobContentMD5, blobContentEncoding, blobContentLanguage, blobContentDisposition, encryptionScope, tier, blobTagsString, transactionalContentMD5, transactionalContentCrc64 ], isXML: true, contentType: "application/xml; charset=utf-8", mediaType: "xml", serializer: xmlSerializer$5 }; var getBlockListOperationSpec = { path: "/{containerName}/{blob}", httpMethod: "GET", responses: { 200: { bodyMapper: BlockList, headersMapper: BlockBlobGetBlockListHeaders }, default: { bodyMapper: StorageError, headersMapper: BlockBlobGetBlockListExceptionHeaders } }, queryParameters: [ timeoutInSeconds, snapshot, comp23, listType ], urlParameters: [url], headerParameters: [ version, requestId, accept1, leaseId, ifTags ], isXML: true, serializer: xmlSerializer$5 }; // Copyright (c) Microsoft Corporation. /** * The `@azure/logger` configuration for this package. */ var logger = logger$1.createClientLogger("storage-blob"); // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. var SDK_VERSION = "12.6.0"; var SERVICE_VERSION = "2020-08-04"; var BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES = 256 * 1024 * 1024; // 256MB var BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES = 4000 * 1024 * 1024; // 4000MB var BLOCK_BLOB_MAX_BLOCKS = 50000; var DEFAULT_BLOCK_BUFFER_SIZE_BYTES = 8 * 1024 * 1024; // 8MB var DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES = 4 * 1024 * 1024; // 4MB var DEFAULT_MAX_DOWNLOAD_RETRY_REQUESTS = 5; /** * The OAuth scope to use with Azure Storage. */ var StorageOAuthScopes = "https://storage.azure.com/.default"; var URLConstants = { Parameters: { FORCE_BROWSER_NO_CACHE: "_", SIGNATURE: "sig", SNAPSHOT: "snapshot", VERSIONID: "versionid", TIMEOUT: "timeout" } }; var HTTPURLConnection = { HTTP_ACCEPTED: 202, HTTP_CONFLICT: 409, HTTP_NOT_FOUND: 404, HTTP_PRECON_FAILED: 412, HTTP_RANGE_NOT_SATISFIABLE: 416 }; var HeaderConstants = { AUTHORIZATION: "Authorization", AUTHORIZATION_SCHEME: "Bearer", CONTENT_ENCODING: "Content-Encoding", CONTENT_ID: "Content-ID", CONTENT_LANGUAGE: "Content-Language", CONTENT_LENGTH: "Content-Length", CONTENT_MD5: "Content-Md5", CONTENT_TRANSFER_ENCODING: "Content-Transfer-Encoding", CONTENT_TYPE: "Content-Type", COOKIE: "Cookie", DATE: "date", IF_MATCH: "if-match", IF_MODIFIED_SINCE: "if-modified-since", IF_NONE_MATCH: "if-none-match", IF_UNMODIFIED_SINCE: "if-unmodified-since", PREFIX_FOR_STORAGE: "x-ms-", RANGE: "Range", USER_AGENT: "User-Agent", X_MS_CLIENT_REQUEST_ID: "x-ms-client-request-id", X_MS_COPY_SOURCE: "x-ms-copy-source", X_MS_DATE: "x-ms-date", X_MS_ERROR_CODE: "x-ms-error-code", X_MS_VERSION: "x-ms-version" }; var ETagNone = ""; var ETagAny = "*"; var SIZE_1_MB = 1 * 1024 * 1024; var BATCH_MAX_REQUEST = 256; var BATCH_MAX_PAYLOAD_IN_BYTES = 4 * SIZE_1_MB; var HTTP_LINE_ENDING = "\r\n"; var HTTP_VERSION_1_1 = "HTTP/1.1"; var EncryptionAlgorithmAES25 = "AES256"; var DevelopmentConnectionString = "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;"; var StorageBlobLoggingAllowedHeaderNames = [ "Access-Control-Allow-Origin", "Cache-Control", "Content-Length", "Content-Type", "Date", "Request-Id", "traceparent", "Transfer-Encoding", "User-Agent", "x-ms-client-request-id", "x-ms-date", "x-ms-error-code", "x-ms-request-id", "x-ms-return-client-request-id", "x-ms-version", "Accept-Ranges", "Content-Disposition", "Content-Encoding", "Content-Language", "Content-MD5", "Content-Range", "ETag", "Last-Modified", "Server", "Vary", "x-ms-content-crc64", "x-ms-copy-action", "x-ms-copy-completion-time", "x-ms-copy-id", "x-ms-copy-progress", "x-ms-copy-status", "x-ms-has-immutability-policy", "x-ms-has-legal-hold", "x-ms-lease-state", "x-ms-lease-status", "x-ms-range", "x-ms-request-server-encrypted", "x-ms-server-encrypted", "x-ms-snapshot", "x-ms-source-range", "If-Match", "If-Modified-Since", "If-None-Match", "If-Unmodified-Since", "x-ms-access-tier", "x-ms-access-tier-change-time", "x-ms-access-tier-inferred", "x-ms-account-kind", "x-ms-archive-status", "x-ms-blob-append-offset", "x-ms-blob-cache-control", "x-ms-blob-committed-block-count", "x-ms-blob-condition-appendpos", "x-ms-blob-condition-maxsize", "x-ms-blob-content-disposition", "x-ms-blob-content-encoding", "x-ms-blob-content-language", "x-ms-blob-content-length", "x-ms-blob-content-md5", "x-ms-blob-content-type", "x-ms-blob-public-access", "x-ms-blob-sequence-number", "x-ms-blob-type", "x-ms-copy-destination-snapshot", "x-ms-creation-time", "x-ms-default-encryption-scope", "x-ms-delete-snapshots", "x-ms-delete-type-permanent", "x-ms-deny-encryption-scope-override", "x-ms-encryption-algorithm", "x-ms-if-sequence-number-eq", "x-ms-if-sequence-number-le", "x-ms-if-sequence-number-lt", "x-ms-incremental-copy", "x-ms-lease-action", "x-ms-lease-break-period", "x-ms-lease-duration", "x-ms-lease-id", "x-ms-lease-time", "x-ms-page-write", "x-ms-proposed-lease-id", "x-ms-range-get-content-md5", "x-ms-rehydrate-priority", "x-ms-sequence-number-action", "x-ms-sku-name", "x-ms-source-content-md5", "x-ms-source-if-match", "x-ms-source-if-modified-since", "x-ms-source-if-none-match", "x-ms-source-if-unmodified-since", "x-ms-tag-count", "x-ms-encryption-key-sha256", "x-ms-if-tags", "x-ms-source-if-tags" ]; var StorageBlobLoggingAllowedQueryParameters = [ "comp", "maxresults", "rscc", "rscd", "rsce", "rscl", "rsct", "se", "si", "sip", "sp", "spr", "sr", "srt", "ss", "st", "sv", "include", "marker", "prefix", "copyid", "restype", "blockid", "blocklisttype", "delimiter", "prevsnapshot", "ske", "skoid", "sks", "skt", "sktid", "skv", "snapshot" ]; // Copyright (c) Microsoft Corporation. /** * Reserved URL characters must be properly escaped for Storage services like Blob or File. * * ## URL encode and escape strategy for JS SDKs * * When customers pass a URL string into XxxClient classes constructor, the URL string may already be URL encoded or not. * But before sending to Azure Storage server, the URL must be encoded. However, it's hard for a SDK to guess whether the URL * string has been encoded or not. We have 2 potential strategies, and chose strategy two for the XxxClient constructors. * * ### Strategy One: Assume the customer URL string is not encoded, and always encode URL string in SDK. * * This is what legacy V2 SDK does, simple and works for most of the cases. * - When customer URL string is "http://account.blob.core.windows.net/con/b:", * 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. * - When customer URL string is "http://account.blob.core.windows.net/con/b%3A", * 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. * * But this strategy will make it not possible to create a blob with "?" in it's name. Because when customer URL string is * "http://account.blob.core.windows.net/con/blob?name", the "?name" will be treated as URL paramter instead of blob name. * If customer URL string is "http://account.blob.core.windows.net/con/blob%3Fname", a blob named "blob%3Fname" will be created. * 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. * We cannot accept a SDK cannot create a blob name with "?". So we implement strategy two: * * ### Strategy Two: SDK doesn't assume the URL has been encoded or not. It will just escape the special characters. * * 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. * - When customer URL string is "http://account.blob.core.windows.net/con/b:", * SDK will escape ":" like "http://account.blob.core.windows.net/con/b%3A" and send to server. A blob named "b:" will be created. * - When customer URL string is "http://account.blob.core.windows.net/con/b%3A", * 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. * - When customer URL string is "http://account.blob.core.windows.net/con/b%253A", * 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. * * This strategy gives us flexibility to create with any special characters. But "%" will be treated as a special characters, if the URL string * is not encoded, there shouldn't a "%" in the URL string, otherwise the URL is not a valid URL. * If customer needs to create a blob with "%" in it's blob name, use "%25" instead of "%". Just like above 3rd sample. * And following URL strings are invalid: * - "http://account.blob.core.windows.net/con/b%" * - "http://account.blob.core.windows.net/con/b%2" * - "http://account.blob.core.windows.net/con/b%G" * * Another special character is "?", use "%2F" to represent a blob name with "?" in a URL string. * * ### Strategy for containerName, blobName or other specific XXXName parameters in methods such as `containerClient.getBlobClient(blobName)` * * 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. * * @see https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-containers--blobs--and-metadata * @see https://docs.microsoft.com/en-us/rest/api/storageservices/naming-and-referencing-shares--directories--files--and-metadata * * @param url - */ function escapeURLPath(url) { var urlParsed = coreHttp.URLBuilder.parse(url); var path = urlParsed.getPath(); path = path || "/"; path = escape(path); urlParsed.setPath(path); return urlParsed.toString(); } function getProxyUriFromDevConnString(connectionString) { // Development Connection String // https://docs.microsoft.com/en-us/azure/storage/common/storage-configure-connection-string#connect-to-the-emulator-account-using-the-well-known-account-name-and-key var proxyUri = ""; if (connectionString.search("DevelopmentStorageProxyUri=") !== -1) { // CONNECTION_STRING=UseDevelopmentStorage=true;DevelopmentStorageProxyUri=http://myProxyUri var matchCredentials = connectionString.split(";"); for (var _i = 0, matchCredentials_1 = matchCredentials; _i < matchCredentials_1.length; _i++) { var element = matchCredentials_1[_i]; if (element.trim().startsWith("DevelopmentStorageProxyUri=")) { proxyUri = element.trim().match("DevelopmentStorageProxyUri=(.*)")[1]; } } } return proxyUri; } function getValueInConnString(connectionString, argument) { var elements = connectionString.split(";"); for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) { var element = elements_1[_i]; if (element.trim().startsWith(argument)) { return element.trim().match(argument + "=(.*)")[1]; } } return ""; } /** * Extracts the parts of an Azure Storage account connection string. * * @param connectionString - Connection string. * @returns String key value pairs of the storage account's url and credentials. */ function extractConnectionStringParts(connectionString) { var proxyUri = ""; if (connectionString.startsWith("UseDevelopmentStorage=true")) { // Development connection string proxyUri = getProxyUriFromDevConnString(connectionString); connectionString = DevelopmentConnectionString; } // Matching BlobEndpoint in the Account connection string var blobEndpoint = getValueInConnString(connectionString, "BlobEndpoint"); // Slicing off '/' at the end if exists // (The methods that use `extractConnectionStringParts` expect the url to not have `/` at the end) blobEndpoint = blobEndpoint.endsWith("/") ? blobEndpoint.slice(0, -1) : blobEndpoint; if (connectionString.search("DefaultEndpointsProtocol=") !== -1 && connectionString.search("AccountKey=") !== -1) { // Account connection string var defaultEndpointsProtocol = ""; var accountName = ""; var accountKey = Buffer.from("accountKey", "base64"); var endpointSuffix = ""; // Get account name and key accountName = getValueInConnString(connectionString, "AccountName"); accountKey = Buffer.from(getValueInConnString(connectionString, "AccountKey"), "base64"); if (!blobEndpoint) { // BlobEndpoint is not present in the Account connection string // Can be obtained from `${defaultEndpointsProtocol}://${accountName}.blob.${endpointSuffix}` defaultEndpointsProtocol = getValueInConnString(connectionString, "DefaultEndpointsProtocol"); var protocol = defaultEndpointsProtocol.toLowerCase(); if (protocol !== "https" && protocol !== "http") { throw new Error("Invalid DefaultEndpointsProtocol in the provided Connection String. Expecting 'https' or 'http'"); } endpointSuffix = getValueInConnString(connectionString, "EndpointSuffix"); if (!endpointSuffix) { throw new Error("Invalid EndpointSuffix in the provided Connection String"); } blobEndpoint = defaultEndpointsProtocol + "://" + accountName + ".blob." + endpointSuffix; } if (!accountName) { throw new Error("Invalid AccountName in the provided Connection String"); } else if (accountKey.length === 0) { throw new Error("Invalid AccountKey in the provided Connection String"); } return { kind: "AccountConnString", url: blobEndpoint, accountName: accountName, accountKey: accountKey, proxyUri: proxyUri }; } else { // SAS connection string var accountSas = getValueInConnString(connectionString, "SharedAccessSignature"); var accountName = getAccountNameFromUrl(blobEndpoint); if (!blobEndpoint) { throw new Error("Invalid BlobEndpoint in the provided SAS Connection String"); } else if (!accountSas) { throw new Error("Invalid SharedAccessSignature in the provided SAS Connection String"); } return { kind: "SASConnString", url: blobEndpoint, accountName: accountName, accountSas: accountSas }; } } /** * Internal escape method implemented Strategy Two mentioned in escapeURL() description. * * @param text - */ function escape(text) { return encodeURIComponent(text) .replace(/%2F/g, "/") // Don't escape for "/" .replace(/'/g, "%27") // Escape for "'" .replace(/\+/g, "%20") .replace(/%25/g, "%"); // Revert encoded "%" } /** * Append a string to URL path. Will remove duplicated "/" in front of the string * when URL path ends with a "/". * * @param url - Source URL string * @param name - String to be appended to URL * @returns An updated URL string */ function appendToURLPath(url, name) { var urlParsed = coreHttp.URLBuilder.parse(url); var path = urlParsed.getPath(); path = path ? (path.endsWith("/") ? "" + path + name : path + "/" + name) : name; urlParsed.setPath(path); return urlParsed.toString(); } /** * Set URL parameter name and value. If name exists in URL parameters, old value * will be replaced by name key. If not provide value, the parameter will be deleted. * * @param url - Source URL string * @param name - Parameter name * @param value - Parameter value * @returns An updated URL string */ function setURLParameter(url, name, value) { var urlParsed = coreHttp.URLBuilder.parse(url); urlParsed.setQueryParameter(name, value); return urlParsed.toString(); } /** * Get URL parameter by name. * * @param url - * @param name - */ function getURLParameter(url, name) { var urlParsed = coreHttp.URLBuilder.parse(url); return urlParsed.getQueryParameterValue(name); } /** * Set URL host. * * @param url - Source URL string * @param host - New host string * @returns An updated URL string */ function setURLHost(url, host) { var urlParsed = coreHttp.URLBuilder.parse(url); urlParsed.setHost(host); return urlParsed.toString(); } /** * Get URL path from an URL string. * * @param url - Source URL string */ function getURLPath(url) { var urlParsed = coreHttp.URLBuilder.parse(url); return urlParsed.getPath(); } /** * Get URL scheme from an URL string. * * @param url - Source URL string */ function getURLScheme(url) { var urlParsed = coreHttp.URLBuilder.parse(url); return urlParsed.getScheme(); } /** * Get URL path and query from an URL string. * * @param url - Source URL string */ function getURLPathAndQuery(url) { var urlParsed = coreHttp.URLBuilder.parse(url); var pathString = urlParsed.getPath(); if (!pathString) { throw new RangeError("Invalid url without valid path."); } var queryString = urlParsed.getQuery() || ""; queryString = queryString.trim(); if (queryString != "") { queryString = queryString.startsWith("?") ? queryString : "?" + queryString; // Ensure query string start with '?' } return "" + pathString + queryString; } /** * Get URL query key value pairs from an URL string. * * @param url - */ function getURLQueries(url) { var queryString = coreHttp.URLBuilder.parse(url).getQuery(); if (!queryString) { return {}; } queryString = queryString.trim(); queryString = queryString.startsWith("?") ? queryString.substr(1) : queryString; var querySubStrings = queryString.split("&"); querySubStrings = querySubStrings.filter(function (value) { var indexOfEqual = value.indexOf("="); var lastIndexOfEqual = value.lastIndexOf("="); return (indexOfEqual > 0 && indexOfEqual === lastIndexOfEqual && lastIndexOfEqual < value.length - 1); }); var queries = {}; for (var _i = 0, querySubStrings_1 = querySubStrings; _i < querySubStrings_1.length; _i++) { var querySubString = querySubStrings_1[_i]; var splitResults = querySubString.split("="); var key = splitResults[0]; var value = splitResults[1]; queries[key] = value; } return queries; } /** * Append a string to URL query. * * @param url - Source URL string. * @param queryParts - String to be appended to the URL query. * @returns An updated URL string. */ function appendToURLQuery(url, queryParts) { var urlParsed = coreHttp.URLBuilder.parse(url); var query = urlParsed.getQuery(); if (query) { query += "&" + queryParts; } else { query = queryParts; } urlParsed.setQuery(query); return urlParsed.toString(); } /** * Rounds a date off to seconds. * * @param date - * @param withMilliseconds - If true, YYYY-MM-DDThh:mm:ss.fffffffZ will be returned; * If false, YYYY-MM-DDThh:mm:ssZ will be returned. * @returns Date string in ISO8061 format, with or without 7 milliseconds component */ function truncatedISO8061Date(date, withMilliseconds) { if (withMilliseconds === void 0) { withMilliseconds = true; } // Date.toISOString() will return like "2018-10-29T06:34:36.139Z" var dateString = date.toISOString(); return withMilliseconds ? dateString.substring(0, dateString.length - 1) + "0000" + "Z" : dateString.substring(0, dateString.length - 5) + "Z"; } /** * Base64 encode. * * @param content - */ function base64encode(content) { return !coreHttp.isNode ? btoa(content) : Buffer.from(content).toString("base64"); } /** * Generate a 64 bytes base64 block ID string. * * @param blockIndex - */ function generateBlockID(blockIDPrefix, blockIndex) { // To generate a 64 bytes base64 string, source string should be 48 var maxSourceStringLength = 48; // A blob can have a maximum of 100,000 uncommitted blocks at any given time var maxBlockIndexLength = 6; var maxAllowedBlockIDPrefixLength = maxSourceStringLength - maxBlockIndexLength; if (blockIDPrefix.length > maxAllowedBlockIDPrefixLength) { blockIDPrefix = blockIDPrefix.slice(0, maxAllowedBlockIDPrefixLength); } var res = blockIDPrefix + padStart(blockIndex.toString(), maxSourceStringLength - blockIDPrefix.length, "0"); return base64encode(res); } /** * Delay specified time interval. * * @param timeInMs - * @param aborter - * @param abortError - */ function delay(timeInMs, aborter, abortError) { return tslib.__awaiter(this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { return [2 /*return*/, new Promise(function (resolve, reject) { var timeout; var abortHandler = function () { if (timeout !== undefined) { clearTimeout(timeout); } reject(abortError); }; var resolveHandler = function () { if (aborter !== undefined) { aborter.removeEventListener("abort", abortHandler); } resolve(); }; timeout = setTimeout(resolveHandler, timeInMs); if (aborter !== undefined) { aborter.addEventListener("abort", abortHandler); } })]; }); }); } /** * String.prototype.padStart() * * @param currentString - * @param targetLength - * @param padString - */ function padStart(currentString, targetLength, padString) { if (padString === void 0) { padString = " "; } // TS doesn't know this code needs to run downlevel sometimes. // @ts-expect-error if (String.prototype.padStart) { return currentString.padStart(targetLength, padString); } padString = padString || " "; if (currentString.length > targetLength) { return currentString; } else { targetLength = targetLength - currentString.length; if (targetLength > padString.length) { padString += padString.repeat(targetLength / padString.length); } return padString.slice(0, targetLength) + currentString; } } /** * If two strings are equal when compared case insensitive. * * @param str1 - * @param str2 - */ function iEqual(str1, str2) { return str1.toLocaleLowerCase() === str2.toLocaleLowerCase(); } /** * Extracts account name from the url * @param url - url to extract the account name from * @returns with the account name */ function getAccountNameFromUrl(url) { var parsedUrl = coreHttp.URLBuilder.parse(url); var accountName; try { if (parsedUrl.getHost().split(".")[1] === "blob") { // `${defaultEndpointsProtocol}://${accountName}.blob.${endpointSuffix}`; accountName = parsedUrl.getHost().split(".")[0]; } else if (isIpEndpointStyle(parsedUrl)) { // IPv4/IPv6 address hosts... Example - http://192.0.0.10:10001/devstoreaccount1/ // Single word domain without a [dot] in the endpoint... Example - http://localhost:10001/devstoreaccount1/ // .getPath() -> /devstoreaccount1/ accountName = parsedUrl.getPath().split("/")[1]; } else { // Custom domain case: "https://customdomain.com/containername/blob". accountName = ""; } return accountName; } catch (error) { throw new Error("Unable to extract accountName with provided information."); } } function isIpEndpointStyle(parsedUrl) { if (parsedUrl.getHost() == undefined) { return false; } var host = parsedUrl.getHost() + (parsedUrl.getPort() == undefined ? "" : ":" + parsedUrl.getPort()); // Case 1: Ipv6, use a broad regex to find out candidates whose host contains two ':'. // Case 2: localhost(:port), use broad regex to match port part. // Case 3: Ipv4, use broad regex which just check if host contains Ipv4. // For valid host please refer to https://man7.org/linux/man-pages/man7/hostname.7.html. return /^.*:.*:.*$|^localhost(:[0-9]+)?$|^(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])(\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])){3}(:[0-9]+)?$/.test(host); } /** * Convert Tags to encoded string. * * @param tags - */ function toBlobTagsString(tags) { if (tags === undefined) { return undefined; } var tagPairs = []; for (var key in tags) { if (tags.hasOwnProperty(key)) { var value = tags[key]; tagPairs.push(encodeURIComponent(key) + "=" + encodeURIComponent(value)); } } return tagPairs.join("&"); } /** * Convert Tags type to BlobTags. * * @param tags - */ function toBlobTags(tags) { if (tags === undefined) { return undefined; } var res = { blobTagSet: [] }; for (var key in tags) { if (tags.hasOwnProperty(key)) { var value = tags[key]; res.blobTagSet.push({ key: key, value: value }); } } return res; } /** * Covert BlobTags to Tags type. * * @param tags - */ function toTags(tags) { if (tags === undefined) { return undefined; } var res = {}; for (var _i = 0, _a = tags.blobTagSet; _i < _a.length; _i++) { var blobTag = _a[_i]; res[blobTag.key] = blobTag.value; } return res; } /** * Convert BlobQueryTextConfiguration to QuerySerialization type. * * @param textConfiguration - */ function toQuerySerialization(textConfiguration) { if (textConfiguration === undefined) { return undefined; } switch (textConfiguration.kind) { case "csv": return { format: { type: "delimited", delimitedTextConfiguration: { columnSeparator: textConfiguration.columnSeparator || ",", fieldQuote: textConfiguration.fieldQuote || "", recordSeparator: textConfiguration.recordSeparator, escapeChar: textConfiguration.escapeCharacter || "", headersPresent: textConfiguration.hasHeaders || false } } }; case "json": return { format: { type: "json", jsonTextConfiguration: { recordSeparator: textConfiguration.recordSeparator } } }; case "arrow": return { format: { type: "arrow", arrowConfiguration: { schema: textConfiguration.schema } } }; default: throw Error("Invalid BlobQueryTextConfiguration."); } } function parseObjectReplicationRecord(objectReplicationRecord) { if (!objectReplicationRecord) { return undefined; } if ("policy-id" in objectReplicationRecord) { // If the dictionary contains a key with policy id, we are not required to do any parsing since // the policy id should already be stored in the ObjectReplicationDestinationPolicyId. return undefined; } var orProperties = []; var _loop_1 = function (key) { var ids = key.split("_"); var policyPrefix = "or-"; if (ids[0].startsWith(policyPrefix)) { ids[0] = ids[0].substring(policyPrefix.length); } var rule = { ruleId: ids[1], replicationStatus: objectReplicationRecord[key] }; var policyIndex = orProperties.findIndex(function (policy) { return policy.policyId === ids[0]; }); if (policyIndex > -1) { orProperties[policyIndex].rules.push(rule); } else { orProperties.push({ policyId: ids[0], rules: [rule] }); } }; for (var key in objectReplicationRecord) { _loop_1(key); } return orProperties; } /** * Attach a TokenCredential to an object. * * @param thing - * @param credential - */ function attachCredential(thing, credential) { thing.credential = credential; return thing; } // Copyright (c) Microsoft Corporation. /** * StorageBrowserPolicy will handle differences between Node.js and browser runtime, including: * * 1. Browsers cache GET/HEAD requests by adding conditional headers such as 'IF_MODIFIED_SINCE'. * StorageBrowserPolicy is a policy used to add a timestamp query to GET/HEAD request URL * thus avoid the browser cache. * * 2. Remove cookie header for security * * 3. Remove content-length header to avoid browsers warning */ var StorageBrowserPolicy = /** @class */ (function (_super) { tslib.__extends(StorageBrowserPolicy, _super); /** * Creates an instance of StorageBrowserPolicy. * @param nextPolicy - * @param options - */ function StorageBrowserPolicy(nextPolicy, options) { return _super.call(this, nextPolicy, options) || this; } /** * Sends out request. * * @param request - */ StorageBrowserPolicy.prototype.sendRequest = function (request) { return tslib.__awaiter(this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { { return [2 /*return*/, this._nextPolicy.sendRequest(request)]; } }); }); }; return StorageBrowserPolicy; }(coreHttp.BaseRequestPolicy)); // Copyright (c) Microsoft Corporation. /** * StorageBrowserPolicyFactory is a factory class helping generating StorageBrowserPolicy objects. */ var StorageBrowserPolicyFactory = /** @class */ (function () { function StorageBrowserPolicyFactory() { } /** * Creates a StorageBrowserPolicyFactory object. * * @param nextPolicy - * @param options - */ StorageBrowserPolicyFactory.prototype.create = function (nextPolicy, options) { return new StorageBrowserPolicy(nextPolicy, options); }; return StorageBrowserPolicyFactory; }()); // Copyright (c) Microsoft Corporation. (function (StorageRetryPolicyType) { /** * Exponential retry. Retry time delay grows exponentially. */ StorageRetryPolicyType[StorageRetryPolicyType["EXPONENTIAL"] = 0] = "EXPONENTIAL"; /** * Linear retry. Retry time delay grows linearly. */ StorageRetryPolicyType[StorageRetryPolicyType["FIXED"] = 1] = "FIXED"; })(exports.StorageRetryPolicyType || (exports.StorageRetryPolicyType = {})); // Default values of StorageRetryOptions var DEFAULT_RETRY_OPTIONS = { maxRetryDelayInMs: 120 * 1000, maxTries: 4, retryDelayInMs: 4 * 1000, retryPolicyType: exports.StorageRetryPolicyType.EXPONENTIAL, secondaryHost: "", tryTimeoutInMs: undefined // Use server side default timeout strategy }; var RETRY_ABORT_ERROR = new abortController.AbortError("The operation was aborted."); /** * Retry policy with exponential retry and linear retry implemented. */ var StorageRetryPolicy = /** @class */ (function (_super) { tslib.__extends(StorageRetryPolicy, _super); /** * Creates an instance of RetryPolicy. * * @param nextPolicy - * @param options - * @param retryOptions - */ function StorageRetryPolicy(nextPolicy, options, retryOptions) { if (retryOptions === void 0) { retryOptions = DEFAULT_RETRY_OPTIONS; } var _this = _super.call(this, nextPolicy, options) || this; // Initialize retry options _this.retryOptions = { retryPolicyType: retryOptions.retryPolicyType ? retryOptions.retryPolicyType : DEFAULT_RETRY_OPTIONS.retryPolicyType, maxTries: retryOptions.maxTries && retryOptions.maxTries >= 1 ? Math.floor(retryOptions.maxTries) : DEFAULT_RETRY_OPTIONS.maxTries, tryTimeoutInMs: retryOptions.tryTimeoutInMs && retryOptions.tryTimeoutInMs >= 0 ? retryOptions.tryTimeoutInMs : DEFAULT_RETRY_OPTIONS.tryTimeoutInMs, retryDelayInMs: retryOptions.retryDelayInMs && retryOptions.retryDelayInMs >= 0 ? Math.min(retryOptions.retryDelayInMs, retryOptions.maxRetryDelayInMs ? retryOptions.maxRetryDelayInMs : DEFAULT_RETRY_OPTIONS.maxRetryDelayInMs) : DEFAULT_RETRY_OPTIONS.retryDelayInMs, maxRetryDelayInMs: retryOptions.maxRetryDelayInMs && retryOptions.maxRetryDelayInMs >= 0 ? retryOptions.maxRetryDelayInMs : DEFAULT_RETRY_OPTIONS.maxRetryDelayInMs, secondaryHost: retryOptions.secondaryHost ? retryOptions.secondaryHost : DEFAULT_RETRY_OPTIONS.secondaryHost }; return _this; } /** * Sends request. * * @param request - */ StorageRetryPolicy.prototype.sendRequest = function (request) { return tslib.__awaiter(this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { return [2 /*return*/, this.attemptSendRequest(request, false, 1)]; }); }); }; /** * Decide and perform next retry. Won't mutate request parameter. * * @param request - * @param secondaryHas404 - If attempt was against the secondary & it returned a StatusNotFound (404), then * the resource was not found. This may be due to replication delay. So, in this * case, we'll never try the secondary again for this operation. * @param attempt - How many retries has been attempted to performed, starting from 1, which includes * the attempt will be performed by this method call. */ StorageRetryPolicy.prototype.attemptSendRequest = function (request, secondaryHas404, attempt) { return tslib.__awaiter(this, void 0, void 0, function () { var newRequest, isPrimaryRetry, response, err_1; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: newRequest = request.clone(); isPrimaryRetry = secondaryHas404 || !this.retryOptions.secondaryHost || !(request.method === "GET" || request.method === "HEAD" || request.method === "OPTIONS") || attempt % 2 === 1; if (!isPrimaryRetry) { newRequest.url = setURLHost(newRequest.url, this.retryOptions.secondaryHost); } // Set the server-side timeout query parameter "timeout=[seconds]" if (this.retryOptions.tryTimeoutInMs) { newRequest.url = setURLParameter(newRequest.url, URLConstants.Parameters.TIMEOUT, Math.floor(this.retryOptions.tryTimeoutInMs / 1000).toString()); } _a.label = 1; case 1: _a.trys.push([1, 3, , 4]); logger.info("RetryPolicy: =====> Try=" + attempt + " " + (isPrimaryRetry ? "Primary" : "Secondary")); return [4 /*yield*/, this._nextPolicy.sendRequest(newRequest)]; case 2: response = _a.sent(); if (!this.shouldRetry(isPrimaryRetry, attempt, response)) { return [2 /*return*/, response]; } secondaryHas404 = secondaryHas404 || (!isPrimaryRetry && response.status === 404); return [3 /*break*/, 4]; case 3: err_1 = _a.sent(); logger.error("RetryPolicy: Caught error, message: " + err_1.message + ", code: " + err_1.code); if (!this.shouldRetry(isPrimaryRetry, attempt, response, err_1)) { throw err_1; } return [3 /*break*/, 4]; case 4: return [4 /*yield*/, this.delay(isPrimaryRetry, attempt, request.abortSignal)]; case 5: _a.sent(); return [4 /*yield*/, this.attemptSendRequest(request, secondaryHas404, ++attempt)]; case 6: return [2 /*return*/, _a.sent()]; } }); }); }; /** * Decide whether to retry according to last HTTP response and retry counters. * * @param isPrimaryRetry - * @param attempt - * @param response - * @param err - */ StorageRetryPolicy.prototype.shouldRetry = function (isPrimaryRetry, attempt, response, err) { if (attempt >= this.retryOptions.maxTries) { logger.info("RetryPolicy: Attempt(s) " + attempt + " >= maxTries " + this.retryOptions .maxTries + ", no further try."); return false; } // Handle network failures, you may need to customize the list when you implement // your own http client var retriableErrors = [ "ETIMEDOUT", "ESOCKETTIMEDOUT", "ECONNREFUSED", "ECONNRESET", "ENOENT", "ENOTFOUND", "TIMEOUT", "EPIPE", "REQUEST_SEND_ERROR" // For default xhr based http client provided in ms-rest-js ]; if (err) { for (var _i = 0, retriableErrors_1 = retriableErrors; _i < retriableErrors_1.length; _i++) { var retriableError = retriableErrors_1[_i]; if (err.name.toUpperCase().includes(retriableError) || err.message.toUpperCase().includes(retriableError) || (err.code && err.code.toString().toUpperCase() === retriableError)) { logger.info("RetryPolicy: Network error " + retriableError + " found, will retry."); return true; } } } // If attempt was against the secondary & it returned a StatusNotFound (404), then // the resource was not found. This may be due to replication delay. So, in this // case, we'll never try the secondary again for this operation. if (response || err) { var statusCode = response ? response.status : err ? err.statusCode : 0; if (!isPrimaryRetry && statusCode === 404) { logger.info("RetryPolicy: Secondary access with 404, will retry."); return true; } // Server internal error or server timeout if (statusCode === 503 || statusCode === 500) { logger.info("RetryPolicy: Will retry for status code " + statusCode + "."); return true; } } if ((err === null || err === void 0 ? void 0 : err.code) === "PARSE_ERROR" && (err === null || err === void 0 ? void 0 : err.message.startsWith("Error \"Error: Unclosed root tag"))) { logger.info("RetryPolicy: Incomplete XML response likely due to service timeout, will retry."); return true; } return false; }; /** * Delay a calculated time between retries. * * @param isPrimaryRetry - * @param attempt - * @param abortSignal - */ StorageRetryPolicy.prototype.delay = function (isPrimaryRetry, attempt, abortSignal) { return tslib.__awaiter(this, void 0, void 0, function () { var delayTimeInMs; return tslib.__generator(this, function (_a) { delayTimeInMs = 0; if (isPrimaryRetry) { switch (this.retryOptions.retryPolicyType) { case exports.StorageRetryPolicyType.EXPONENTIAL: delayTimeInMs = Math.min((Math.pow(2, attempt - 1) - 1) * this.retryOptions.retryDelayInMs, this.retryOptions.maxRetryDelayInMs); break; case exports.StorageRetryPolicyType.FIXED: delayTimeInMs = this.retryOptions.retryDelayInMs; break; } } else { delayTimeInMs = Math.random() * 1000; } logger.info("RetryPolicy: Delay for " + delayTimeInMs + "ms"); return [2 /*return*/, delay(delayTimeInMs, abortSignal, RETRY_ABORT_ERROR)]; }); }); }; return StorageRetryPolicy; }(coreHttp.BaseRequestPolicy)); // Copyright (c) Microsoft Corporation. /** * StorageRetryPolicyFactory is a factory class helping generating {@link StorageRetryPolicy} objects. */ var StorageRetryPolicyFactory = /** @class */ (function () { /** * Creates an instance of StorageRetryPolicyFactory. * @param retryOptions - */ function StorageRetryPolicyFactory(retryOptions) { this.retryOptions = retryOptions; } /** * Creates a StorageRetryPolicy object. * * @param nextPolicy - * @param options - */ StorageRetryPolicyFactory.prototype.create = function (nextPolicy, options) { return new StorageRetryPolicy(nextPolicy, options, this.retryOptions); }; return StorageRetryPolicyFactory; }()); // Copyright (c) Microsoft Corporation. /** * Credential policy used to sign HTTP(S) requests before sending. This is an * abstract class. */ var CredentialPolicy = /** @class */ (function (_super) { tslib.__extends(CredentialPolicy, _super); function CredentialPolicy() { return _super !== null && _super.apply(this, arguments) || this; } /** * Sends out request. * * @param request - */ CredentialPolicy.prototype.sendRequest = function (request) { return this._nextPolicy.sendRequest(this.signRequest(request)); }; /** * Child classes must implement this method with request signing. This method * will be executed in {@link sendRequest}. * * @param request - */ CredentialPolicy.prototype.signRequest = function (request) { // Child classes must override this method with request signing. This method // will be executed in sendRequest(). return request; }; return CredentialPolicy; }(coreHttp.BaseRequestPolicy)); // Copyright (c) Microsoft Corporation. /** * AnonymousCredentialPolicy is used with HTTP(S) requests that read public resources * or for use with Shared Access Signatures (SAS). */ var AnonymousCredentialPolicy = /** @class */ (function (_super) { tslib.__extends(AnonymousCredentialPolicy, _super); /** * Creates an instance of AnonymousCredentialPolicy. * @param nextPolicy - * @param options - */ function AnonymousCredentialPolicy(nextPolicy, options) { return _super.call(this, nextPolicy, options) || this; } return AnonymousCredentialPolicy; }(CredentialPolicy)); // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. /** * Credential is an abstract class for Azure Storage HTTP requests signing. This * class will host an credentialPolicyCreator factory which generates CredentialPolicy. */ var Credential = /** @class */ (function () { function Credential() { } /** * Creates a RequestPolicy object. * * @param _nextPolicy - * @param _options - */ Credential.prototype.create = function ( // tslint:disable-next-line:variable-name _nextPolicy, // tslint:disable-next-line:variable-name _options) { throw new Error("Method should be implemented in children classes."); }; return Credential; }()); // Copyright (c) Microsoft Corporation. /** * AnonymousCredential provides a credentialPolicyCreator member used to create * AnonymousCredentialPolicy objects. AnonymousCredentialPolicy is used with * HTTP(S) requests that read public resources or for use with Shared Access * Signatures (SAS). */ var AnonymousCredential = /** @class */ (function (_super) { tslib.__extends(AnonymousCredential, _super); function AnonymousCredential() { return _super !== null && _super.apply(this, arguments) || this; } /** * Creates an {@link AnonymousCredentialPolicy} object. * * @param nextPolicy - * @param options - */ AnonymousCredential.prototype.create = function (nextPolicy, options) { return new AnonymousCredentialPolicy(nextPolicy, options); }; return AnonymousCredential; }(Credential)); // Copyright (c) Microsoft Corporation. /** * TelemetryPolicy is a policy used to tag user-agent header for every requests. */ var TelemetryPolicy = /** @class */ (function (_super) { tslib.__extends(TelemetryPolicy, _super); /** * Creates an instance of TelemetryPolicy. * @param nextPolicy - * @param options - * @param telemetry - */ function TelemetryPolicy(nextPolicy, options, telemetry) { var _this = _super.call(this, nextPolicy, options) || this; _this.telemetry = telemetry; return _this; } /** * Sends out request. * * @param request - */ TelemetryPolicy.prototype.sendRequest = function (request) { return tslib.__awaiter(this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { { if (!request.headers) { request.headers = new coreHttp.HttpHeaders(); } if (!request.headers.get(HeaderConstants.USER_AGENT)) { request.headers.set(HeaderConstants.USER_AGENT, this.telemetry); } } return [2 /*return*/, this._nextPolicy.sendRequest(request)]; }); }); }; return TelemetryPolicy; }(coreHttp.BaseRequestPolicy)); // Copyright (c) Microsoft Corporation. /** * TelemetryPolicyFactory is a factory class helping generating {@link TelemetryPolicy} objects. */ var TelemetryPolicyFactory = /** @class */ (function () { /** * Creates an instance of TelemetryPolicyFactory. * @param telemetry - */ function TelemetryPolicyFactory(telemetry) { var userAgentInfo = []; { if (telemetry) { var telemetryString = telemetry.userAgentPrefix || ""; if (telemetryString.length > 0 && userAgentInfo.indexOf(telemetryString) === -1) { userAgentInfo.push(telemetryString); } } // e.g. azsdk-js-storageblob/10.0.0 var libInfo = "azsdk-js-storageblob/" + SDK_VERSION; if (userAgentInfo.indexOf(libInfo) === -1) { userAgentInfo.push(libInfo); } // e.g. (NODE-VERSION 4.9.1; Windows_NT 10.0.16299) var runtimeInfo = "(NODE-VERSION " + process.version + "; " + os.type() + " " + os.release() + ")"; if (userAgentInfo.indexOf(runtimeInfo) === -1) { userAgentInfo.push(runtimeInfo); } } this.telemetryString = userAgentInfo.join(" "); } /** * Creates a TelemetryPolicy object. * * @param nextPolicy - * @param options - */ TelemetryPolicyFactory.prototype.create = function (nextPolicy, options) { return new TelemetryPolicy(nextPolicy, options, this.telemetryString); }; return TelemetryPolicyFactory; }()); // Copyright (c) Microsoft Corporation. var _defaultHttpClient = new coreHttp.DefaultHttpClient(); function getCachedDefaultHttpClient() { return _defaultHttpClient; } // Copyright (c) Microsoft Corporation. /** * A Pipeline class containing HTTP request policies. * You can create a default Pipeline by calling {@link newPipeline}. * Or you can create a Pipeline with your own policies by the constructor of Pipeline. * * Refer to {@link newPipeline} and provided policies before implementing your * customized Pipeline. */ var Pipeline = /** @class */ (function () { /** * Creates an instance of Pipeline. Customize HTTPClient by implementing IHttpClient interface. * * @param factories - * @param options - */ function Pipeline(factories, options) { if (options === void 0) { options = {}; } this.factories = factories; // when options.httpClient is not specified, passing in a DefaultHttpClient instance to // avoid each client creating its own http client. this.options = tslib.__assign(tslib.__assign({}, options), { httpClient: options.httpClient || getCachedDefaultHttpClient() }); } /** * Transfer Pipeline object to ServiceClientOptions object which is required by * ServiceClient constructor. * * @returns The ServiceClientOptions object from this Pipeline. */ Pipeline.prototype.toServiceClientOptions = function () { return { httpClient: this.options.httpClient, requestPolicyFactories: this.factories }; }; return Pipeline; }()); /** * Creates a new Pipeline object with Credential provided. * * @param credential - Such as AnonymousCredential, StorageSharedKeyCredential or any credential from the `@azure/identity` package to authenticate requests to the service. You can also provide an object that implements the TokenCredential interface. If not specified, AnonymousCredential is used. * @param pipelineOptions - Optional. Options. * @returns A new Pipeline object. */ function newPipeline(credential, pipelineOptions) { if (pipelineOptions === void 0) { pipelineOptions = {}; } if (credential === undefined) { credential = new AnonymousCredential(); } // Order is important. Closer to the API at the top & closer to the network at the bottom. // The credential's policy factory must appear close to the wire so it can sign any // changes made by other factories (like UniqueRequestIDPolicyFactory) var telemetryPolicy = new TelemetryPolicyFactory(pipelineOptions.userAgentOptions); var factories = [ coreHttp.tracingPolicy({ userAgent: telemetryPolicy.telemetryString }), coreHttp.keepAlivePolicy(pipelineOptions.keepAliveOptions), telemetryPolicy, coreHttp.generateClientRequestIdPolicy(), new StorageBrowserPolicyFactory(), new StorageRetryPolicyFactory(pipelineOptions.retryOptions), // Default deserializationPolicy is provided by protocol layer // Use customized XML char key of "#" so we could deserialize metadata // with "_" key coreHttp.deserializationPolicy(undefined, { xmlCharKey: "#" }), coreHttp.logPolicy({ logger: logger.info, allowedHeaderNames: StorageBlobLoggingAllowedHeaderNames, allowedQueryParameters: StorageBlobLoggingAllowedQueryParameters }) ]; { // policies only available in Node.js runtime, not in browsers factories.push(coreHttp.proxyPolicy(pipelineOptions.proxyOptions)); factories.push(coreHttp.disableResponseDecompressionPolicy()); } factories.push(coreHttp.isTokenCredential(credential) ? attachCredential(coreHttp.bearerTokenAuthenticationPolicy(credential, StorageOAuthScopes), credential) : credential); return new Pipeline(factories, pipelineOptions); } // Copyright (c) Microsoft Corporation. /** * StorageSharedKeyCredentialPolicy is a policy used to sign HTTP request with a shared key. */ var StorageSharedKeyCredentialPolicy = /** @class */ (function (_super) { tslib.__extends(StorageSharedKeyCredentialPolicy, _super); /** * Creates an instance of StorageSharedKeyCredentialPolicy. * @param nextPolicy - * @param options - * @param factory - */ function StorageSharedKeyCredentialPolicy(nextPolicy, options, factory) { var _this = _super.call(this, nextPolicy, options) || this; _this.factory = factory; return _this; } /** * Signs request. * * @param request - */ StorageSharedKeyCredentialPolicy.prototype.signRequest = function (request) { request.headers.set(HeaderConstants.X_MS_DATE, new Date().toUTCString()); if (request.body && typeof request.body === "string" && request.body.length > 0) { request.headers.set(HeaderConstants.CONTENT_LENGTH, Buffer.byteLength(request.body)); } var stringToSign = [ request.method.toUpperCase(), this.getHeaderValueToSign(request, HeaderConstants.CONTENT_LANGUAGE), this.getHeaderValueToSign(request, HeaderConstants.CONTENT_ENCODING), this.getHeaderValueToSign(request, HeaderConstants.CONTENT_LENGTH), this.getHeaderValueToSign(request, HeaderConstants.CONTENT_MD5), this.getHeaderValueToSign(request, HeaderConstants.CONTENT_TYPE), this.getHeaderValueToSign(request, HeaderConstants.DATE), this.getHeaderValueToSign(request, HeaderConstants.IF_MODIFIED_SINCE), this.getHeaderValueToSign(request, HeaderConstants.IF_MATCH), this.getHeaderValueToSign(request, HeaderConstants.IF_NONE_MATCH), this.getHeaderValueToSign(request, HeaderConstants.IF_UNMODIFIED_SINCE), this.getHeaderValueToSign(request, HeaderConstants.RANGE) ].join("\n") + "\n" + this.getCanonicalizedHeadersString(request) + this.getCanonicalizedResourceString(request); var signature = this.factory.computeHMACSHA256(stringToSign); request.headers.set(HeaderConstants.AUTHORIZATION, "SharedKey " + this.factory.accountName + ":" + signature); // console.log(`[URL]:${request.url}`); // console.log(`[HEADERS]:${request.headers.toString()}`); // console.log(`[STRING TO SIGN]:${JSON.stringify(stringToSign)}`); // console.log(`[KEY]: ${request.headers.get(HeaderConstants.AUTHORIZATION)}`); return request; }; /** * Retrieve header value according to shared key sign rules. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/authenticate-with-shared-key * * @param request - * @param headerName - */ StorageSharedKeyCredentialPolicy.prototype.getHeaderValueToSign = function (request, headerName) { var value = request.headers.get(headerName); if (!value) { return ""; } // When using version 2015-02-21 or later, if Content-Length is zero, then // set the Content-Length part of the StringToSign to an empty string. // https://docs.microsoft.com/en-us/rest/api/storageservices/authenticate-with-shared-key if (headerName === HeaderConstants.CONTENT_LENGTH && value === "0") { return ""; } return value; }; /** * To construct the CanonicalizedHeaders portion of the signature string, follow these steps: * 1. Retrieve all headers for the resource that begin with x-ms-, including the x-ms-date header. * 2. Convert each HTTP header name to lowercase. * 3. Sort the headers lexicographically by header name, in ascending order. * Each header may appear only once in the string. * 4. Replace any linear whitespace in the header value with a single space. * 5. Trim any whitespace around the colon in the header. * 6. Finally, append a new-line character to each canonicalized header in the resulting list. * Construct the CanonicalizedHeaders string by concatenating all headers in this list into a single string. * * @param request - */ StorageSharedKeyCredentialPolicy.prototype.getCanonicalizedHeadersString = function (request) { var headersArray = request.headers.headersArray().filter(function (value) { return value.name.toLowerCase().startsWith(HeaderConstants.PREFIX_FOR_STORAGE); }); headersArray.sort(function (a, b) { return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); }); // Remove duplicate headers headersArray = headersArray.filter(function (value, index, array) { if (index > 0 && value.name.toLowerCase() === array[index - 1].name.toLowerCase()) { return false; } return true; }); var canonicalizedHeadersStringToSign = ""; headersArray.forEach(function (header) { canonicalizedHeadersStringToSign += header.name .toLowerCase() .trimRight() + ":" + header.value.trimLeft() + "\n"; }); return canonicalizedHeadersStringToSign; }; /** * Retrieves the webResource canonicalized resource string. * * @param request - */ StorageSharedKeyCredentialPolicy.prototype.getCanonicalizedResourceString = function (request) { var path = getURLPath(request.url) || "/"; var canonicalizedResourceString = ""; canonicalizedResourceString += "/" + this.factory.accountName + path; var queries = getURLQueries(request.url); var lowercaseQueries = {}; if (queries) { var queryKeys = []; for (var key in queries) { if (queries.hasOwnProperty(key)) { var lowercaseKey = key.toLowerCase(); lowercaseQueries[lowercaseKey] = queries[key]; queryKeys.push(lowercaseKey); } } queryKeys.sort(); for (var _i = 0, queryKeys_1 = queryKeys; _i < queryKeys_1.length; _i++) { var key = queryKeys_1[_i]; canonicalizedResourceString += "\n" + key + ":" + decodeURIComponent(lowercaseQueries[key]); } } return canonicalizedResourceString; }; return StorageSharedKeyCredentialPolicy; }(CredentialPolicy)); // Copyright (c) Microsoft Corporation. /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * * StorageSharedKeyCredential for account key authorization of Azure Storage service. */ var StorageSharedKeyCredential = /** @class */ (function (_super) { tslib.__extends(StorageSharedKeyCredential, _super); /** * Creates an instance of StorageSharedKeyCredential. * @param accountName - * @param accountKey - */ function StorageSharedKeyCredential(accountName, accountKey) { var _this = _super.call(this) || this; _this.accountName = accountName; _this.accountKey = Buffer.from(accountKey, "base64"); return _this; } /** * Creates a StorageSharedKeyCredentialPolicy object. * * @param nextPolicy - * @param options - */ StorageSharedKeyCredential.prototype.create = function (nextPolicy, options) { return new StorageSharedKeyCredentialPolicy(nextPolicy, options, this); }; /** * Generates a hash signature for an HTTP request or for a SAS. * * @param stringToSign - */ StorageSharedKeyCredential.prototype.computeHMACSHA256 = function (stringToSign) { return crypto.createHmac("sha256", this.accountKey) .update(stringToSign, "utf8") .digest("base64"); }; return StorageSharedKeyCredential; }(Credential)); /* * Copyright (c) Microsoft Corporation. * Licensed under the MIT License. * * Code generated by Microsoft (R) AutoRest Code Generator. * Changes may cause incorrect behavior and will be lost if the code is regenerated. */ var packageName = "azure-storage-blob"; var packageVersion = "12.6.0-beta.1"; var StorageClientContext = /** @class */ (function (_super) { tslib.__extends(StorageClientContext, _super); /** * Initializes a new instance of the StorageClientContext class. * @param url The URL of the service account, container, or blob that is the targe of the desired * operation. * @param options The parameter options */ function StorageClientContext(url, options) { var _this = this; if (url === undefined) { throw new Error("'url' cannot be null"); } // Initializing default values for options if (!options) { options = {}; } if (!options.userAgent) { var defaultUserAgent = coreHttp.getDefaultUserAgentValue(); options.userAgent = packageName + "/" + packageVersion + " " + defaultUserAgent; } _this = _super.call(this, undefined, options) || this; _this.requestContentType = "application/json; charset=utf-8"; _this.baseUri = options.endpoint || "{url}"; // Parameter assignments _this.url = url; // Assigning values to Constant parameters _this.version = options.version || "2020-08-04"; return _this; } return StorageClientContext; }(coreHttp.ServiceClient)); // Copyright (c) Microsoft Corporation. /** * A StorageClient represents a based URL class for {@link BlobServiceClient}, {@link ContainerClient} * and etc. */ var StorageClient = /** @class */ (function () { /** * Creates an instance of StorageClient. * @param url - url to resource * @param pipeline - request policy pipeline. */ function StorageClient(url, pipeline) { // URL should be encoded and only once, protocol layer shouldn't encode URL again this.url = escapeURLPath(url); this.accountName = getAccountNameFromUrl(url); this.pipeline = pipeline; this.storageClientContext = new StorageClientContext(this.url, pipeline.toServiceClientOptions()); this.isHttps = iEqual(getURLScheme(this.url) || "", "https"); this.credential = new AnonymousCredential(); for (var _i = 0, _a = this.pipeline.factories; _i < _a.length; _i++) { var factory = _a[_i]; if ((coreHttp.isNode && factory instanceof StorageSharedKeyCredential) || factory instanceof AnonymousCredential) { this.credential = factory; } else if (coreHttp.isTokenCredential(factory.credential)) { // Only works if the factory has been attached a "credential" property. // We do that in newPipeline() when using TokenCredential. this.credential = factory.credential; } } // Override protocol layer's default content-type var storageClientContext = this.storageClientContext; storageClientContext.requestContentType = undefined; } return StorageClient; }()); // Copyright (c) Microsoft Corporation. /** * Creates a span using the global tracer. * @internal */ var createSpan = coreTracing.createSpanFunction({ packagePrefix: "Azure.Storage.Blob", namespace: "Microsoft.Storage" }); /** * @internal * * Adapt the tracing options from OperationOptions to what they need to be for * RequestOptionsBase (when we update to later OpenTelemetry versions this is now * two separate fields, not just one). */ function convertTracingToRequestOptionsBase(options) { var _a, _b; return { spanOptions: (_a = options === null || options === void 0 ? void 0 : options.tracingOptions) === null || _a === void 0 ? void 0 : _a.spanOptions, tracingContext: (_b = options === null || options === void 0 ? void 0 : options.tracingOptions) === null || _b === void 0 ? void 0 : _b.tracingContext }; } // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * * This is a helper class to construct a string representing the permissions granted by a ServiceSAS to a blob. Setting * a value to true means that any SAS which uses these permissions will grant permissions for that operation. Once all * the values are set, this should be serialized with toString and set as the permissions field on a * {@link BlobSASSignatureValues} object. It is possible to construct the permissions string without this class, but * the order of the permissions is particular and this class guarantees correctness. */ var BlobSASPermissions = /** @class */ (function () { function BlobSASPermissions() { /** * Specifies Read access granted. */ this.read = false; /** * Specifies Add access granted. */ this.add = false; /** * Specifies Create access granted. */ this.create = false; /** * Specifies Write access granted. */ this.write = false; /** * Specifies Delete access granted. */ this.delete = false; /** * Specifies Delete version access granted. */ this.deleteVersion = false; /** * Specfies Tag access granted. */ this.tag = false; /** * Specifies Move access granted. */ this.move = false; /** * Specifies Execute access granted. */ this.execute = false; } /** * Creates a {@link BlobSASPermissions} from the specified permissions string. This method will throw an * Error if it encounters a character that does not correspond to a valid permission. * * @param permissions - */ BlobSASPermissions.parse = function (permissions) { var blobSASPermissions = new BlobSASPermissions(); for (var _i = 0, permissions_1 = permissions; _i < permissions_1.length; _i++) { var char = permissions_1[_i]; switch (char) { case "r": blobSASPermissions.read = true; break; case "a": blobSASPermissions.add = true; break; case "c": blobSASPermissions.create = true; break; case "w": blobSASPermissions.write = true; break; case "d": blobSASPermissions.delete = true; break; case "x": blobSASPermissions.deleteVersion = true; break; case "t": blobSASPermissions.tag = true; break; case "m": blobSASPermissions.move = true; break; case "e": blobSASPermissions.execute = true; break; default: throw new RangeError("Invalid permission: " + char); } } return blobSASPermissions; }; /** * Creates a {@link BlobSASPermissions} from a raw object which contains same keys as it * and boolean values for them. * * @param permissionLike - */ BlobSASPermissions.from = function (permissionLike) { var blobSASPermissions = new BlobSASPermissions(); if (permissionLike.read) { blobSASPermissions.read = true; } if (permissionLike.add) { blobSASPermissions.add = true; } if (permissionLike.create) { blobSASPermissions.create = true; } if (permissionLike.write) { blobSASPermissions.write = true; } if (permissionLike.delete) { blobSASPermissions.delete = true; } if (permissionLike.deleteVersion) { blobSASPermissions.deleteVersion = true; } if (permissionLike.tag) { blobSASPermissions.tag = true; } if (permissionLike.move) { blobSASPermissions.move = true; } if (permissionLike.execute) { blobSASPermissions.execute = true; } return blobSASPermissions; }; /** * Converts the given permissions to a string. Using this method will guarantee the permissions are in an * order accepted by the service. * * @returns A string which represents the BlobSASPermissions */ BlobSASPermissions.prototype.toString = function () { var permissions = []; if (this.read) { permissions.push("r"); } if (this.add) { permissions.push("a"); } if (this.create) { permissions.push("c"); } if (this.write) { permissions.push("w"); } if (this.delete) { permissions.push("d"); } if (this.deleteVersion) { permissions.push("x"); } if (this.tag) { permissions.push("t"); } if (this.move) { permissions.push("m"); } if (this.execute) { permissions.push("e"); } return permissions.join(""); }; return BlobSASPermissions; }()); // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. /** * This is a helper class to construct a string representing the permissions granted by a ServiceSAS to a container. * Setting a value to true means that any SAS which uses these permissions will grant permissions for that operation. * Once all the values are set, this should be serialized with toString and set as the permissions field on a * {@link BlobSASSignatureValues} object. It is possible to construct the permissions string without this class, but * the order of the permissions is particular and this class guarantees correctness. */ var ContainerSASPermissions = /** @class */ (function () { function ContainerSASPermissions() { /** * Specifies Read access granted. */ this.read = false; /** * Specifies Add access granted. */ this.add = false; /** * Specifies Create access granted. */ this.create = false; /** * Specifies Write access granted. */ this.write = false; /** * Specifies Delete access granted. */ this.delete = false; /** * Specifies Delete version access granted. */ this.deleteVersion = false; /** * Specifies List access granted. */ this.list = false; /** * Specfies Tag access granted. */ this.tag = false; /** * Specifies Move access granted. */ this.move = false; /** * Specifies Execute access granted. */ this.execute = false; } /** * Creates an {@link ContainerSASPermissions} from the specified permissions string. This method will throw an * Error if it encounters a character that does not correspond to a valid permission. * * @param permissions - */ ContainerSASPermissions.parse = function (permissions) { var containerSASPermissions = new ContainerSASPermissions(); for (var _i = 0, permissions_1 = permissions; _i < permissions_1.length; _i++) { var char = permissions_1[_i]; switch (char) { case "r": containerSASPermissions.read = true; break; case "a": containerSASPermissions.add = true; break; case "c": containerSASPermissions.create = true; break; case "w": containerSASPermissions.write = true; break; case "d": containerSASPermissions.delete = true; break; case "l": containerSASPermissions.list = true; break; case "t": containerSASPermissions.tag = true; break; case "x": containerSASPermissions.deleteVersion = true; break; case "m": containerSASPermissions.move = true; break; case "e": containerSASPermissions.execute = true; break; default: throw new RangeError("Invalid permission " + char); } } return containerSASPermissions; }; /** * Creates a {@link ContainerSASPermissions} from a raw object which contains same keys as it * and boolean values for them. * * @param permissionLike - */ ContainerSASPermissions.from = function (permissionLike) { var containerSASPermissions = new ContainerSASPermissions(); if (permissionLike.read) { containerSASPermissions.read = true; } if (permissionLike.add) { containerSASPermissions.add = true; } if (permissionLike.create) { containerSASPermissions.create = true; } if (permissionLike.write) { containerSASPermissions.write = true; } if (permissionLike.delete) { containerSASPermissions.delete = true; } if (permissionLike.list) { containerSASPermissions.list = true; } if (permissionLike.deleteVersion) { containerSASPermissions.deleteVersion = true; } if (permissionLike.tag) { containerSASPermissions.tag = true; } if (permissionLike.move) { containerSASPermissions.move = true; } if (permissionLike.execute) { containerSASPermissions.execute = true; } return containerSASPermissions; }; /** * Converts the given permissions to a string. Using this method will guarantee the permissions are in an * order accepted by the service. * * The order of the characters should be as specified here to ensure correctness. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-a-service-sas * */ ContainerSASPermissions.prototype.toString = function () { var permissions = []; if (this.read) { permissions.push("r"); } if (this.add) { permissions.push("a"); } if (this.create) { permissions.push("c"); } if (this.write) { permissions.push("w"); } if (this.delete) { permissions.push("d"); } if (this.deleteVersion) { permissions.push("x"); } if (this.list) { permissions.push("l"); } if (this.tag) { permissions.push("t"); } if (this.move) { permissions.push("m"); } if (this.execute) { permissions.push("e"); } return permissions.join(""); }; return ContainerSASPermissions; }()); // Copyright (c) Microsoft Corporation. /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * * UserDelegationKeyCredential is only used for generation of user delegation SAS. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas */ var UserDelegationKeyCredential = /** @class */ (function () { /** * Creates an instance of UserDelegationKeyCredential. * @param accountName - * @param userDelegationKey - */ function UserDelegationKeyCredential(accountName, userDelegationKey) { this.accountName = accountName; this.userDelegationKey = userDelegationKey; this.key = Buffer.from(userDelegationKey.value, "base64"); } /** * Generates a hash signature for an HTTP request or for a SAS. * * @param stringToSign - */ UserDelegationKeyCredential.prototype.computeHMACSHA256 = function (stringToSign) { // console.log(`stringToSign: ${JSON.stringify(stringToSign)}`); return crypto.createHmac("sha256", this.key) .update(stringToSign, "utf8") .digest("base64"); }; return UserDelegationKeyCredential; }()); // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. /** * Generate SasIPRange format string. For example: * * "8.8.8.8" or "1.1.1.1-255.255.255.255" * * @param ipRange - */ function ipRangeToString(ipRange) { return ipRange.end ? ipRange.start + "-" + ipRange.end : ipRange.start; } // Copyright (c) Microsoft Corporation. (function (SASProtocol) { /** * Protocol that allows HTTPS only */ SASProtocol["Https"] = "https"; /** * Protocol that allows both HTTPS and HTTP */ SASProtocol["HttpsAndHttp"] = "https,http"; })(exports.SASProtocol || (exports.SASProtocol = {})); /** * Represents the components that make up an Azure Storage SAS' query parameters. This type is not constructed directly * by the user; it is only generated by the {@link AccountSASSignatureValues} and {@link BlobSASSignatureValues} * types. Once generated, it can be encoded into a {@code String} and appended to a URL directly (though caution should * be taken here in case there are existing query parameters, which might affect the appropriate means of appending * these query parameters). * * NOTE: Instances of this class are immutable. */ var SASQueryParameters = /** @class */ (function () { function SASQueryParameters(version, signature, permissionsOrOptions, services, resourceTypes, protocol, startsOn, expiresOn, ipRange, identifier, resource, cacheControl, contentDisposition, contentEncoding, contentLanguage, contentType, userDelegationKey, preauthorizedAgentObjectId, correlationId) { this.version = version; this.signature = signature; if (permissionsOrOptions !== undefined && typeof permissionsOrOptions !== "string") { // SASQueryParametersOptions this.permissions = permissionsOrOptions.permissions; this.services = permissionsOrOptions.services; this.resourceTypes = permissionsOrOptions.resourceTypes; this.protocol = permissionsOrOptions.protocol; this.startsOn = permissionsOrOptions.startsOn; this.expiresOn = permissionsOrOptions.expiresOn; this.ipRangeInner = permissionsOrOptions.ipRange; this.identifier = permissionsOrOptions.identifier; this.resource = permissionsOrOptions.resource; this.cacheControl = permissionsOrOptions.cacheControl; this.contentDisposition = permissionsOrOptions.contentDisposition; this.contentEncoding = permissionsOrOptions.contentEncoding; this.contentLanguage = permissionsOrOptions.contentLanguage; this.contentType = permissionsOrOptions.contentType; if (permissionsOrOptions.userDelegationKey) { this.signedOid = permissionsOrOptions.userDelegationKey.signedObjectId; this.signedTenantId = permissionsOrOptions.userDelegationKey.signedTenantId; this.signedStartsOn = permissionsOrOptions.userDelegationKey.signedStartsOn; this.signedExpiresOn = permissionsOrOptions.userDelegationKey.signedExpiresOn; this.signedService = permissionsOrOptions.userDelegationKey.signedService; this.signedVersion = permissionsOrOptions.userDelegationKey.signedVersion; this.preauthorizedAgentObjectId = permissionsOrOptions.preauthorizedAgentObjectId; this.correlationId = permissionsOrOptions.correlationId; } } else { this.services = services; this.resourceTypes = resourceTypes; this.expiresOn = expiresOn; this.permissions = permissionsOrOptions; this.protocol = protocol; this.startsOn = startsOn; this.ipRangeInner = ipRange; this.identifier = identifier; this.resource = resource; this.cacheControl = cacheControl; this.contentDisposition = contentDisposition; this.contentEncoding = contentEncoding; this.contentLanguage = contentLanguage; this.contentType = contentType; if (userDelegationKey) { this.signedOid = userDelegationKey.signedObjectId; this.signedTenantId = userDelegationKey.signedTenantId; this.signedStartsOn = userDelegationKey.signedStartsOn; this.signedExpiresOn = userDelegationKey.signedExpiresOn; this.signedService = userDelegationKey.signedService; this.signedVersion = userDelegationKey.signedVersion; this.preauthorizedAgentObjectId = preauthorizedAgentObjectId; this.correlationId = correlationId; } } } Object.defineProperty(SASQueryParameters.prototype, "ipRange", { /** * Optional. IP range allowed for this SAS. * * @readonly */ get: function () { if (this.ipRangeInner) { return { end: this.ipRangeInner.end, start: this.ipRangeInner.start }; } return undefined; }, enumerable: false, configurable: true }); /** * Encodes all SAS query parameters into a string that can be appended to a URL. * */ SASQueryParameters.prototype.toString = function () { var params = [ "sv", "ss", "srt", "spr", "st", "se", "sip", "si", "skoid", "sktid", "skt", "ske", "sks", "skv", "sr", "sp", "sig", "rscc", "rscd", "rsce", "rscl", "rsct", "saoid", "scid" ]; var queries = []; for (var _i = 0, params_1 = params; _i < params_1.length; _i++) { var param = params_1[_i]; switch (param) { case "sv": this.tryAppendQueryParameter(queries, param, this.version); break; case "ss": this.tryAppendQueryParameter(queries, param, this.services); break; case "srt": this.tryAppendQueryParameter(queries, param, this.resourceTypes); break; case "spr": this.tryAppendQueryParameter(queries, param, this.protocol); break; case "st": this.tryAppendQueryParameter(queries, param, this.startsOn ? truncatedISO8061Date(this.startsOn, false) : undefined); break; case "se": this.tryAppendQueryParameter(queries, param, this.expiresOn ? truncatedISO8061Date(this.expiresOn, false) : undefined); break; case "sip": this.tryAppendQueryParameter(queries, param, this.ipRange ? ipRangeToString(this.ipRange) : undefined); break; case "si": this.tryAppendQueryParameter(queries, param, this.identifier); break; case "skoid": // Signed object ID this.tryAppendQueryParameter(queries, param, this.signedOid); break; case "sktid": // Signed tenant ID this.tryAppendQueryParameter(queries, param, this.signedTenantId); break; case "skt": // Signed key start time this.tryAppendQueryParameter(queries, param, this.signedStartsOn ? truncatedISO8061Date(this.signedStartsOn, false) : undefined); break; case "ske": // Signed key expiry time this.tryAppendQueryParameter(queries, param, this.signedExpiresOn ? truncatedISO8061Date(this.signedExpiresOn, false) : undefined); break; case "sks": // Signed key service this.tryAppendQueryParameter(queries, param, this.signedService); break; case "skv": // Signed key version this.tryAppendQueryParameter(queries, param, this.signedVersion); break; case "sr": this.tryAppendQueryParameter(queries, param, this.resource); break; case "sp": this.tryAppendQueryParameter(queries, param, this.permissions); break; case "sig": this.tryAppendQueryParameter(queries, param, this.signature); break; case "rscc": this.tryAppendQueryParameter(queries, param, this.cacheControl); break; case "rscd": this.tryAppendQueryParameter(queries, param, this.contentDisposition); break; case "rsce": this.tryAppendQueryParameter(queries, param, this.contentEncoding); break; case "rscl": this.tryAppendQueryParameter(queries, param, this.contentLanguage); break; case "rsct": this.tryAppendQueryParameter(queries, param, this.contentType); break; case "saoid": this.tryAppendQueryParameter(queries, param, this.preauthorizedAgentObjectId); break; case "scid": this.tryAppendQueryParameter(queries, param, this.correlationId); break; } } return queries.join("&"); }; /** * A private helper method used to filter and append query key/value pairs into an array. * * @param queries - * @param key - * @param value - */ SASQueryParameters.prototype.tryAppendQueryParameter = function (queries, key, value) { if (!value) { return; } key = encodeURIComponent(key); value = encodeURIComponent(value); if (key.length > 0 && value.length > 0) { queries.push(key + "=" + value); } }; return SASQueryParameters; }()); // Copyright (c) Microsoft Corporation. function generateBlobSASQueryParameters(blobSASSignatureValues, sharedKeyCredentialOrUserDelegationKey, accountName) { var version = blobSASSignatureValues.version ? blobSASSignatureValues.version : SERVICE_VERSION; var sharedKeyCredential = sharedKeyCredentialOrUserDelegationKey instanceof StorageSharedKeyCredential ? sharedKeyCredentialOrUserDelegationKey : undefined; var userDelegationKeyCredential; if (sharedKeyCredential === undefined && accountName !== undefined) { userDelegationKeyCredential = new UserDelegationKeyCredential(accountName, sharedKeyCredentialOrUserDelegationKey); } if (sharedKeyCredential === undefined && userDelegationKeyCredential === undefined) { throw TypeError("Invalid sharedKeyCredential, userDelegationKey or accountName."); } // Version 2019-12-12 adds support for the blob tags permission. // Version 2018-11-09 adds support for the signed resource and signed blob snapshot time fields. // https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-a-service-sas#constructing-the-signature-string if (version >= "2018-11-09") { if (sharedKeyCredential !== undefined) { return generateBlobSASQueryParameters20181109(blobSASSignatureValues, sharedKeyCredential); } else { // Version 2020-02-10 delegation SAS signature construction includes preauthorizedAgentObjectId, agentObjectId, correlationId. if (version >= "2020-02-10") { return generateBlobSASQueryParametersUDK20200210(blobSASSignatureValues, userDelegationKeyCredential); } else { return generateBlobSASQueryParametersUDK20181109(blobSASSignatureValues, userDelegationKeyCredential); } } } if (version >= "2015-04-05") { if (sharedKeyCredential !== undefined) { return generateBlobSASQueryParameters20150405(blobSASSignatureValues, sharedKeyCredential); } else { throw new RangeError("'version' must be >= '2018-11-09' when generating user delegation SAS using user delegation key."); } } throw new RangeError("'version' must be >= '2015-04-05'."); } /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * IMPLEMENTATION FOR API VERSION FROM 2015-04-05 AND BEFORE 2018-11-09. * * Creates an instance of SASQueryParameters. * * Only accepts required settings needed to create a SAS. For optional settings please * set corresponding properties directly, such as permissions, startsOn and identifier. * * WARNING: When identifier is not provided, permissions and expiresOn are required. * You MUST assign value to identifier or expiresOn & permissions manually if you initial with * this constructor. * * @param blobSASSignatureValues - * @param sharedKeyCredential - */ function generateBlobSASQueryParameters20150405(blobSASSignatureValues, sharedKeyCredential) { blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues); if (!blobSASSignatureValues.identifier && !(blobSASSignatureValues.permissions && blobSASSignatureValues.expiresOn)) { throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when 'identifier' is not provided."); } var resource = "c"; if (blobSASSignatureValues.blobName) { resource = "b"; } // Calling parse and toString guarantees the proper ordering and throws on invalid characters. var verifiedPermissions; if (blobSASSignatureValues.permissions) { if (blobSASSignatureValues.blobName) { verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString(); } else { verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString(); } } // Signature is generated on the un-url-encoded values. var stringToSign = [ verifiedPermissions ? verifiedPermissions : "", blobSASSignatureValues.startsOn ? truncatedISO8061Date(blobSASSignatureValues.startsOn, false) : "", blobSASSignatureValues.expiresOn ? truncatedISO8061Date(blobSASSignatureValues.expiresOn, false) : "", getCanonicalName(sharedKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName), blobSASSignatureValues.identifier, blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "", blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "", blobSASSignatureValues.version, blobSASSignatureValues.cacheControl ? blobSASSignatureValues.cacheControl : "", blobSASSignatureValues.contentDisposition ? blobSASSignatureValues.contentDisposition : "", blobSASSignatureValues.contentEncoding ? blobSASSignatureValues.contentEncoding : "", blobSASSignatureValues.contentLanguage ? blobSASSignatureValues.contentLanguage : "", blobSASSignatureValues.contentType ? blobSASSignatureValues.contentType : "" ].join("\n"); var signature = sharedKeyCredential.computeHMACSHA256(stringToSign); return new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType); } /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * IMPLEMENTATION FOR API VERSION FROM 2018-11-09. * * Creates an instance of SASQueryParameters. * * Only accepts required settings needed to create a SAS. For optional settings please * set corresponding properties directly, such as permissions, startsOn and identifier. * * WARNING: When identifier is not provided, permissions and expiresOn are required. * You MUST assign value to identifier or expiresOn & permissions manually if you initial with * this constructor. * * @param blobSASSignatureValues - * @param sharedKeyCredential - */ function generateBlobSASQueryParameters20181109(blobSASSignatureValues, sharedKeyCredential) { blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues); if (!blobSASSignatureValues.identifier && !(blobSASSignatureValues.permissions && blobSASSignatureValues.expiresOn)) { throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when 'identifier' is not provided."); } var resource = "c"; var timestamp = blobSASSignatureValues.snapshotTime; if (blobSASSignatureValues.blobName) { resource = "b"; if (blobSASSignatureValues.snapshotTime) { resource = "bs"; } else if (blobSASSignatureValues.versionId) { resource = "bv"; timestamp = blobSASSignatureValues.versionId; } } // Calling parse and toString guarantees the proper ordering and throws on invalid characters. var verifiedPermissions; if (blobSASSignatureValues.permissions) { if (blobSASSignatureValues.blobName) { verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString(); } else { verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString(); } } // Signature is generated on the un-url-encoded values. var stringToSign = [ verifiedPermissions ? verifiedPermissions : "", blobSASSignatureValues.startsOn ? truncatedISO8061Date(blobSASSignatureValues.startsOn, false) : "", blobSASSignatureValues.expiresOn ? truncatedISO8061Date(blobSASSignatureValues.expiresOn, false) : "", getCanonicalName(sharedKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName), blobSASSignatureValues.identifier, blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "", blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "", blobSASSignatureValues.version, resource, timestamp, blobSASSignatureValues.cacheControl ? blobSASSignatureValues.cacheControl : "", blobSASSignatureValues.contentDisposition ? blobSASSignatureValues.contentDisposition : "", blobSASSignatureValues.contentEncoding ? blobSASSignatureValues.contentEncoding : "", blobSASSignatureValues.contentLanguage ? blobSASSignatureValues.contentLanguage : "", blobSASSignatureValues.contentType ? blobSASSignatureValues.contentType : "" ].join("\n"); var signature = sharedKeyCredential.computeHMACSHA256(stringToSign); return new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType); } /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * IMPLEMENTATION FOR API VERSION FROM 2018-11-09. * * Creates an instance of SASQueryParameters. * * Only accepts required settings needed to create a SAS. For optional settings please * set corresponding properties directly, such as permissions, startsOn. * * WARNING: identifier will be ignored, permissions and expiresOn are required. * * @param blobSASSignatureValues - * @param userDelegationKeyCredential - */ function generateBlobSASQueryParametersUDK20181109(blobSASSignatureValues, userDelegationKeyCredential) { blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues); // Stored access policies are not supported for a user delegation SAS. if (!blobSASSignatureValues.permissions || !blobSASSignatureValues.expiresOn) { throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when generating user delegation SAS."); } var resource = "c"; var timestamp = blobSASSignatureValues.snapshotTime; if (blobSASSignatureValues.blobName) { resource = "b"; if (blobSASSignatureValues.snapshotTime) { resource = "bs"; } else if (blobSASSignatureValues.versionId) { resource = "bv"; timestamp = blobSASSignatureValues.versionId; } } // Calling parse and toString guarantees the proper ordering and throws on invalid characters. var verifiedPermissions; if (blobSASSignatureValues.permissions) { if (blobSASSignatureValues.blobName) { verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString(); } else { verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString(); } } // Signature is generated on the un-url-encoded values. var stringToSign = [ verifiedPermissions ? verifiedPermissions : "", blobSASSignatureValues.startsOn ? truncatedISO8061Date(blobSASSignatureValues.startsOn, false) : "", blobSASSignatureValues.expiresOn ? truncatedISO8061Date(blobSASSignatureValues.expiresOn, false) : "", getCanonicalName(userDelegationKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName), userDelegationKeyCredential.userDelegationKey.signedObjectId, userDelegationKeyCredential.userDelegationKey.signedTenantId, userDelegationKeyCredential.userDelegationKey.signedStartsOn ? truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedStartsOn, false) : "", userDelegationKeyCredential.userDelegationKey.signedExpiresOn ? truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedExpiresOn, false) : "", userDelegationKeyCredential.userDelegationKey.signedService, userDelegationKeyCredential.userDelegationKey.signedVersion, blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "", blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "", blobSASSignatureValues.version, resource, timestamp, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType ].join("\n"); var signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign); return new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey); } /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * IMPLEMENTATION FOR API VERSION FROM 2020-02-10. * * Creates an instance of SASQueryParameters. * * Only accepts required settings needed to create a SAS. For optional settings please * set corresponding properties directly, such as permissions, startsOn. * * WARNING: identifier will be ignored, permissions and expiresOn are required. * * @param blobSASSignatureValues - * @param userDelegationKeyCredential - */ function generateBlobSASQueryParametersUDK20200210(blobSASSignatureValues, userDelegationKeyCredential) { blobSASSignatureValues = SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues); // Stored access policies are not supported for a user delegation SAS. if (!blobSASSignatureValues.permissions || !blobSASSignatureValues.expiresOn) { throw new RangeError("Must provide 'permissions' and 'expiresOn' for Blob SAS generation when generating user delegation SAS."); } var resource = "c"; var timestamp = blobSASSignatureValues.snapshotTime; if (blobSASSignatureValues.blobName) { resource = "b"; if (blobSASSignatureValues.snapshotTime) { resource = "bs"; } else if (blobSASSignatureValues.versionId) { resource = "bv"; timestamp = blobSASSignatureValues.versionId; } } // Calling parse and toString guarantees the proper ordering and throws on invalid characters. var verifiedPermissions; if (blobSASSignatureValues.permissions) { if (blobSASSignatureValues.blobName) { verifiedPermissions = BlobSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString(); } else { verifiedPermissions = ContainerSASPermissions.parse(blobSASSignatureValues.permissions.toString()).toString(); } } // Signature is generated on the un-url-encoded values. var stringToSign = [ verifiedPermissions ? verifiedPermissions : "", blobSASSignatureValues.startsOn ? truncatedISO8061Date(blobSASSignatureValues.startsOn, false) : "", blobSASSignatureValues.expiresOn ? truncatedISO8061Date(blobSASSignatureValues.expiresOn, false) : "", getCanonicalName(userDelegationKeyCredential.accountName, blobSASSignatureValues.containerName, blobSASSignatureValues.blobName), userDelegationKeyCredential.userDelegationKey.signedObjectId, userDelegationKeyCredential.userDelegationKey.signedTenantId, userDelegationKeyCredential.userDelegationKey.signedStartsOn ? truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedStartsOn, false) : "", userDelegationKeyCredential.userDelegationKey.signedExpiresOn ? truncatedISO8061Date(userDelegationKeyCredential.userDelegationKey.signedExpiresOn, false) : "", userDelegationKeyCredential.userDelegationKey.signedService, userDelegationKeyCredential.userDelegationKey.signedVersion, blobSASSignatureValues.preauthorizedAgentObjectId, undefined, blobSASSignatureValues.correlationId, blobSASSignatureValues.ipRange ? ipRangeToString(blobSASSignatureValues.ipRange) : "", blobSASSignatureValues.protocol ? blobSASSignatureValues.protocol : "", blobSASSignatureValues.version, resource, timestamp, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType ].join("\n"); var signature = userDelegationKeyCredential.computeHMACSHA256(stringToSign); return new SASQueryParameters(blobSASSignatureValues.version, signature, verifiedPermissions, undefined, undefined, blobSASSignatureValues.protocol, blobSASSignatureValues.startsOn, blobSASSignatureValues.expiresOn, blobSASSignatureValues.ipRange, blobSASSignatureValues.identifier, resource, blobSASSignatureValues.cacheControl, blobSASSignatureValues.contentDisposition, blobSASSignatureValues.contentEncoding, blobSASSignatureValues.contentLanguage, blobSASSignatureValues.contentType, userDelegationKeyCredential.userDelegationKey, blobSASSignatureValues.preauthorizedAgentObjectId, blobSASSignatureValues.correlationId); } function getCanonicalName(accountName, containerName, blobName) { // Container: "/blob/account/containerName" // Blob: "/blob/account/containerName/blobName" var elements = ["/blob/" + accountName + "/" + containerName]; if (blobName) { elements.push("/" + blobName); } return elements.join(""); } function SASSignatureValuesSanityCheckAndAutofill(blobSASSignatureValues) { var version = blobSASSignatureValues.version ? blobSASSignatureValues.version : SERVICE_VERSION; if (blobSASSignatureValues.snapshotTime && version < "2018-11-09") { throw RangeError("'version' must be >= '2018-11-09' when providing 'snapshotTime'."); } if (blobSASSignatureValues.blobName === undefined && blobSASSignatureValues.snapshotTime) { throw RangeError("Must provide 'blobName' when providing 'snapshotTime'."); } if (blobSASSignatureValues.versionId && version < "2019-10-10") { throw RangeError("'version' must be >= '2019-10-10' when providing 'versionId'."); } if (blobSASSignatureValues.blobName === undefined && blobSASSignatureValues.versionId) { throw RangeError("Must provide 'blobName' when providing 'versionId'."); } if (blobSASSignatureValues.permissions && blobSASSignatureValues.permissions.deleteVersion && version < "2019-10-10") { throw RangeError("'version' must be >= '2019-10-10' when providing 'x' permission."); } if (blobSASSignatureValues.permissions && blobSASSignatureValues.permissions.tag && version < "2019-12-12") { throw RangeError("'version' must be >= '2019-12-12' when providing 't' permission."); } if (version < "2020-02-10" && blobSASSignatureValues.permissions && (blobSASSignatureValues.permissions.move || blobSASSignatureValues.permissions.execute)) { throw RangeError("'version' must be >= '2020-02-10' when providing the 'm' or 'e' permission."); } if (version < "2020-02-10" && (blobSASSignatureValues.preauthorizedAgentObjectId || blobSASSignatureValues.correlationId)) { throw RangeError("'version' must be >= '2020-02-10' when providing 'preauthorizedAgentObjectId' or 'correlationId'."); } blobSASSignatureValues.version = version; return blobSASSignatureValues; } /** * A client that manages leases for a {@link ContainerClient} or a {@link BlobClient}. */ var BlobLeaseClient = /** @class */ (function () { /** * Creates an instance of BlobLeaseClient. * @param client - The client to make the lease operation requests. * @param leaseId - Initial proposed lease id. */ function BlobLeaseClient(client, leaseId) { var clientContext = new StorageClientContext(client.url, client.pipeline.toServiceClientOptions()); this._url = client.url; if (client.name === undefined) { this._isContainer = true; this._containerOrBlobOperation = new Container(clientContext); } else { this._isContainer = false; this._containerOrBlobOperation = new Blob$1(clientContext); } if (!leaseId) { leaseId = coreHttp.generateUuid(); } this._leaseId = leaseId; } Object.defineProperty(BlobLeaseClient.prototype, "leaseId", { /** * Gets the lease Id. * * @readonly */ get: function () { return this._leaseId; }, enumerable: false, configurable: true }); Object.defineProperty(BlobLeaseClient.prototype, "url", { /** * Gets the url. * * @readonly */ get: function () { return this._url; }, enumerable: false, configurable: true }); /** * Establishes and manages a lock on a container for delete operations, or on a blob * for write and delete operations. * The lock duration can be 15 to 60 seconds, or can be infinite. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container * and * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob * * @param duration - Must be between 15 to 60 seconds, or infinite (-1) * @param options - option to configure lease management operations. * @returns Response data for acquire lease operation. */ BlobLeaseClient.prototype.acquireLease = function (duration, options) { var _a, _b, _c, _d, _e, _f; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _g, span, updatedOptions, e_1; return tslib.__generator(this, function (_h) { switch (_h.label) { case 0: _g = createSpan("BlobLeaseClient-acquireLease", options), span = _g.span, updatedOptions = _g.updatedOptions; if (this._isContainer && ((((_a = options.conditions) === null || _a === void 0 ? void 0 : _a.ifMatch) && ((_b = options.conditions) === null || _b === void 0 ? void 0 : _b.ifMatch) !== ETagNone) || (((_c = options.conditions) === null || _c === void 0 ? void 0 : _c.ifNoneMatch) && ((_d = options.conditions) === null || _d === void 0 ? void 0 : _d.ifNoneMatch) !== ETagNone) || ((_e = options.conditions) === null || _e === void 0 ? void 0 : _e.tagConditions))) { throw new RangeError("The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable."); } _h.label = 1; case 1: _h.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this._containerOrBlobOperation.acquireLease(tslib.__assign({ abortSignal: options.abortSignal, duration: duration, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions }), proposedLeaseId: this._leaseId }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _h.sent()]; case 3: e_1 = _h.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_1.message }); throw e_1; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * To change the ID of the lease. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container * and * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob * * @param proposedLeaseId - the proposed new lease Id. * @param options - option to configure lease management operations. * @returns Response data for change lease operation. */ BlobLeaseClient.prototype.changeLease = function (proposedLeaseId, options) { var _a, _b, _c, _d, _e, _f; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _g, span, updatedOptions, response, e_2; return tslib.__generator(this, function (_h) { switch (_h.label) { case 0: _g = createSpan("BlobLeaseClient-changeLease", options), span = _g.span, updatedOptions = _g.updatedOptions; if (this._isContainer && ((((_a = options.conditions) === null || _a === void 0 ? void 0 : _a.ifMatch) && ((_b = options.conditions) === null || _b === void 0 ? void 0 : _b.ifMatch) !== ETagNone) || (((_c = options.conditions) === null || _c === void 0 ? void 0 : _c.ifNoneMatch) && ((_d = options.conditions) === null || _d === void 0 ? void 0 : _d.ifNoneMatch) !== ETagNone) || ((_e = options.conditions) === null || _e === void 0 ? void 0 : _e.tagConditions))) { throw new RangeError("The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable."); } _h.label = 1; case 1: _h.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this._containerOrBlobOperation.changeLease(this._leaseId, proposedLeaseId, tslib.__assign({ abortSignal: options.abortSignal, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: response = _h.sent(); this._leaseId = proposedLeaseId; return [2 /*return*/, response]; case 3: e_2 = _h.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_2.message }); throw e_2; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * To free the lease if it is no longer needed so that another client may * immediately acquire a lease against the container or the blob. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container * and * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob * * @param options - option to configure lease management operations. * @returns Response data for release lease operation. */ BlobLeaseClient.prototype.releaseLease = function (options) { var _a, _b, _c, _d, _e, _f; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _g, span, updatedOptions, e_3; return tslib.__generator(this, function (_h) { switch (_h.label) { case 0: _g = createSpan("BlobLeaseClient-releaseLease", options), span = _g.span, updatedOptions = _g.updatedOptions; if (this._isContainer && ((((_a = options.conditions) === null || _a === void 0 ? void 0 : _a.ifMatch) && ((_b = options.conditions) === null || _b === void 0 ? void 0 : _b.ifMatch) !== ETagNone) || (((_c = options.conditions) === null || _c === void 0 ? void 0 : _c.ifNoneMatch) && ((_d = options.conditions) === null || _d === void 0 ? void 0 : _d.ifNoneMatch) !== ETagNone) || ((_e = options.conditions) === null || _e === void 0 ? void 0 : _e.tagConditions))) { throw new RangeError("The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable."); } _h.label = 1; case 1: _h.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this._containerOrBlobOperation.releaseLease(this._leaseId, tslib.__assign({ abortSignal: options.abortSignal, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _h.sent()]; case 3: e_3 = _h.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_3.message }); throw e_3; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * To renew the lease. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container * and * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob * * @param options - Optional option to configure lease management operations. * @returns Response data for renew lease operation. */ BlobLeaseClient.prototype.renewLease = function (options) { var _a, _b, _c, _d, _e, _f; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _g, span, updatedOptions, e_4; return tslib.__generator(this, function (_h) { switch (_h.label) { case 0: _g = createSpan("BlobLeaseClient-renewLease", options), span = _g.span, updatedOptions = _g.updatedOptions; if (this._isContainer && ((((_a = options.conditions) === null || _a === void 0 ? void 0 : _a.ifMatch) && ((_b = options.conditions) === null || _b === void 0 ? void 0 : _b.ifMatch) !== ETagNone) || (((_c = options.conditions) === null || _c === void 0 ? void 0 : _c.ifNoneMatch) && ((_d = options.conditions) === null || _d === void 0 ? void 0 : _d.ifNoneMatch) !== ETagNone) || ((_e = options.conditions) === null || _e === void 0 ? void 0 : _e.tagConditions))) { throw new RangeError("The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable."); } _h.label = 1; case 1: _h.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this._containerOrBlobOperation.renewLease(this._leaseId, tslib.__assign({ abortSignal: options.abortSignal, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _h.sent()]; case 3: e_4 = _h.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_4.message }); throw e_4; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * To end the lease but ensure that another client cannot acquire a new lease * until the current lease period has expired. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-container * and * @see https://docs.microsoft.com/en-us/rest/api/storageservices/lease-blob * * @param breakPeriod - Break period * @param options - Optional options to configure lease management operations. * @returns Response data for break lease operation. */ BlobLeaseClient.prototype.breakLease = function (breakPeriod, options) { var _a, _b, _c, _d, _e, _f; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _g, span, updatedOptions, operationOptions, e_5; return tslib.__generator(this, function (_h) { switch (_h.label) { case 0: _g = createSpan("BlobLeaseClient-breakLease", options), span = _g.span, updatedOptions = _g.updatedOptions; if (this._isContainer && ((((_a = options.conditions) === null || _a === void 0 ? void 0 : _a.ifMatch) && ((_b = options.conditions) === null || _b === void 0 ? void 0 : _b.ifMatch) !== ETagNone) || (((_c = options.conditions) === null || _c === void 0 ? void 0 : _c.ifNoneMatch) && ((_d = options.conditions) === null || _d === void 0 ? void 0 : _d.ifNoneMatch) !== ETagNone) || ((_e = options.conditions) === null || _e === void 0 ? void 0 : _e.tagConditions))) { throw new RangeError("The IfMatch, IfNoneMatch and tags access conditions are ignored by the service. Values other than undefined or their default values are not acceptable."); } _h.label = 1; case 1: _h.trys.push([1, 3, 4, 5]); operationOptions = tslib.__assign({ abortSignal: options.abortSignal, breakPeriod: breakPeriod, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_f = options.conditions) === null || _f === void 0 ? void 0 : _f.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)); return [4 /*yield*/, this._containerOrBlobOperation.breakLease(operationOptions)]; case 2: return [2 /*return*/, _h.sent()]; case 3: e_5 = _h.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_5.message }); throw e_5; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; return BlobLeaseClient; }()); // Copyright (c) Microsoft Corporation. /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * * A Node.js ReadableStream will internally retry when internal ReadableStream unexpected ends. */ var RetriableReadableStream = /** @class */ (function (_super) { tslib.__extends(RetriableReadableStream, _super); /** * Creates an instance of RetriableReadableStream. * * @param source - The current ReadableStream returned from getter * @param getter - A method calling downloading request returning * a new ReadableStream from specified offset * @param offset - Offset position in original data source to read * @param count - How much data in original data source to read * @param options - */ function RetriableReadableStream(source, getter, offset, count, options) { if (options === void 0) { options = {}; } var _this = _super.call(this, { highWaterMark: options.highWaterMark }) || this; _this.retries = 0; _this.sourceDataHandler = function (data) { if (_this.options.doInjectErrorOnce) { _this.options.doInjectErrorOnce = undefined; _this.source.pause(); _this.source.removeAllListeners("data"); _this.source.emit("end"); return; } // console.log( // `Offset: ${this.offset}, Received ${data.length} from internal stream` // ); _this.offset += data.length; if (_this.onProgress) { _this.onProgress({ loadedBytes: _this.offset - _this.start }); } if (!_this.push(data)) { _this.source.pause(); } }; _this.sourceErrorOrEndHandler = function (err) { if (err && err.name === "AbortError") { _this.destroy(err); return; } // console.log( // `Source stream emits end or error, offset: ${ // this.offset // }, dest end : ${this.end}` // ); _this.removeSourceEventHandlers(); if (_this.offset - 1 === _this.end) { _this.push(null); } else if (_this.offset <= _this.end) { // console.log( // `retries: ${this.retries}, max retries: ${this.maxRetries}` // ); if (_this.retries < _this.maxRetryRequests) { _this.retries += 1; _this.getter(_this.offset) .then(function (newSource) { _this.source = newSource; _this.setSourceEventHandlers(); }) .catch(function (error) { _this.destroy(error); }); } else { _this.destroy(new Error( // tslint:disable-next-line:max-line-length "Data corruption failure: received less data than required and reached maxRetires limitation. Received data offset: " + (_this .offset - 1) + ", data needed offset: " + _this.end + ", retries: " + _this.retries + ", max retries: " + _this.maxRetryRequests)); } } else { _this.destroy(new Error("Data corruption failure: Received more data than original request, data needed offset is " + _this.end + ", received offset: " + (_this.offset - 1))); } }; _this.getter = getter; _this.source = source; _this.start = offset; _this.offset = offset; _this.end = offset + count - 1; _this.maxRetryRequests = options.maxRetryRequests && options.maxRetryRequests >= 0 ? options.maxRetryRequests : 0; _this.onProgress = options.onProgress; _this.options = options; _this.setSourceEventHandlers(); return _this; } RetriableReadableStream.prototype._read = function () { this.source.resume(); }; RetriableReadableStream.prototype.setSourceEventHandlers = function () { this.source.on("data", this.sourceDataHandler); this.source.on("end", this.sourceErrorOrEndHandler); this.source.on("error", this.sourceErrorOrEndHandler); }; RetriableReadableStream.prototype.removeSourceEventHandlers = function () { this.source.removeListener("data", this.sourceDataHandler); this.source.removeListener("end", this.sourceErrorOrEndHandler); this.source.removeListener("error", this.sourceErrorOrEndHandler); }; RetriableReadableStream.prototype._destroy = function (error, callback) { // remove listener from source and release source this.removeSourceEventHandlers(); this.source.destroy(); callback(error === null ? undefined : error); }; return RetriableReadableStream; }(stream.Readable)); // Copyright (c) Microsoft Corporation. /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * * BlobDownloadResponse implements BlobDownloadResponseParsed interface, and in Node.js runtime it will * automatically retry when internal read stream unexpected ends. (This kind of unexpected ends cannot * trigger retries defined in pipeline retry policy.) * * The {@link readableStreamBody} stream will retry underlayer, you can just use it as a normal Node.js * Readable stream. */ var BlobDownloadResponse = /** @class */ (function () { /** * Creates an instance of BlobDownloadResponse. * * @param originalResponse - * @param getter - * @param offset - * @param count - * @param options - */ function BlobDownloadResponse(originalResponse, getter, offset, count, options) { if (options === void 0) { options = {}; } this.originalResponse = originalResponse; this.blobDownloadStream = new RetriableReadableStream(this.originalResponse.readableStreamBody, getter, offset, count, options); } Object.defineProperty(BlobDownloadResponse.prototype, "acceptRanges", { /** * Indicates that the service supports * requests for partial file content. * * @readonly */ get: function () { return this.originalResponse.acceptRanges; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "cacheControl", { /** * Returns if it was previously specified * for the file. * * @readonly */ get: function () { return this.originalResponse.cacheControl; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "contentDisposition", { /** * Returns the value that was specified * for the 'x-ms-content-disposition' header and specifies how to process the * response. * * @readonly */ get: function () { return this.originalResponse.contentDisposition; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "contentEncoding", { /** * Returns the value that was specified * for the Content-Encoding request header. * * @readonly */ get: function () { return this.originalResponse.contentEncoding; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "contentLanguage", { /** * Returns the value that was specified * for the Content-Language request header. * * @readonly */ get: function () { return this.originalResponse.contentLanguage; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "blobSequenceNumber", { /** * The current sequence number for a * page blob. This header is not returned for block blobs or append blobs. * * @readonly */ get: function () { return this.originalResponse.blobSequenceNumber; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "blobType", { /** * The blob's type. Possible values include: * 'BlockBlob', 'PageBlob', 'AppendBlob'. * * @readonly */ get: function () { return this.originalResponse.blobType; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "contentLength", { /** * The number of bytes present in the * response body. * * @readonly */ get: function () { return this.originalResponse.contentLength; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "contentMD5", { /** * If the file has an MD5 hash and the * request is to read the full file, this response header is returned so that * the client can check for message content integrity. If the request is to * read a specified range and the 'x-ms-range-get-content-md5' is set to * true, then the request returns an MD5 hash for the range, as long as the * range size is less than or equal to 4 MB. If neither of these sets of * conditions is true, then no value is returned for the 'Content-MD5' * header. * * @readonly */ get: function () { return this.originalResponse.contentMD5; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "contentRange", { /** * Indicates the range of bytes returned if * the client requested a subset of the file by setting the Range request * header. * * @readonly */ get: function () { return this.originalResponse.contentRange; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "contentType", { /** * The content type specified for the file. * The default content type is 'application/octet-stream' * * @readonly */ get: function () { return this.originalResponse.contentType; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "copyCompletedOn", { /** * Conclusion time of the last attempted * Copy File operation where this file was the destination file. This value * can specify the time of a completed, aborted, or failed copy attempt. * * @readonly */ get: function () { return this.originalResponse.copyCompletedOn; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "copyId", { /** * String identifier for the last attempted Copy * File operation where this file was the destination file. * * @readonly */ get: function () { return this.originalResponse.copyId; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "copyProgress", { /** * Contains the number of bytes copied and * the total bytes in the source in the last attempted Copy File operation * where this file was the destination file. Can show between 0 and * Content-Length bytes copied. * * @readonly */ get: function () { return this.originalResponse.copyProgress; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "copySource", { /** * URL up to 2KB in length that specifies the * source file used in the last attempted Copy File operation where this file * was the destination file. * * @readonly */ get: function () { return this.originalResponse.copySource; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "copyStatus", { /** * State of the copy operation * identified by 'x-ms-copy-id'. Possible values include: 'pending', * 'success', 'aborted', 'failed' * * @readonly */ get: function () { return this.originalResponse.copyStatus; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "copyStatusDescription", { /** * Only appears when * x-ms-copy-status is failed or pending. Describes cause of fatal or * non-fatal copy operation failure. * * @readonly */ get: function () { return this.originalResponse.copyStatusDescription; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "leaseDuration", { /** * When a blob is leased, * specifies whether the lease is of infinite or fixed duration. Possible * values include: 'infinite', 'fixed'. * * @readonly */ get: function () { return this.originalResponse.leaseDuration; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "leaseState", { /** * Lease state of the blob. Possible * values include: 'available', 'leased', 'expired', 'breaking', 'broken'. * * @readonly */ get: function () { return this.originalResponse.leaseState; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "leaseStatus", { /** * The current lease status of the * blob. Possible values include: 'locked', 'unlocked'. * * @readonly */ get: function () { return this.originalResponse.leaseStatus; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "date", { /** * A UTC date/time value generated by the service that * indicates the time at which the response was initiated. * * @readonly */ get: function () { return this.originalResponse.date; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "blobCommittedBlockCount", { /** * The number of committed blocks * present in the blob. This header is returned only for append blobs. * * @readonly */ get: function () { return this.originalResponse.blobCommittedBlockCount; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "etag", { /** * The ETag contains a value that you can use to * perform operations conditionally, in quotes. * * @readonly */ get: function () { return this.originalResponse.etag; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "tagCount", { /** * The number of tags associated with the blob * * @readonly */ get: function () { return this.originalResponse.tagCount; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "errorCode", { /** * The error code. * * @readonly */ get: function () { return this.originalResponse.errorCode; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "isServerEncrypted", { /** * The value of this header is set to * true if the file data and application metadata are completely encrypted * using the specified algorithm. Otherwise, the value is set to false (when * the file is unencrypted, or if only parts of the file/application metadata * are encrypted). * * @readonly */ get: function () { return this.originalResponse.isServerEncrypted; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "blobContentMD5", { /** * If the blob has a MD5 hash, and if * request contains range header (Range or x-ms-range), this response header * is returned with the value of the whole blob's MD5 value. This value may * or may not be equal to the value returned in Content-MD5 header, with the * latter calculated from the requested range. * * @readonly */ get: function () { return this.originalResponse.blobContentMD5; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "lastModified", { /** * Returns the date and time the file was last * modified. Any operation that modifies the file or its properties updates * the last modified time. * * @readonly */ get: function () { return this.originalResponse.lastModified; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "lastAccessed", { /** * Returns the UTC date and time generated by the service that indicates the time at which the blob was * last read or written to. * * @readonly */ get: function () { return this.originalResponse.lastAccessed; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "metadata", { /** * A name-value pair * to associate with a file storage object. * * @readonly */ get: function () { return this.originalResponse.metadata; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "requestId", { /** * This header uniquely identifies the request * that was made and can be used for troubleshooting the request. * * @readonly */ get: function () { return this.originalResponse.requestId; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "clientRequestId", { /** * If a client request id header is sent in the request, this header will be present in the * response with the same value. * * @readonly */ get: function () { return this.originalResponse.clientRequestId; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "version", { /** * Indicates the version of the Blob service used * to execute the request. * * @readonly */ get: function () { return this.originalResponse.version; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "versionId", { /** * Indicates the versionId of the downloaded blob version. * * @readonly */ get: function () { return this.originalResponse.versionId; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "isCurrentVersion", { /** * Indicates whether version of this blob is a current version. * * @readonly */ get: function () { return this.originalResponse.isCurrentVersion; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "encryptionKeySha256", { /** * The SHA-256 hash of the encryption key used to encrypt the blob. This value is only returned * when the blob was encrypted with a customer-provided key. * * @readonly */ get: function () { return this.originalResponse.encryptionKeySha256; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "contentCrc64", { /** * If the request is to read a specified range and the x-ms-range-get-content-crc64 is set to * true, then the request returns a crc64 for the range, as long as the range size is less than * or equal to 4 MB. If both x-ms-range-get-content-crc64 & x-ms-range-get-content-md5 is * specified in the same request, it will fail with 400(Bad Request) */ get: function () { return this.originalResponse.contentCrc64; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "objectReplicationDestinationPolicyId", { /** * Object Replication Policy Id of the destination blob. * * @readonly */ get: function () { return this.originalResponse.objectReplicationDestinationPolicyId; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "objectReplicationSourceProperties", { /** * Parsed Object Replication Policy Id, Rule Id(s) and status of the source blob. * * @readonly */ get: function () { return this.originalResponse.objectReplicationSourceProperties; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "isSealed", { /** * If this blob has been sealed. * * @readonly */ get: function () { return this.originalResponse.isSealed; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "contentAsBlob", { /** * The response body as a browser Blob. * Always undefined in node.js. * * @readonly */ get: function () { return this.originalResponse.blobBody; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "readableStreamBody", { /** * The response body as a node.js Readable stream. * Always undefined in the browser. * * It will automatically retry when internal read stream unexpected ends. * * @readonly */ get: function () { return coreHttp.isNode ? this.blobDownloadStream : undefined; }, enumerable: false, configurable: true }); Object.defineProperty(BlobDownloadResponse.prototype, "_response", { /** * The HTTP response. */ get: function () { return this.originalResponse._response; }, enumerable: false, configurable: true }); return BlobDownloadResponse; }()); // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. var AVRO_SYNC_MARKER_SIZE = 16; var AVRO_INIT_BYTES = new Uint8Array([79, 98, 106, 1]); var AVRO_CODEC_KEY = "avro.codec"; var AVRO_SCHEMA_KEY = "avro.schema"; // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. function arraysEqual(a, b) { if (a === b) return true; if (a == null || b == null) return false; if (a.length != b.length) return false; for (var i = 0; i < a.length; ++i) { if (a[i] !== b[i]) return false; } return true; } // Copyright (c) Microsoft Corporation. var AvroParser = /** @class */ (function () { function AvroParser() { } /** * Reads a fixed number of bytes from the stream. * * @param stream - * @param length - * @param options - */ AvroParser.readFixedBytes = function (stream, length, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var bytes; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, stream.read(length, { abortSignal: options.abortSignal })]; case 1: bytes = _a.sent(); if (bytes.length != length) { throw new Error("Hit stream end."); } return [2 /*return*/, bytes]; } }); }); }; /** * Reads a single byte from the stream. * * @param stream - * @param options - */ AvroParser.readByte = function (stream, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var buf; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, AvroParser.readFixedBytes(stream, 1, options)]; case 1: buf = _a.sent(); return [2 /*return*/, buf[0]]; } }); }); }; // int and long are stored in variable-length zig-zag coding. // variable-length: https://lucene.apache.org/core/3_5_0/fileformats.html#VInt // zig-zag: https://developers.google.com/protocol-buffers/docs/encoding?csw=1#types AvroParser.readZigZagLong = function (stream, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var zigZagEncoded, significanceInBit, byte, haveMoreByte, significanceInFloat, res; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: zigZagEncoded = 0; significanceInBit = 0; _a.label = 1; case 1: return [4 /*yield*/, AvroParser.readByte(stream, options)]; case 2: byte = _a.sent(); haveMoreByte = byte & 0x80; zigZagEncoded |= (byte & 0x7f) << significanceInBit; significanceInBit += 7; _a.label = 3; case 3: if (haveMoreByte && significanceInBit < 28) return [3 /*break*/, 1]; _a.label = 4; case 4: if (!haveMoreByte) return [3 /*break*/, 9]; // Switch to float arithmetic zigZagEncoded = zigZagEncoded; significanceInFloat = 268435456; // 2 ** 28. _a.label = 5; case 5: return [4 /*yield*/, AvroParser.readByte(stream, options)]; case 6: byte = _a.sent(); zigZagEncoded += (byte & 0x7f) * significanceInFloat; significanceInFloat *= 128; // 2 ** 7 _a.label = 7; case 7: if (byte & 0x80) return [3 /*break*/, 5]; _a.label = 8; case 8: res = (zigZagEncoded % 2 ? -(zigZagEncoded + 1) : zigZagEncoded) / 2; if (res < Number.MIN_SAFE_INTEGER || res > Number.MAX_SAFE_INTEGER) { throw new Error("Integer overflow."); } return [2 /*return*/, res]; case 9: return [2 /*return*/, (zigZagEncoded >> 1) ^ -(zigZagEncoded & 1)]; } }); }); }; AvroParser.readLong = function (stream, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { return [2 /*return*/, AvroParser.readZigZagLong(stream, options)]; }); }); }; AvroParser.readInt = function (stream, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { return [2 /*return*/, AvroParser.readZigZagLong(stream, options)]; }); }); }; AvroParser.readNull = function () { return tslib.__awaiter(this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { return [2 /*return*/, null]; }); }); }; AvroParser.readBoolean = function (stream, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var b; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, AvroParser.readByte(stream, options)]; case 1: b = _a.sent(); if (b == 1) { return [2 /*return*/, true]; } else if (b == 0) { return [2 /*return*/, false]; } else { throw new Error("Byte was not a boolean."); } } }); }); }; AvroParser.readFloat = function (stream, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var u8arr, view; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, AvroParser.readFixedBytes(stream, 4, options)]; case 1: u8arr = _a.sent(); view = new DataView(u8arr.buffer, u8arr.byteOffset, u8arr.byteLength); return [2 /*return*/, view.getFloat32(0, true)]; // littleEndian = true } }); }); }; AvroParser.readDouble = function (stream, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var u8arr, view; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, AvroParser.readFixedBytes(stream, 8, options)]; case 1: u8arr = _a.sent(); view = new DataView(u8arr.buffer, u8arr.byteOffset, u8arr.byteLength); return [2 /*return*/, view.getFloat64(0, true)]; // littleEndian = true } }); }); }; AvroParser.readBytes = function (stream, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var size; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, AvroParser.readLong(stream, options)]; case 1: size = _a.sent(); if (size < 0) { throw new Error("Bytes size was negative."); } return [4 /*yield*/, stream.read(size, { abortSignal: options.abortSignal })]; case 2: return [2 /*return*/, _a.sent()]; } }); }); }; AvroParser.readString = function (stream, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var u8arr, utf8decoder; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, AvroParser.readBytes(stream, options)]; case 1: u8arr = _a.sent(); // polyfill TextDecoder to be backward compatible with older // nodejs that doesn't expose TextDecoder as a global variable if (typeof TextDecoder === "undefined" && "function" !== "undefined") { global.TextDecoder = __nccwpck_require__(1669).TextDecoder; } utf8decoder = new TextDecoder(); return [2 /*return*/, utf8decoder.decode(u8arr)]; } }); }); }; AvroParser.readMapPair = function (stream, readItemMethod, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var key, value; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, AvroParser.readString(stream, options)]; case 1: key = _a.sent(); return [4 /*yield*/, readItemMethod(stream, options)]; case 2: value = _a.sent(); return [2 /*return*/, { key: key, value: value }]; } }); }); }; AvroParser.readMap = function (stream, readItemMethod, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var readPairMethod, pairs, dict, _i, pairs_1, pair; var _this = this; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: readPairMethod = function (stream, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(_this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, AvroParser.readMapPair(stream, readItemMethod, options)]; case 1: return [2 /*return*/, _a.sent()]; } }); }); }; return [4 /*yield*/, AvroParser.readArray(stream, readPairMethod, options)]; case 1: pairs = _a.sent(); dict = {}; for (_i = 0, pairs_1 = pairs; _i < pairs_1.length; _i++) { pair = pairs_1[_i]; dict[pair.key] = pair.value; } return [2 /*return*/, dict]; } }); }); }; AvroParser.readArray = function (stream, readItemMethod, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var items, count, item; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: items = []; return [4 /*yield*/, AvroParser.readLong(stream, options)]; case 1: count = _a.sent(); _a.label = 2; case 2: if (!(count != 0)) return [3 /*break*/, 8]; if (!(count < 0)) return [3 /*break*/, 4]; // Ignore block sizes return [4 /*yield*/, AvroParser.readLong(stream, options)]; case 3: // Ignore block sizes _a.sent(); count = -count; _a.label = 4; case 4: if (!count--) return [3 /*break*/, 6]; return [4 /*yield*/, readItemMethod(stream, options)]; case 5: item = _a.sent(); items.push(item); return [3 /*break*/, 4]; case 6: return [4 /*yield*/, AvroParser.readLong(stream, options)]; case 7: count = _a.sent(); return [3 /*break*/, 2]; case 8: return [2 /*return*/, items]; } }); }); }; return AvroParser; }()); var AvroComplex; (function (AvroComplex) { AvroComplex["RECORD"] = "record"; AvroComplex["ENUM"] = "enum"; AvroComplex["ARRAY"] = "array"; AvroComplex["MAP"] = "map"; AvroComplex["UNION"] = "union"; AvroComplex["FIXED"] = "fixed"; })(AvroComplex || (AvroComplex = {})); var AvroType = /** @class */ (function () { function AvroType() { } /** * Determines the AvroType from the Avro Schema. */ AvroType.fromSchema = function (schema) { if (typeof schema === "string") { return AvroType.fromStringSchema(schema); } else if (Array.isArray(schema)) { return AvroType.fromArraySchema(schema); } else { return AvroType.fromObjectSchema(schema); } }; AvroType.fromStringSchema = function (schema) { switch (schema) { case AvroPrimitive.NULL: case AvroPrimitive.BOOLEAN: case AvroPrimitive.INT: case AvroPrimitive.LONG: case AvroPrimitive.FLOAT: case AvroPrimitive.DOUBLE: case AvroPrimitive.BYTES: case AvroPrimitive.STRING: return new AvroPrimitiveType(schema); default: throw new Error("Unexpected Avro type " + schema); } }; AvroType.fromArraySchema = function (schema) { return new AvroUnionType(schema.map(AvroType.fromSchema)); }; AvroType.fromObjectSchema = function (schema) { var type = schema.type; // Primitives can be defined as strings or objects try { return AvroType.fromStringSchema(type); } catch (err) { } switch (type) { case AvroComplex.RECORD: if (schema.aliases) { throw new Error("aliases currently is not supported, schema: " + schema); } if (!schema.name) { throw new Error("Required attribute 'name' doesn't exist on schema: " + schema); } var fields = {}; if (!schema.fields) { throw new Error("Required attribute 'fields' doesn't exist on schema: " + schema); } for (var _i = 0, _a = schema.fields; _i < _a.length; _i++) { var field = _a[_i]; fields[field.name] = AvroType.fromSchema(field.type); } return new AvroRecordType(fields, schema.name); case AvroComplex.ENUM: if (schema.aliases) { throw new Error("aliases currently is not supported, schema: " + schema); } if (!schema.symbols) { throw new Error("Required attribute 'symbols' doesn't exist on schema: " + schema); } return new AvroEnumType(schema.symbols); case AvroComplex.MAP: if (!schema.values) { throw new Error("Required attribute 'values' doesn't exist on schema: " + schema); } return new AvroMapType(AvroType.fromSchema(schema.values)); case AvroComplex.ARRAY: // Unused today case AvroComplex.FIXED: // Unused today default: throw new Error("Unexpected Avro type " + type + " in " + schema); } }; return AvroType; }()); var AvroPrimitive; (function (AvroPrimitive) { AvroPrimitive["NULL"] = "null"; AvroPrimitive["BOOLEAN"] = "boolean"; AvroPrimitive["INT"] = "int"; AvroPrimitive["LONG"] = "long"; AvroPrimitive["FLOAT"] = "float"; AvroPrimitive["DOUBLE"] = "double"; AvroPrimitive["BYTES"] = "bytes"; AvroPrimitive["STRING"] = "string"; })(AvroPrimitive || (AvroPrimitive = {})); var AvroPrimitiveType = /** @class */ (function (_super) { tslib.__extends(AvroPrimitiveType, _super); function AvroPrimitiveType(primitive) { var _this = _super.call(this) || this; _this._primitive = primitive; return _this; } AvroPrimitiveType.prototype.read = function (stream, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = this._primitive; switch (_a) { case AvroPrimitive.NULL: return [3 /*break*/, 1]; case AvroPrimitive.BOOLEAN: return [3 /*break*/, 3]; case AvroPrimitive.INT: return [3 /*break*/, 5]; case AvroPrimitive.LONG: return [3 /*break*/, 7]; case AvroPrimitive.FLOAT: return [3 /*break*/, 9]; case AvroPrimitive.DOUBLE: return [3 /*break*/, 11]; case AvroPrimitive.BYTES: return [3 /*break*/, 13]; case AvroPrimitive.STRING: return [3 /*break*/, 15]; } return [3 /*break*/, 17]; case 1: return [4 /*yield*/, AvroParser.readNull()]; case 2: return [2 /*return*/, _b.sent()]; case 3: return [4 /*yield*/, AvroParser.readBoolean(stream, options)]; case 4: return [2 /*return*/, _b.sent()]; case 5: return [4 /*yield*/, AvroParser.readInt(stream, options)]; case 6: return [2 /*return*/, _b.sent()]; case 7: return [4 /*yield*/, AvroParser.readLong(stream, options)]; case 8: return [2 /*return*/, _b.sent()]; case 9: return [4 /*yield*/, AvroParser.readFloat(stream, options)]; case 10: return [2 /*return*/, _b.sent()]; case 11: return [4 /*yield*/, AvroParser.readDouble(stream, options)]; case 12: return [2 /*return*/, _b.sent()]; case 13: return [4 /*yield*/, AvroParser.readBytes(stream, options)]; case 14: return [2 /*return*/, _b.sent()]; case 15: return [4 /*yield*/, AvroParser.readString(stream, options)]; case 16: return [2 /*return*/, _b.sent()]; case 17: throw new Error("Unknown Avro Primitive"); } }); }); }; return AvroPrimitiveType; }(AvroType)); var AvroEnumType = /** @class */ (function (_super) { tslib.__extends(AvroEnumType, _super); function AvroEnumType(symbols) { var _this = _super.call(this) || this; _this._symbols = symbols; return _this; } AvroEnumType.prototype.read = function (stream, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var value; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, AvroParser.readInt(stream, options)]; case 1: value = _a.sent(); return [2 /*return*/, this._symbols[value]]; } }); }); }; return AvroEnumType; }(AvroType)); var AvroUnionType = /** @class */ (function (_super) { tslib.__extends(AvroUnionType, _super); function AvroUnionType(types) { var _this = _super.call(this) || this; _this._types = types; return _this; } AvroUnionType.prototype.read = function (stream, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var typeIndex; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, AvroParser.readInt(stream, options)]; case 1: typeIndex = _a.sent(); return [4 /*yield*/, this._types[typeIndex].read(stream, options)]; case 2: return [2 /*return*/, _a.sent()]; } }); }); }; return AvroUnionType; }(AvroType)); var AvroMapType = /** @class */ (function (_super) { tslib.__extends(AvroMapType, _super); function AvroMapType(itemType) { var _this = _super.call(this) || this; _this._itemType = itemType; return _this; } AvroMapType.prototype.read = function (stream, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var readItemMethod; var _this = this; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: readItemMethod = function (s, options) { return tslib.__awaiter(_this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this._itemType.read(s, options)]; case 1: return [2 /*return*/, _a.sent()]; } }); }); }; return [4 /*yield*/, AvroParser.readMap(stream, readItemMethod, options)]; case 1: return [2 /*return*/, _a.sent()]; } }); }); }; return AvroMapType; }(AvroType)); var AvroRecordType = /** @class */ (function (_super) { tslib.__extends(AvroRecordType, _super); function AvroRecordType(fields, name) { var _this = _super.call(this) || this; _this._fields = fields; _this._name = name; return _this; } AvroRecordType.prototype.read = function (stream, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var record, _a, _b, _i, key, _c, _d; return tslib.__generator(this, function (_e) { switch (_e.label) { case 0: record = {}; record["$schema"] = this._name; _a = []; for (_b in this._fields) _a.push(_b); _i = 0; _e.label = 1; case 1: if (!(_i < _a.length)) return [3 /*break*/, 4]; key = _a[_i]; if (!this._fields.hasOwnProperty(key)) return [3 /*break*/, 3]; _c = record; _d = key; return [4 /*yield*/, this._fields[key].read(stream, options)]; case 2: _c[_d] = _e.sent(); _e.label = 3; case 3: _i++; return [3 /*break*/, 1]; case 4: return [2 /*return*/, record]; } }); }); }; return AvroRecordType; }(AvroType)); // Copyright (c) Microsoft Corporation. var AvroReader = /** @class */ (function () { function AvroReader(dataStream, headerStream, currentBlockOffset, indexWithinCurrentBlock) { this._dataStream = dataStream; this._headerStream = headerStream || dataStream; this._initialized = false; this._blockOffset = currentBlockOffset || 0; this._objectIndex = indexWithinCurrentBlock || 0; this._initialBlockOffset = currentBlockOffset || 0; } Object.defineProperty(AvroReader.prototype, "blockOffset", { get: function () { return this._blockOffset; }, enumerable: false, configurable: true }); Object.defineProperty(AvroReader.prototype, "objectIndex", { get: function () { return this._objectIndex; }, enumerable: false, configurable: true }); AvroReader.prototype.initialize = function (options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var header, _a, codec, _b, schema, _c, i; return tslib.__generator(this, function (_d) { switch (_d.label) { case 0: return [4 /*yield*/, AvroParser.readFixedBytes(this._headerStream, AVRO_INIT_BYTES.length, { abortSignal: options.abortSignal })]; case 1: header = _d.sent(); if (!arraysEqual(header, AVRO_INIT_BYTES)) { throw new Error("Stream is not an Avro file."); } // File metadata is written as if defined by the following map schema: // { "type": "map", "values": "bytes"} _a = this; return [4 /*yield*/, AvroParser.readMap(this._headerStream, AvroParser.readString, { abortSignal: options.abortSignal })]; case 2: // File metadata is written as if defined by the following map schema: // { "type": "map", "values": "bytes"} _a._metadata = _d.sent(); codec = this._metadata[AVRO_CODEC_KEY]; if (!(codec == undefined || codec == "null")) { throw new Error("Codecs are not supported"); } // The 16-byte, randomly-generated sync marker for this file. _b = this; return [4 /*yield*/, AvroParser.readFixedBytes(this._headerStream, AVRO_SYNC_MARKER_SIZE, { abortSignal: options.abortSignal })]; case 3: // The 16-byte, randomly-generated sync marker for this file. _b._syncMarker = _d.sent(); schema = JSON.parse(this._metadata[AVRO_SCHEMA_KEY]); this._itemType = AvroType.fromSchema(schema); if (this._blockOffset == 0) { this._blockOffset = this._initialBlockOffset + this._dataStream.position; } _c = this; return [4 /*yield*/, AvroParser.readLong(this._dataStream, { abortSignal: options.abortSignal })]; case 4: _c._itemsRemainingInBlock = _d.sent(); // skip block length return [4 /*yield*/, AvroParser.readLong(this._dataStream, { abortSignal: options.abortSignal })]; case 5: // skip block length _d.sent(); this._initialized = true; if (!(this._objectIndex && this._objectIndex > 0)) return [3 /*break*/, 9]; i = 0; _d.label = 6; case 6: if (!(i < this._objectIndex)) return [3 /*break*/, 9]; return [4 /*yield*/, this._itemType.read(this._dataStream, { abortSignal: options.abortSignal })]; case 7: _d.sent(); this._itemsRemainingInBlock--; _d.label = 8; case 8: i++; return [3 /*break*/, 6]; case 9: return [2 /*return*/]; } }); }); }; AvroReader.prototype.hasNext = function () { return !this._initialized || this._itemsRemainingInBlock > 0; }; AvroReader.prototype.parseObjects = function (options) { if (options === void 0) { options = {}; } return tslib.__asyncGenerator(this, arguments, function parseObjects_1() { var result, marker, _a, err_1; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: if (!!this._initialized) return [3 /*break*/, 2]; return [4 /*yield*/, tslib.__await(this.initialize(options))]; case 1: _b.sent(); _b.label = 2; case 2: if (!this.hasNext()) return [3 /*break*/, 13]; return [4 /*yield*/, tslib.__await(this._itemType.read(this._dataStream, { abortSignal: options.abortSignal }))]; case 3: result = _b.sent(); this._itemsRemainingInBlock--; this._objectIndex++; if (!(this._itemsRemainingInBlock == 0)) return [3 /*break*/, 10]; return [4 /*yield*/, tslib.__await(AvroParser.readFixedBytes(this._dataStream, AVRO_SYNC_MARKER_SIZE, { abortSignal: options.abortSignal }))]; case 4: marker = _b.sent(); this._blockOffset = this._initialBlockOffset + this._dataStream.position; this._objectIndex = 0; if (!arraysEqual(this._syncMarker, marker)) { throw new Error("Stream is not a valid Avro file."); } _b.label = 5; case 5: _b.trys.push([5, 7, , 8]); _a = this; return [4 /*yield*/, tslib.__await(AvroParser.readLong(this._dataStream, { abortSignal: options.abortSignal }))]; case 6: _a._itemsRemainingInBlock = _b.sent(); return [3 /*break*/, 8]; case 7: err_1 = _b.sent(); // We hit the end of the stream. this._itemsRemainingInBlock = 0; return [3 /*break*/, 8]; case 8: if (!(this._itemsRemainingInBlock > 0)) return [3 /*break*/, 10]; // Ignore block size return [4 /*yield*/, tslib.__await(AvroParser.readLong(this._dataStream, { abortSignal: options.abortSignal }))]; case 9: // Ignore block size _b.sent(); _b.label = 10; case 10: return [4 /*yield*/, tslib.__await(result)]; case 11: return [4 /*yield*/, _b.sent()]; case 12: _b.sent(); return [3 /*break*/, 2]; case 13: return [2 /*return*/]; } }); }); }; return AvroReader; }()); // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. var AvroReadable = /** @class */ (function () { function AvroReadable() { } return AvroReadable; }()); // Copyright (c) Microsoft Corporation. var ABORT_ERROR = new abortController.AbortError("Reading from the avro stream was aborted."); var AvroReadableFromStream = /** @class */ (function (_super) { tslib.__extends(AvroReadableFromStream, _super); function AvroReadableFromStream(readable) { var _this = _super.call(this) || this; _this._readable = readable; _this._position = 0; return _this; } AvroReadableFromStream.prototype.toUint8Array = function (data) { if (typeof data === "string") { return Buffer.from(data); } return data; }; Object.defineProperty(AvroReadableFromStream.prototype, "position", { get: function () { return this._position; }, enumerable: false, configurable: true }); AvroReadableFromStream.prototype.read = function (size, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var chunk; var _this = this; return tslib.__generator(this, function (_b) { if ((_a = options.abortSignal) === null || _a === void 0 ? void 0 : _a.aborted) { throw ABORT_ERROR; } if (size < 0) { throw new Error("size parameter should be positive: " + size); } if (size === 0) { return [2 /*return*/, new Uint8Array()]; } if (!this._readable.readable) { throw new Error("Stream no longer readable."); } chunk = this._readable.read(size); if (chunk) { this._position += chunk.length; // chunk.length maybe less than desired size if the stream ends. return [2 /*return*/, this.toUint8Array(chunk)]; } else { // register callback to wait for enough data to read return [2 /*return*/, new Promise(function (resolve, reject) { var cleanUp = function () { _this._readable.removeListener("readable", readableCallback); _this._readable.removeListener("error", rejectCallback); _this._readable.removeListener("end", rejectCallback); _this._readable.removeListener("close", rejectCallback); if (options.abortSignal) { options.abortSignal.removeEventListener("abort", abortHandler); } }; var readableCallback = function () { var chunk = _this._readable.read(size); if (chunk) { _this._position += chunk.length; cleanUp(); // chunk.length maybe less than desired size if the stream ends. resolve(_this.toUint8Array(chunk)); } }; var rejectCallback = function () { cleanUp(); reject(); }; var abortHandler = function () { cleanUp(); reject(ABORT_ERROR); }; _this._readable.on("readable", readableCallback); _this._readable.once("error", rejectCallback); _this._readable.once("end", rejectCallback); _this._readable.once("close", rejectCallback); if (options.abortSignal) { options.abortSignal.addEventListener("abort", abortHandler); } })]; } }); }); }; return AvroReadableFromStream; }(AvroReadable)); // Copyright (c) Microsoft Corporation. /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * * A Node.js BlobQuickQueryStream will internally parse avro data stream for blob query. */ var BlobQuickQueryStream = /** @class */ (function (_super) { tslib.__extends(BlobQuickQueryStream, _super); /** * Creates an instance of BlobQuickQueryStream. * * @param source - The current ReadableStream returned from getter * @param options - */ function BlobQuickQueryStream(source, options) { if (options === void 0) { options = {}; } var _this = _super.call(this) || this; _this.avroPaused = true; _this.source = source; _this.onProgress = options.onProgress; _this.onError = options.onError; _this.avroReader = new AvroReader(new AvroReadableFromStream(_this.source)); _this.avroIter = _this.avroReader.parseObjects({ abortSignal: options.abortSignal }); return _this; } BlobQuickQueryStream.prototype._read = function () { var _this = this; if (this.avroPaused) { this.readInternal().catch(function (err) { _this.emit("error", err); }); } }; BlobQuickQueryStream.prototype.readInternal = function () { return tslib.__awaiter(this, void 0, void 0, function () { var avroNext, obj, schema, data, bytesScanned, totalBytes, fatal, name_1, description, position; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: this.avroPaused = false; _a.label = 1; case 1: return [4 /*yield*/, this.avroIter.next()]; case 2: avroNext = _a.sent(); if (avroNext.done) { return [3 /*break*/, 4]; } obj = avroNext.value; schema = obj.$schema; if (typeof schema !== "string") { throw Error("Missing schema in avro record."); } switch (schema) { case "com.microsoft.azure.storage.queryBlobContents.resultData": data = obj.data; if (data instanceof Uint8Array === false) { throw Error("Invalid data in avro result record."); } if (!this.push(Buffer.from(data))) { this.avroPaused = true; } break; case "com.microsoft.azure.storage.queryBlobContents.progress": bytesScanned = obj.bytesScanned; if (typeof bytesScanned !== "number") { throw Error("Invalid bytesScanned in avro progress record."); } if (this.onProgress) { this.onProgress({ loadedBytes: bytesScanned }); } break; case "com.microsoft.azure.storage.queryBlobContents.end": if (this.onProgress) { totalBytes = obj.totalBytes; if (typeof totalBytes !== "number") { throw Error("Invalid totalBytes in avro end record."); } this.onProgress({ loadedBytes: totalBytes }); } this.push(null); break; case "com.microsoft.azure.storage.queryBlobContents.error": if (this.onError) { fatal = obj.fatal; if (typeof fatal !== "boolean") { throw Error("Invalid fatal in avro error record."); } name_1 = obj.name; if (typeof name_1 !== "string") { throw Error("Invalid name in avro error record."); } description = obj.description; if (typeof description !== "string") { throw Error("Invalid description in avro error record."); } position = obj.position; if (typeof position !== "number") { throw Error("Invalid position in avro error record."); } this.onError({ position: position, name: name_1, isFatal: fatal, description: description }); } break; default: throw Error("Unknown schema " + schema + " in avro progress record."); } _a.label = 3; case 3: if (!avroNext.done && !this.avroPaused) return [3 /*break*/, 1]; _a.label = 4; case 4: return [2 /*return*/]; } }); }); }; return BlobQuickQueryStream; }(stream.Readable)); // Copyright (c) Microsoft Corporation. /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * * BlobQueryResponse implements BlobDownloadResponseModel interface, and in Node.js runtime it will * parse avor data returned by blob query. */ var BlobQueryResponse = /** @class */ (function () { /** * Creates an instance of BlobQueryResponse. * * @param originalResponse - * @param options - */ function BlobQueryResponse(originalResponse, options) { if (options === void 0) { options = {}; } this.originalResponse = originalResponse; this.blobDownloadStream = new BlobQuickQueryStream(this.originalResponse.readableStreamBody, options); } Object.defineProperty(BlobQueryResponse.prototype, "acceptRanges", { /** * Indicates that the service supports * requests for partial file content. * * @readonly */ get: function () { return this.originalResponse.acceptRanges; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "cacheControl", { /** * Returns if it was previously specified * for the file. * * @readonly */ get: function () { return this.originalResponse.cacheControl; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "contentDisposition", { /** * Returns the value that was specified * for the 'x-ms-content-disposition' header and specifies how to process the * response. * * @readonly */ get: function () { return this.originalResponse.contentDisposition; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "contentEncoding", { /** * Returns the value that was specified * for the Content-Encoding request header. * * @readonly */ get: function () { return this.originalResponse.contentEncoding; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "contentLanguage", { /** * Returns the value that was specified * for the Content-Language request header. * * @readonly */ get: function () { return this.originalResponse.contentLanguage; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "blobSequenceNumber", { /** * The current sequence number for a * page blob. This header is not returned for block blobs or append blobs. * * @readonly */ get: function () { return this.originalResponse.blobSequenceNumber; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "blobType", { /** * The blob's type. Possible values include: * 'BlockBlob', 'PageBlob', 'AppendBlob'. * * @readonly */ get: function () { return this.originalResponse.blobType; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "contentLength", { /** * The number of bytes present in the * response body. * * @readonly */ get: function () { return this.originalResponse.contentLength; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "contentMD5", { /** * If the file has an MD5 hash and the * request is to read the full file, this response header is returned so that * the client can check for message content integrity. If the request is to * read a specified range and the 'x-ms-range-get-content-md5' is set to * true, then the request returns an MD5 hash for the range, as long as the * range size is less than or equal to 4 MB. If neither of these sets of * conditions is true, then no value is returned for the 'Content-MD5' * header. * * @readonly */ get: function () { return this.originalResponse.contentMD5; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "contentRange", { /** * Indicates the range of bytes returned if * the client requested a subset of the file by setting the Range request * header. * * @readonly */ get: function () { return this.originalResponse.contentRange; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "contentType", { /** * The content type specified for the file. * The default content type is 'application/octet-stream' * * @readonly */ get: function () { return this.originalResponse.contentType; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "copyCompletedOn", { /** * Conclusion time of the last attempted * Copy File operation where this file was the destination file. This value * can specify the time of a completed, aborted, or failed copy attempt. * * @readonly */ get: function () { return undefined; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "copyId", { /** * String identifier for the last attempted Copy * File operation where this file was the destination file. * * @readonly */ get: function () { return this.originalResponse.copyId; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "copyProgress", { /** * Contains the number of bytes copied and * the total bytes in the source in the last attempted Copy File operation * where this file was the destination file. Can show between 0 and * Content-Length bytes copied. * * @readonly */ get: function () { return this.originalResponse.copyProgress; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "copySource", { /** * URL up to 2KB in length that specifies the * source file used in the last attempted Copy File operation where this file * was the destination file. * * @readonly */ get: function () { return this.originalResponse.copySource; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "copyStatus", { /** * State of the copy operation * identified by 'x-ms-copy-id'. Possible values include: 'pending', * 'success', 'aborted', 'failed' * * @readonly */ get: function () { return this.originalResponse.copyStatus; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "copyStatusDescription", { /** * Only appears when * x-ms-copy-status is failed or pending. Describes cause of fatal or * non-fatal copy operation failure. * * @readonly */ get: function () { return this.originalResponse.copyStatusDescription; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "leaseDuration", { /** * When a blob is leased, * specifies whether the lease is of infinite or fixed duration. Possible * values include: 'infinite', 'fixed'. * * @readonly */ get: function () { return this.originalResponse.leaseDuration; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "leaseState", { /** * Lease state of the blob. Possible * values include: 'available', 'leased', 'expired', 'breaking', 'broken'. * * @readonly */ get: function () { return this.originalResponse.leaseState; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "leaseStatus", { /** * The current lease status of the * blob. Possible values include: 'locked', 'unlocked'. * * @readonly */ get: function () { return this.originalResponse.leaseStatus; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "date", { /** * A UTC date/time value generated by the service that * indicates the time at which the response was initiated. * * @readonly */ get: function () { return this.originalResponse.date; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "blobCommittedBlockCount", { /** * The number of committed blocks * present in the blob. This header is returned only for append blobs. * * @readonly */ get: function () { return this.originalResponse.blobCommittedBlockCount; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "etag", { /** * The ETag contains a value that you can use to * perform operations conditionally, in quotes. * * @readonly */ get: function () { return this.originalResponse.etag; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "errorCode", { /** * The error code. * * @readonly */ get: function () { return this.originalResponse.errorCode; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "isServerEncrypted", { /** * The value of this header is set to * true if the file data and application metadata are completely encrypted * using the specified algorithm. Otherwise, the value is set to false (when * the file is unencrypted, or if only parts of the file/application metadata * are encrypted). * * @readonly */ get: function () { return this.originalResponse.isServerEncrypted; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "blobContentMD5", { /** * If the blob has a MD5 hash, and if * request contains range header (Range or x-ms-range), this response header * is returned with the value of the whole blob's MD5 value. This value may * or may not be equal to the value returned in Content-MD5 header, with the * latter calculated from the requested range. * * @readonly */ get: function () { return this.originalResponse.blobContentMD5; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "lastModified", { /** * Returns the date and time the file was last * modified. Any operation that modifies the file or its properties updates * the last modified time. * * @readonly */ get: function () { return this.originalResponse.lastModified; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "metadata", { /** * A name-value pair * to associate with a file storage object. * * @readonly */ get: function () { return this.originalResponse.metadata; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "requestId", { /** * This header uniquely identifies the request * that was made and can be used for troubleshooting the request. * * @readonly */ get: function () { return this.originalResponse.requestId; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "clientRequestId", { /** * If a client request id header is sent in the request, this header will be present in the * response with the same value. * * @readonly */ get: function () { return this.originalResponse.clientRequestId; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "version", { /** * Indicates the version of the File service used * to execute the request. * * @readonly */ get: function () { return this.originalResponse.version; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "encryptionKeySha256", { /** * The SHA-256 hash of the encryption key used to encrypt the blob. This value is only returned * when the blob was encrypted with a customer-provided key. * * @readonly */ get: function () { return this.originalResponse.encryptionKeySha256; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "contentCrc64", { /** * If the request is to read a specified range and the x-ms-range-get-content-crc64 is set to * true, then the request returns a crc64 for the range, as long as the range size is less than * or equal to 4 MB. If both x-ms-range-get-content-crc64 & x-ms-range-get-content-md5 is * specified in the same request, it will fail with 400(Bad Request) */ get: function () { return this.originalResponse.contentCrc64; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "blobBody", { /** * The response body as a browser Blob. * Always undefined in node.js. * * @readonly */ get: function () { return undefined; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "readableStreamBody", { /** * The response body as a node.js Readable stream. * Always undefined in the browser. * * It will parse avor data returned by blob query. * * @readonly */ get: function () { return coreHttp.isNode ? this.blobDownloadStream : undefined; }, enumerable: false, configurable: true }); Object.defineProperty(BlobQueryResponse.prototype, "_response", { /** * The HTTP response. */ get: function () { return this.originalResponse._response; }, enumerable: false, configurable: true }); return BlobQueryResponse; }()); // Copyright (c) Microsoft Corporation. (function (BlockBlobTier) { /** * Optimized for storing data that is accessed frequently. */ BlockBlobTier["Hot"] = "Hot"; /** * Optimized for storing data that is infrequently accessed and stored for at least 30 days. */ BlockBlobTier["Cool"] = "Cool"; /** * Optimized for storing data that is rarely accessed and stored for at least 180 days * with flexible latency requirements (on the order of hours). */ BlockBlobTier["Archive"] = "Archive"; })(exports.BlockBlobTier || (exports.BlockBlobTier = {})); (function (PremiumPageBlobTier) { /** * P4 Tier. */ PremiumPageBlobTier["P4"] = "P4"; /** * P6 Tier. */ PremiumPageBlobTier["P6"] = "P6"; /** * P10 Tier. */ PremiumPageBlobTier["P10"] = "P10"; /** * P15 Tier. */ PremiumPageBlobTier["P15"] = "P15"; /** * P20 Tier. */ PremiumPageBlobTier["P20"] = "P20"; /** * P30 Tier. */ PremiumPageBlobTier["P30"] = "P30"; /** * P40 Tier. */ PremiumPageBlobTier["P40"] = "P40"; /** * P50 Tier. */ PremiumPageBlobTier["P50"] = "P50"; /** * P60 Tier. */ PremiumPageBlobTier["P60"] = "P60"; /** * P70 Tier. */ PremiumPageBlobTier["P70"] = "P70"; /** * P80 Tier. */ PremiumPageBlobTier["P80"] = "P80"; })(exports.PremiumPageBlobTier || (exports.PremiumPageBlobTier = {})); function toAccessTier(tier) { if (tier == undefined) { return undefined; } return tier; // No more check if string is a valid AccessTier, and left this to underlay logic to decide(service). } function ensureCpkIfSpecified(cpk, isHttps) { if (cpk && !isHttps) { throw new RangeError("Customer-provided encryption key must be used over HTTPS."); } if (cpk && !cpk.encryptionAlgorithm) { cpk.encryptionAlgorithm = EncryptionAlgorithmAES25; } } // Copyright (c) Microsoft Corporation. /** * Function that converts PageRange and ClearRange to a common Range object. * PageRange and ClearRange have start and end while Range offset and count * this function normalizes to Range. * @param response - Model PageBlob Range response */ function rangeResponseFromModel(response) { var pageRange = (response._response.parsedBody.pageRange || []).map(function (x) { return ({ offset: x.start, count: x.end - x.start }); }); var clearRange = (response._response.parsedBody.clearRange || []).map(function (x) { return ({ offset: x.start, count: x.end - x.start }); }); return tslib.__assign(tslib.__assign({}, response), { pageRange: pageRange, clearRange: clearRange, _response: tslib.__assign(tslib.__assign({}, response._response), { parsedBody: { pageRange: pageRange, clearRange: clearRange } }) }); } // Copyright (c) Microsoft Corporation. /** * This is the poller returned by {@link BlobClient.beginCopyFromURL}. * This can not be instantiated directly outside of this package. * * @hidden */ var BlobBeginCopyFromUrlPoller = /** @class */ (function (_super) { tslib.__extends(BlobBeginCopyFromUrlPoller, _super); function BlobBeginCopyFromUrlPoller(options) { var _this = this; var blobClient = options.blobClient, copySource = options.copySource, _a = options.intervalInMs, intervalInMs = _a === void 0 ? 15000 : _a, onProgress = options.onProgress, resumeFrom = options.resumeFrom, startCopyFromURLOptions = options.startCopyFromURLOptions; var state; if (resumeFrom) { state = JSON.parse(resumeFrom).state; } var operation = makeBlobBeginCopyFromURLPollOperation(tslib.__assign(tslib.__assign({}, state), { blobClient: blobClient, copySource: copySource, startCopyFromURLOptions: startCopyFromURLOptions })); _this = _super.call(this, operation) || this; if (typeof onProgress === "function") { _this.onProgress(onProgress); } _this.intervalInMs = intervalInMs; return _this; } BlobBeginCopyFromUrlPoller.prototype.delay = function () { return coreHttp.delay(this.intervalInMs); }; return BlobBeginCopyFromUrlPoller; }(coreLro.Poller)); /** * Note: Intentionally using function expression over arrow function expression * so that the function can be invoked with a different context. * This affects what `this` refers to. * @hidden */ var cancel = function cancel(options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var state, copyId; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: state = this.state; copyId = state.copyId; if (state.isCompleted) { return [2 /*return*/, makeBlobBeginCopyFromURLPollOperation(state)]; } if (!copyId) { state.isCancelled = true; return [2 /*return*/, makeBlobBeginCopyFromURLPollOperation(state)]; } // if abortCopyFromURL throws, it will bubble up to user's poller.cancelOperation call return [4 /*yield*/, state.blobClient.abortCopyFromURL(copyId, { abortSignal: options.abortSignal })]; case 1: // if abortCopyFromURL throws, it will bubble up to user's poller.cancelOperation call _a.sent(); state.isCancelled = true; return [2 /*return*/, makeBlobBeginCopyFromURLPollOperation(state)]; } }); }); }; /** * Note: Intentionally using function expression over arrow function expression * so that the function can be invoked with a different context. * This affects what `this` refers to. * @hidden */ var update = function update(options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var state, blobClient, copySource, startCopyFromURLOptions, result, result, copyStatus, copyProgress, prevCopyProgress, err_1; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: state = this.state; blobClient = state.blobClient, copySource = state.copySource, startCopyFromURLOptions = state.startCopyFromURLOptions; if (!!state.isStarted) return [3 /*break*/, 2]; state.isStarted = true; return [4 /*yield*/, blobClient.startCopyFromURL(copySource, startCopyFromURLOptions)]; case 1: result = _a.sent(); // copyId is needed to abort state.copyId = result.copyId; if (result.copyStatus === "success") { state.result = result; state.isCompleted = true; } return [3 /*break*/, 6]; case 2: if (!!state.isCompleted) return [3 /*break*/, 6]; _a.label = 3; case 3: _a.trys.push([3, 5, , 6]); return [4 /*yield*/, state.blobClient.getProperties({ abortSignal: options.abortSignal })]; case 4: result = _a.sent(); copyStatus = result.copyStatus, copyProgress = result.copyProgress; prevCopyProgress = state.copyProgress; if (copyProgress) { state.copyProgress = copyProgress; } if (copyStatus === "pending" && copyProgress !== prevCopyProgress && typeof options.fireProgress === "function") { // trigger in setTimeout, or swallow error? options.fireProgress(state); } else if (copyStatus === "success") { state.result = result; state.isCompleted = true; } else if (copyStatus === "failed") { state.error = new Error("Blob copy failed with reason: \"" + (result.copyStatusDescription || "unknown") + "\""); state.isCompleted = true; } return [3 /*break*/, 6]; case 5: err_1 = _a.sent(); state.error = err_1; state.isCompleted = true; return [3 /*break*/, 6]; case 6: return [2 /*return*/, makeBlobBeginCopyFromURLPollOperation(state)]; } }); }); }; /** * Note: Intentionally using function expression over arrow function expression * so that the function can be invoked with a different context. * This affects what `this` refers to. * @hidden */ var toString = function toString() { return JSON.stringify({ state: this.state }, function (key, value) { // remove blobClient from serialized state since a client can't be hydrated from this info. if (key === "blobClient") { return undefined; } return value; }); }; /** * Creates a poll operation given the provided state. * @hidden */ function makeBlobBeginCopyFromURLPollOperation(state) { return { state: tslib.__assign({}, state), cancel: cancel, toString: toString, update: update }; } // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. /** * Generate a range string. For example: * * "bytes=255-" or "bytes=0-511" * * @param iRange - */ function rangeToString(iRange) { if (iRange.offset < 0) { throw new RangeError("Range.offset cannot be smaller than 0."); } if (iRange.count && iRange.count <= 0) { throw new RangeError("Range.count must be larger than 0. Leave it undefined if you want a range from offset to the end."); } return iRange.count ? "bytes=" + iRange.offset + "-" + (iRange.offset + iRange.count - 1) : "bytes=" + iRange.offset + "-"; } // Copyright (c) Microsoft Corporation. /** * States for Batch. */ var BatchStates; (function (BatchStates) { BatchStates[BatchStates["Good"] = 0] = "Good"; BatchStates[BatchStates["Error"] = 1] = "Error"; })(BatchStates || (BatchStates = {})); /** * Batch provides basic parallel execution with concurrency limits. * Will stop execute left operations when one of the executed operation throws an error. * But Batch cannot cancel ongoing operations, you need to cancel them by yourself. */ var Batch = /** @class */ (function () { /** * Creates an instance of Batch. * @param concurrency - */ function Batch(concurrency) { if (concurrency === void 0) { concurrency = 5; } /** * Number of active operations under execution. */ this.actives = 0; /** * Number of completed operations under execution. */ this.completed = 0; /** * Offset of next operation to be executed. */ this.offset = 0; /** * Operation array to be executed. */ this.operations = []; /** * States of Batch. When an error happens, state will turn into error. * Batch will stop execute left operations. */ this.state = BatchStates.Good; if (concurrency < 1) { throw new RangeError("concurrency must be larger than 0"); } this.concurrency = concurrency; this.emitter = new events.EventEmitter(); } /** * Add a operation into queue. * * @param operation - */ Batch.prototype.addOperation = function (operation) { var _this = this; this.operations.push(function () { return tslib.__awaiter(_this, void 0, void 0, function () { var error_1; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); this.actives++; return [4 /*yield*/, operation()]; case 1: _a.sent(); this.actives--; this.completed++; this.parallelExecute(); return [3 /*break*/, 3]; case 2: error_1 = _a.sent(); this.emitter.emit("error", error_1); return [3 /*break*/, 3]; case 3: return [2 /*return*/]; } }); }); }); }; /** * Start execute operations in the queue. * */ Batch.prototype.do = function () { return tslib.__awaiter(this, void 0, void 0, function () { var _this = this; return tslib.__generator(this, function (_a) { if (this.operations.length === 0) { return [2 /*return*/, Promise.resolve()]; } this.parallelExecute(); return [2 /*return*/, new Promise(function (resolve, reject) { _this.emitter.on("finish", resolve); _this.emitter.on("error", function (error) { _this.state = BatchStates.Error; reject(error); }); })]; }); }); }; /** * Get next operation to be executed. Return null when reaching ends. * */ Batch.prototype.nextOperation = function () { if (this.offset < this.operations.length) { return this.operations[this.offset++]; } return null; }; /** * Start execute operations. One one the most important difference between * this method with do() is that do() wraps as an sync method. * */ Batch.prototype.parallelExecute = function () { if (this.state === BatchStates.Error) { return; } if (this.completed >= this.operations.length) { this.emitter.emit("finish"); return; } while (this.actives < this.concurrency) { var operation = this.nextOperation(); if (operation) { operation(); } else { return; } } }; return Batch; }()); // Copyright (c) Microsoft Corporation. /** * This class generates a readable stream from the data in an array of buffers. */ var BuffersStream = /** @class */ (function (_super) { tslib.__extends(BuffersStream, _super); /** * Creates an instance of BuffersStream that will emit the data * contained in the array of buffers. * * @param buffers - Array of buffers containing the data * @param byteLength - The total length of data contained in the buffers */ function BuffersStream(buffers, byteLength, options) { var _this = _super.call(this, options) || this; _this.buffers = buffers; _this.byteLength = byteLength; _this.byteOffsetInCurrentBuffer = 0; _this.bufferIndex = 0; _this.pushedBytesLength = 0; // check byteLength is no larger than buffers[] total length var buffersLength = 0; for (var _i = 0, _a = _this.buffers; _i < _a.length; _i++) { var buf = _a[_i]; buffersLength += buf.byteLength; } if (buffersLength < _this.byteLength) { throw new Error("Data size shouldn't be larger than the total length of buffers."); } return _this; } /** * Internal _read() that will be called when the stream wants to pull more data in. * * @param size - Optional. The size of data to be read */ BuffersStream.prototype._read = function (size) { if (this.pushedBytesLength >= this.byteLength) { this.push(null); } if (!size) { size = this.readableHighWaterMark; } var outBuffers = []; var i = 0; while (i < size && this.pushedBytesLength < this.byteLength) { // The last buffer may be longer than the data it contains. var remainingDataInAllBuffers = this.byteLength - this.pushedBytesLength; var remainingCapacityInThisBuffer = this.buffers[this.bufferIndex].byteLength - this.byteOffsetInCurrentBuffer; var remaining = Math.min(remainingCapacityInThisBuffer, remainingDataInAllBuffers); if (remaining > size - i) { // chunkSize = size - i var end = this.byteOffsetInCurrentBuffer + size - i; outBuffers.push(this.buffers[this.bufferIndex].slice(this.byteOffsetInCurrentBuffer, end)); this.pushedBytesLength += size - i; this.byteOffsetInCurrentBuffer = end; i = size; break; } else { // chunkSize = remaining var end = this.byteOffsetInCurrentBuffer + remaining; outBuffers.push(this.buffers[this.bufferIndex].slice(this.byteOffsetInCurrentBuffer, end)); if (remaining === remainingCapacityInThisBuffer) { // this.buffers[this.bufferIndex] used up, shift to next one this.byteOffsetInCurrentBuffer = 0; this.bufferIndex++; } else { this.byteOffsetInCurrentBuffer = end; } this.pushedBytesLength += remaining; i += remaining; } } if (outBuffers.length > 1) { this.push(Buffer.concat(outBuffers)); } else if (outBuffers.length === 1) { this.push(outBuffers[0]); } }; return BuffersStream; }(stream.Readable)); // Copyright (c) Microsoft Corporation. /** * maxBufferLength is max size of each buffer in the pooled buffers. */ // Can't use import as Typescript doesn't recognize "buffer". var maxBufferLength = __nccwpck_require__(4293).constants.MAX_LENGTH; /** * This class provides a buffer container which conceptually has no hard size limit. * It accepts a capacity, an array of input buffers and the total length of input data. * It will allocate an internal "buffer" of the capacity and fill the data in the input buffers * into the internal "buffer" serially with respect to the total length. * Then by calling PooledBuffer.getReadableStream(), you can get a readable stream * assembled from all the data in the internal "buffer". */ var PooledBuffer = /** @class */ (function () { function PooledBuffer(capacity, buffers, totalLength) { /** * Internal buffers used to keep the data. * Each buffer has a length of the maxBufferLength except last one. */ this.buffers = []; this.capacity = capacity; this._size = 0; // allocate var bufferNum = Math.ceil(capacity / maxBufferLength); for (var i = 0; i < bufferNum; i++) { var len = i === bufferNum - 1 ? capacity % maxBufferLength : maxBufferLength; if (len === 0) { len = maxBufferLength; } this.buffers.push(Buffer.allocUnsafe(len)); } if (buffers) { this.fill(buffers, totalLength); } } Object.defineProperty(PooledBuffer.prototype, "size", { /** * The size of the data contained in the pooled buffers. */ get: function () { return this._size; }, enumerable: false, configurable: true }); /** * Fill the internal buffers with data in the input buffers serially * with respect to the total length and the total capacity of the internal buffers. * Data copied will be shift out of the input buffers. * * @param buffers - Input buffers containing the data to be filled in the pooled buffer * @param totalLength - Total length of the data to be filled in. * */ PooledBuffer.prototype.fill = function (buffers, totalLength) { this._size = Math.min(this.capacity, totalLength); var i = 0, j = 0, targetOffset = 0, sourceOffset = 0, totalCopiedNum = 0; while (totalCopiedNum < this._size) { var source = buffers[i]; var target = this.buffers[j]; var copiedNum = source.copy(target, targetOffset, sourceOffset); totalCopiedNum += copiedNum; sourceOffset += copiedNum; targetOffset += copiedNum; if (sourceOffset === source.length) { i++; sourceOffset = 0; } if (targetOffset === target.length) { j++; targetOffset = 0; } } // clear copied from source buffers buffers.splice(0, i); if (buffers.length > 0) { buffers[0] = buffers[0].slice(sourceOffset); } }; /** * Get the readable stream assembled from all the data in the internal buffers. * */ PooledBuffer.prototype.getReadableStream = function () { return new BuffersStream(this.buffers, this.size); }; return PooledBuffer; }()); // Copyright (c) Microsoft Corporation. /** * This class accepts a Node.js Readable stream as input, and keeps reading data * from the stream into the internal buffer structure, until it reaches maxBuffers. * Every available buffer will try to trigger outgoingHandler. * * The internal buffer structure includes an incoming buffer array, and a outgoing * buffer array. The incoming buffer array includes the "empty" buffers can be filled * with new incoming data. The outgoing array includes the filled buffers to be * handled by outgoingHandler. Every above buffer size is defined by parameter bufferSize. * * NUM_OF_ALL_BUFFERS = BUFFERS_IN_INCOMING + BUFFERS_IN_OUTGOING + BUFFERS_UNDER_HANDLING * * NUM_OF_ALL_BUFFERS lesser than or equal to maxBuffers * * PERFORMANCE IMPROVEMENT TIPS: * 1. Input stream highWaterMark is better to set a same value with bufferSize * parameter, which will avoid Buffer.concat() operations. * 2. concurrency should set a smaller value than maxBuffers, which is helpful to * reduce the possibility when a outgoing handler waits for the stream data. * in this situation, outgoing handlers are blocked. * Outgoing queue shouldn't be empty. */ var BufferScheduler = /** @class */ (function () { /** * Creates an instance of BufferScheduler. * * @param readable - A Node.js Readable stream * @param bufferSize - Buffer size of every maintained buffer * @param maxBuffers - How many buffers can be allocated * @param outgoingHandler - An async function scheduled to be * triggered when a buffer fully filled * with stream data * @param concurrency - Concurrency of executing outgoingHandlers (>0) * @param encoding - [Optional] Encoding of Readable stream when it's a string stream */ function BufferScheduler(readable, bufferSize, maxBuffers, outgoingHandler, concurrency, encoding) { /** * An internal event emitter. */ this.emitter = new events.EventEmitter(); /** * An internal offset marker to track data offset in bytes of next outgoingHandler. */ this.offset = 0; /** * An internal marker to track whether stream is end. */ this.isStreamEnd = false; /** * An internal marker to track whether stream or outgoingHandler returns error. */ this.isError = false; /** * How many handlers are executing. */ this.executingOutgoingHandlers = 0; /** * How many buffers have been allocated. */ this.numBuffers = 0; /** * Because this class doesn't know how much data every time stream pops, which * is defined by highWaterMarker of the stream. So BufferScheduler will cache * data received from the stream, when data in unresolvedDataArray exceeds the * blockSize defined, it will try to concat a blockSize of buffer, fill into available * buffers from incoming and push to outgoing array. */ this.unresolvedDataArray = []; /** * How much data consisted in unresolvedDataArray. */ this.unresolvedLength = 0; /** * The array includes all the available buffers can be used to fill data from stream. */ this.incoming = []; /** * The array (queue) includes all the buffers filled from stream data. */ this.outgoing = []; if (bufferSize <= 0) { throw new RangeError("bufferSize must be larger than 0, current is " + bufferSize); } if (maxBuffers <= 0) { throw new RangeError("maxBuffers must be larger than 0, current is " + maxBuffers); } if (concurrency <= 0) { throw new RangeError("concurrency must be larger than 0, current is " + concurrency); } this.bufferSize = bufferSize; this.maxBuffers = maxBuffers; this.readable = readable; this.outgoingHandler = outgoingHandler; this.concurrency = concurrency; this.encoding = encoding; } /** * Start the scheduler, will return error when stream of any of the outgoingHandlers * returns error. * */ BufferScheduler.prototype.do = function () { return tslib.__awaiter(this, void 0, void 0, function () { var _this = this; return tslib.__generator(this, function (_a) { return [2 /*return*/, new Promise(function (resolve, reject) { _this.readable.on("data", function (data) { data = typeof data === "string" ? Buffer.from(data, _this.encoding) : data; _this.appendUnresolvedData(data); if (!_this.resolveData()) { _this.readable.pause(); } }); _this.readable.on("error", function (err) { _this.emitter.emit("error", err); }); _this.readable.on("end", function () { _this.isStreamEnd = true; _this.emitter.emit("checkEnd"); }); _this.emitter.on("error", function (err) { _this.isError = true; _this.readable.pause(); reject(err); }); _this.emitter.on("checkEnd", function () { if (_this.outgoing.length > 0) { _this.triggerOutgoingHandlers(); return; } if (_this.isStreamEnd && _this.executingOutgoingHandlers === 0) { if (_this.unresolvedLength > 0 && _this.unresolvedLength < _this.bufferSize) { var buffer_1 = _this.shiftBufferFromUnresolvedDataArray(); _this.outgoingHandler(function () { return buffer_1.getReadableStream(); }, buffer_1.size, _this.offset) .then(resolve) .catch(reject); } else if (_this.unresolvedLength >= _this.bufferSize) { return; } else { resolve(); } } }); })]; }); }); }; /** * Insert a new data into unresolved array. * * @param data - */ BufferScheduler.prototype.appendUnresolvedData = function (data) { this.unresolvedDataArray.push(data); this.unresolvedLength += data.length; }; /** * Try to shift a buffer with size in blockSize. The buffer returned may be less * than blockSize when data in unresolvedDataArray is less than bufferSize. * */ BufferScheduler.prototype.shiftBufferFromUnresolvedDataArray = function (buffer) { if (!buffer) { buffer = new PooledBuffer(this.bufferSize, this.unresolvedDataArray, this.unresolvedLength); } else { buffer.fill(this.unresolvedDataArray, this.unresolvedLength); } this.unresolvedLength -= buffer.size; return buffer; }; /** * Resolve data in unresolvedDataArray. For every buffer with size in blockSize * shifted, it will try to get (or allocate a buffer) from incoming, and fill it, * then push it into outgoing to be handled by outgoing handler. * * Return false when available buffers in incoming are not enough, else true. * * @returns Return false when buffers in incoming are not enough, else true. */ BufferScheduler.prototype.resolveData = function () { while (this.unresolvedLength >= this.bufferSize) { var buffer = void 0; if (this.incoming.length > 0) { buffer = this.incoming.shift(); this.shiftBufferFromUnresolvedDataArray(buffer); } else { if (this.numBuffers < this.maxBuffers) { buffer = this.shiftBufferFromUnresolvedDataArray(); this.numBuffers++; } else { // No available buffer, wait for buffer returned return false; } } this.outgoing.push(buffer); this.triggerOutgoingHandlers(); } return true; }; /** * Try to trigger a outgoing handler for every buffer in outgoing. Stop when * concurrency reaches. */ BufferScheduler.prototype.triggerOutgoingHandlers = function () { return tslib.__awaiter(this, void 0, void 0, function () { var buffer; return tslib.__generator(this, function (_a) { do { if (this.executingOutgoingHandlers >= this.concurrency) { return [2 /*return*/]; } buffer = this.outgoing.shift(); if (buffer) { this.triggerOutgoingHandler(buffer); } } while (buffer); return [2 /*return*/]; }); }); }; /** * Trigger a outgoing handler for a buffer shifted from outgoing. * * @param buffer - */ BufferScheduler.prototype.triggerOutgoingHandler = function (buffer) { return tslib.__awaiter(this, void 0, void 0, function () { var bufferLength, err_1; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: bufferLength = buffer.size; this.executingOutgoingHandlers++; this.offset += bufferLength; _a.label = 1; case 1: _a.trys.push([1, 3, , 4]); return [4 /*yield*/, this.outgoingHandler(function () { return buffer.getReadableStream(); }, bufferLength, this.offset - bufferLength)]; case 2: _a.sent(); return [3 /*break*/, 4]; case 3: err_1 = _a.sent(); this.emitter.emit("error", err_1); return [2 /*return*/]; case 4: this.executingOutgoingHandlers--; this.reuseBuffer(buffer); this.emitter.emit("checkEnd"); return [2 /*return*/]; } }); }); }; /** * Return buffer used by outgoing handler into incoming. * * @param buffer - */ BufferScheduler.prototype.reuseBuffer = function (buffer) { this.incoming.push(buffer); if (!this.isError && this.resolveData() && !this.isStreamEnd) { this.readable.resume(); } }; return BufferScheduler; }()); // Copyright (c) Microsoft Corporation. /** * Reads a readable stream into buffer. Fill the buffer from offset to end. * * @param stream - A Node.js Readable stream * @param buffer - Buffer to be filled, length must greater than or equal to offset * @param offset - From which position in the buffer to be filled, inclusive * @param end - To which position in the buffer to be filled, exclusive * @param encoding - Encoding of the Readable stream */ function streamToBuffer(stream, buffer, offset, end, encoding) { return tslib.__awaiter(this, void 0, void 0, function () { var pos, count; return tslib.__generator(this, function (_a) { pos = 0; count = end - offset; return [2 /*return*/, new Promise(function (resolve, reject) { stream.on("readable", function () { if (pos >= count) { resolve(); return; } var chunk = stream.read(); if (!chunk) { return; } if (typeof chunk === "string") { chunk = Buffer.from(chunk, encoding); } // How much data needed in this chunk var chunkLength = pos + chunk.length > count ? count - pos : chunk.length; buffer.fill(chunk.slice(0, chunkLength), offset + pos, offset + pos + chunkLength); pos += chunkLength; }); stream.on("end", function () { if (pos < count) { reject(new Error("Stream drains before getting enough data needed. Data read: " + pos + ", data need: " + count)); } resolve(); }); stream.on("error", reject); })]; }); }); } /** * Reads a readable stream into buffer entirely. * * @param stream - A Node.js Readable stream * @param buffer - Buffer to be filled, length must greater than or equal to offset * @param encoding - Encoding of the Readable stream * @returns with the count of bytes read. * @throws `RangeError` If buffer size is not big enough. */ function streamToBuffer2(stream, buffer, encoding) { return tslib.__awaiter(this, void 0, void 0, function () { var pos, bufferSize; return tslib.__generator(this, function (_a) { pos = 0; bufferSize = buffer.length; return [2 /*return*/, new Promise(function (resolve, reject) { stream.on("readable", function () { var chunk = stream.read(); if (!chunk) { return; } if (typeof chunk === "string") { chunk = Buffer.from(chunk, encoding); } if (pos + chunk.length > bufferSize) { reject(new Error("Stream exceeds buffer size. Buffer size: " + bufferSize)); return; } buffer.fill(chunk, pos, pos + chunk.length); pos += chunk.length; }); stream.on("end", function () { resolve(pos); }); stream.on("error", reject); })]; }); }); } /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * * Writes the content of a readstream to a local file. Returns a Promise which is completed after the file handle is closed. * * @param rs - The read stream. * @param file - Destination file path. */ function readStreamToLocalFile(rs, file) { return tslib.__awaiter(this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { return [2 /*return*/, new Promise(function (resolve, reject) { var ws = fs.createWriteStream(file); rs.on("error", function (err) { reject(err); }); ws.on("error", function (err) { reject(err); }); ws.on("close", resolve); rs.pipe(ws); })]; }); }); } /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * * Promisified version of fs.stat(). */ var fsStat = util.promisify(fs.stat); var fsCreateReadStream = fs.createReadStream; /** * A BlobClient represents a URL to an Azure Storage blob; the blob may be a block blob, * append blob, or page blob. */ var BlobClient = /** @class */ (function (_super) { tslib.__extends(BlobClient, _super); function BlobClient(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions, options) { var _a; var _this = this; options = options || {}; var pipeline; var url; if (credentialOrPipelineOrContainerName instanceof Pipeline) { // (url: string, pipeline: Pipeline) url = urlOrConnectionString; pipeline = credentialOrPipelineOrContainerName; } else if ((coreHttp.isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) || credentialOrPipelineOrContainerName instanceof AnonymousCredential || coreHttp.isTokenCredential(credentialOrPipelineOrContainerName)) { // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions) url = urlOrConnectionString; options = blobNameOrOptions; pipeline = newPipeline(credentialOrPipelineOrContainerName, options); } else if (!credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName !== "string") { // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions) // The second parameter is undefined. Use anonymous credential. url = urlOrConnectionString; pipeline = newPipeline(new AnonymousCredential(), options); } else if (credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName === "string" && blobNameOrOptions && typeof blobNameOrOptions === "string") { // (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions) var containerName = credentialOrPipelineOrContainerName; var blobName = blobNameOrOptions; var extractedCreds = extractConnectionStringParts(urlOrConnectionString); if (extractedCreds.kind === "AccountConnString") { { var sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey); url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)); options.proxyOptions = coreHttp.getDefaultProxySettings(extractedCreds.proxyUri); pipeline = newPipeline(sharedKeyCredential, options); } } else if (extractedCreds.kind === "SASConnString") { url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)) + "?" + extractedCreds.accountSas; pipeline = newPipeline(new AnonymousCredential(), options); } else { throw new Error("Connection string must be either an Account connection string or a SAS connection string"); } } else { throw new Error("Expecting non-empty strings for containerName and blobName parameters"); } _this = _super.call(this, url, pipeline) || this; (_a = _this.getBlobAndContainerNamesFromUrl(), _this._name = _a.blobName, _this._containerName = _a.containerName); _this.blobContext = new Blob$1(_this.storageClientContext); _this._snapshot = getURLParameter(_this.url, URLConstants.Parameters.SNAPSHOT); _this._versionId = getURLParameter(_this.url, URLConstants.Parameters.VERSIONID); return _this; } Object.defineProperty(BlobClient.prototype, "name", { /** * The name of the blob. */ get: function () { return this._name; }, enumerable: false, configurable: true }); Object.defineProperty(BlobClient.prototype, "containerName", { /** * The name of the storage container the blob is associated with. */ get: function () { return this._containerName; }, enumerable: false, configurable: true }); /** * Creates a new BlobClient object identical to the source but with the specified snapshot timestamp. * Provide "" will remove the snapshot and return a Client to the base blob. * * @param snapshot - The snapshot timestamp. * @returns A new BlobClient object identical to the source but with the specified snapshot timestamp */ BlobClient.prototype.withSnapshot = function (snapshot) { return new BlobClient(setURLParameter(this.url, URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline); }; /** * Creates a new BlobClient object pointing to a version of this blob. * Provide "" will remove the versionId and return a Client to the base blob. * * @param versionId - The versionId. * @returns A new BlobClient object pointing to the version of this blob. */ BlobClient.prototype.withVersion = function (versionId) { return new BlobClient(setURLParameter(this.url, URLConstants.Parameters.VERSIONID, versionId.length === 0 ? undefined : versionId), this.pipeline); }; /** * Creates a AppendBlobClient object. * */ BlobClient.prototype.getAppendBlobClient = function () { return new AppendBlobClient(this.url, this.pipeline); }; /** * Creates a BlockBlobClient object. * */ BlobClient.prototype.getBlockBlobClient = function () { return new BlockBlobClient(this.url, this.pipeline); }; /** * Creates a PageBlobClient object. * */ BlobClient.prototype.getPageBlobClient = function () { return new PageBlobClient(this.url, this.pipeline); }; /** * Reads or downloads a blob from the system, including its metadata and properties. * You can also call Get Blob to read a snapshot. * * * In Node.js, data returns in a Readable stream readableStreamBody * * In browsers, data returns in a promise blobBody * * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob * * @param offset - From which position of the blob to download, greater than or equal to 0 * @param count - How much data to be downloaded, greater than 0. Will download to the end when undefined * @param options - Optional options to Blob Download operation. * * * Example usage (Node.js): * * ```js * // Download and convert a blob to a string * const downloadBlockBlobResponse = await blobClient.download(); * const downloaded = await streamToBuffer(downloadBlockBlobResponse.readableStreamBody); * console.log("Downloaded blob content:", downloaded.toString()); * * async function streamToBuffer(readableStream) { * return new Promise((resolve, reject) => { * const chunks = []; * readableStream.on("data", (data) => { * chunks.push(data instanceof Buffer ? data : Buffer.from(data)); * }); * readableStream.on("end", () => { * resolve(Buffer.concat(chunks)); * }); * readableStream.on("error", reject); * }); * } * ``` * * Example usage (browser): * * ```js * // Download and convert a blob to a string * const downloadBlockBlobResponse = await blobClient.download(); * const downloaded = await blobToString(await downloadBlockBlobResponse.blobBody); * console.log( * "Downloaded blob content", * downloaded * ); * * async function blobToString(blob: Blob): Promise { * const fileReader = new FileReader(); * return new Promise((resolve, reject) => { * fileReader.onloadend = (ev: any) => { * resolve(ev.target!.result); * }; * fileReader.onerror = reject; * fileReader.readAsText(blob); * }); * } * ``` */ BlobClient.prototype.download = function (offset, count, options) { var _a; if (offset === void 0) { offset = 0; } if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, res_1, wrappedRes, e_1; var _this = this; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: options.conditions = options.conditions || {}; options.conditions = options.conditions || {}; ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps); _b = createSpan("BlobClient-download", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.blobContext.download(tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), requestOptions: { onDownloadProgress: coreHttp.isNode ? undefined : options.onProgress // for Node.js, progress is reported by RetriableReadableStream }, range: offset === 0 && !count ? undefined : rangeToString({ offset: offset, count: count }), rangeGetContentMD5: options.rangeGetContentMD5, rangeGetContentCRC64: options.rangeGetContentCrc64, snapshot: options.snapshot, cpkInfo: options.customerProvidedKey }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: res_1 = _c.sent(); wrappedRes = tslib.__assign(tslib.__assign({}, res_1), { _response: res_1._response, objectReplicationDestinationPolicyId: res_1.objectReplicationPolicyId, objectReplicationSourceProperties: parseObjectReplicationRecord(res_1.objectReplicationRules) }); // We support retrying when download stream unexpected ends in Node.js runtime // Following code shouldn't be bundled into browser build, however some // bundlers may try to bundle following code and "FileReadResponse.ts". // In this case, "FileDownloadResponse.browser.ts" will be used as a shim of "FileDownloadResponse.ts" // The config is in package.json "browser" field if (options.maxRetryRequests === undefined || options.maxRetryRequests < 0) { // TODO: Default value or make it a required parameter? options.maxRetryRequests = DEFAULT_MAX_DOWNLOAD_RETRY_REQUESTS; } if (res_1.contentLength === undefined) { throw new RangeError("File download response doesn't contain valid content length header"); } if (!res_1.etag) { throw new RangeError("File download response doesn't contain valid etag header"); } return [2 /*return*/, new BlobDownloadResponse(wrappedRes, function (start) { return tslib.__awaiter(_this, void 0, void 0, function () { var updatedOptions; var _a; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: updatedOptions = { leaseAccessConditions: options.conditions, modifiedAccessConditions: { ifMatch: options.conditions.ifMatch || res_1.etag, ifModifiedSince: options.conditions.ifModifiedSince, ifNoneMatch: options.conditions.ifNoneMatch, ifUnmodifiedSince: options.conditions.ifUnmodifiedSince, ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }, range: rangeToString({ count: offset + res_1.contentLength - start, offset: start }), rangeGetContentMD5: options.rangeGetContentMD5, rangeGetContentCRC64: options.rangeGetContentCrc64, snapshot: options.snapshot, cpkInfo: options.customerProvidedKey }; return [4 /*yield*/, this.blobContext.download(tslib.__assign({ abortSignal: options.abortSignal }, updatedOptions))]; case 1: // Debug purpose only // console.log( // `Read from internal stream, range: ${ // updatedOptions.range // }, options: ${JSON.stringify(updatedOptions)}` // ); return [2 /*return*/, (_b.sent()).readableStreamBody]; } }); }); }, offset, res_1.contentLength, { maxRetryRequests: options.maxRetryRequests, onProgress: options.onProgress })]; case 3: e_1 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_1.message }); throw e_1; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Returns true if the Azure blob resource represented by this client exists; false otherwise. * * NOTE: use this function with care since an existing blob might be deleted by other clients or * applications. Vice versa new blobs might be added by other clients or applications after this * function completes. * * @param options - options to Exists operation. */ BlobClient.prototype.exists = function (options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, e_2; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("BlobClient-exists", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps); return [4 /*yield*/, this.getProperties({ abortSignal: options.abortSignal, customerProvidedKey: options.customerProvidedKey, conditions: options.conditions, tracingOptions: updatedOptions.tracingOptions })]; case 2: _b.sent(); return [2 /*return*/, true]; case 3: e_2 = _b.sent(); if (e_2.statusCode === 404) { span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: "Expected exception when checking blob existence" }); return [2 /*return*/, false]; } span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_2.message }); throw e_2; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Returns all user-defined metadata, standard HTTP properties, and system properties * for the blob. It does not return the content of the blob. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-properties * * WARNING: The `metadata` object returned in the response will have its keys in lowercase, even if * they originally contained uppercase characters. This differs from the metadata keys returned by * the methods of {@link ContainerClient} that list blobs using the `includeMetadata` option, which * will retain their original casing. * * @param options - Optional options to Get Properties operation. */ BlobClient.prototype.getProperties = function (options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, res, e_3; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: _b = createSpan("BlobClient-getProperties", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); options.conditions = options.conditions || {}; ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps); return [4 /*yield*/, this.blobContext.getProperties(tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), cpkInfo: options.customerProvidedKey }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: res = _c.sent(); return [2 /*return*/, tslib.__assign(tslib.__assign({}, res), { _response: res._response, objectReplicationDestinationPolicyId: res.objectReplicationPolicyId, objectReplicationSourceProperties: parseObjectReplicationRecord(res.objectReplicationRules) })]; case 3: e_3 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_3.message }); throw e_3; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Marks the specified blob or snapshot for deletion. The blob is later deleted * during garbage collection. Note that in order to delete a blob, you must delete * all of its snapshots. You can delete both at the same time with the Delete * Blob operation. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/delete-blob * * @param options - Optional options to Blob Delete operation. */ BlobClient.prototype.delete = function (options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_4; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: _b = createSpan("BlobClient-delete", options), span = _b.span, updatedOptions = _b.updatedOptions; options.conditions = options.conditions || {}; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.blobContext.delete(tslib.__assign({ abortSignal: options.abortSignal, deleteSnapshots: options.deleteSnapshots, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_4 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_4.message }); throw e_4; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Marks the specified blob or snapshot for deletion if it exists. The blob is later deleted * during garbage collection. Note that in order to delete a blob, you must delete * all of its snapshots. You can delete both at the same time with the Delete * Blob operation. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/delete-blob * * @param options - Optional options to Blob Delete operation. */ BlobClient.prototype.deleteIfExists = function (options) { var _a, _b; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _c, span, updatedOptions, res, e_5; return tslib.__generator(this, function (_d) { switch (_d.label) { case 0: _c = createSpan("BlobClient-deleteIfExists", options), span = _c.span, updatedOptions = _c.updatedOptions; _d.label = 1; case 1: _d.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.delete(updatedOptions)]; case 2: res = _d.sent(); return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: true }, res), { _response: res._response // _response is made non-enumerable })]; case 3: e_5 = _d.sent(); if (((_a = e_5.details) === null || _a === void 0 ? void 0 : _a.errorCode) === "BlobNotFound") { span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: "Expected exception when deleting a blob or snapshot only if it exists." }); return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: false }, (_b = e_5.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), { _response: e_5.response })]; } span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_5.message }); throw e_5; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Restores the contents and metadata of soft deleted blob and any associated * soft deleted snapshots. Undelete Blob is supported only on version 2017-07-29 * or later. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/undelete-blob * * @param options - Optional options to Blob Undelete operation. */ BlobClient.prototype.undelete = function (options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, e_6; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("BlobClient-undelete", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.blobContext.undelete(tslib.__assign({ abortSignal: options.abortSignal }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _b.sent()]; case 3: e_6 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_6.message }); throw e_6; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Sets system properties on the blob. * * If no value provided, or no value provided for the specified blob HTTP headers, * these blob HTTP headers without a value will be cleared. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-properties * * @param blobHTTPHeaders - If no value provided, or no value provided for * the specified blob HTTP headers, these blob HTTP * headers without a value will be cleared. * @param options - Optional options to Blob Set HTTP Headers operation. */ BlobClient.prototype.setHTTPHeaders = function (blobHTTPHeaders, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_7; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: _b = createSpan("BlobClient-setHTTPHeaders", options), span = _b.span, updatedOptions = _b.updatedOptions; options.conditions = options.conditions || {}; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps); return [4 /*yield*/, this.blobContext.setHttpHeaders(tslib.__assign({ abortSignal: options.abortSignal, blobHttpHeaders: blobHTTPHeaders, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_7 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_7.message }); throw e_7; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Sets user-defined metadata for the specified blob as one or more name-value pairs. * * If no option provided, or no metadata defined in the parameter, the blob * metadata will be removed. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-metadata * * @param metadata - Replace existing metadata with this value. * If no value provided the existing metadata will be removed. * @param options - Optional options to Set Metadata operation. */ BlobClient.prototype.setMetadata = function (metadata, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_8; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: _b = createSpan("BlobClient-setMetadata", options), span = _b.span, updatedOptions = _b.updatedOptions; options.conditions = options.conditions || {}; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps); return [4 /*yield*/, this.blobContext.setMetadata(tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, metadata: metadata, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_8 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_8.message }); throw e_8; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Sets tags on the underlying blob. * A blob can have up to 10 tags. Tag keys must be between 1 and 128 characters. Tag values must be between 0 and 256 characters. * Valid tag key and value characters include lower and upper case letters, digits (0-9), * space (' '), plus ('+'), minus ('-'), period ('.'), foward slash ('/'), colon (':'), equals ('='), and underscore ('_'). * * @param tags - * @param options - */ BlobClient.prototype.setTags = function (tags, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_9; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: _b = createSpan("BlobClient-setTags", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.blobContext.setTags(tslib.__assign(tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)), { tags: toBlobTags(tags) }))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_9 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_9.message }); throw e_9; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Gets the tags associated with the underlying blob. * * @param options - */ BlobClient.prototype.getTags = function (options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, response, wrappedResponse, e_10; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: _b = createSpan("BlobClient-getTags", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.blobContext.getTags(tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: response = _c.sent(); wrappedResponse = tslib.__assign(tslib.__assign({}, response), { _response: response._response, tags: toTags({ blobTagSet: response.blobTagSet }) || {} }); return [2 /*return*/, wrappedResponse]; case 3: e_10 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_10.message }); throw e_10; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Get a {@link BlobLeaseClient} that manages leases on the blob. * * @param proposeLeaseId - Initial proposed lease Id. * @returns A new BlobLeaseClient object for managing leases on the blob. */ BlobClient.prototype.getBlobLeaseClient = function (proposeLeaseId) { return new BlobLeaseClient(this, proposeLeaseId); }; /** * Creates a read-only snapshot of a blob. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/snapshot-blob * * @param options - Optional options to the Blob Create Snapshot operation. */ BlobClient.prototype.createSnapshot = function (options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_11; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: _b = createSpan("BlobClient-createSnapshot", options), span = _b.span, updatedOptions = _b.updatedOptions; options.conditions = options.conditions || {}; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps); return [4 /*yield*/, this.blobContext.createSnapshot(tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, metadata: options.metadata, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_11 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_11.message }); throw e_11; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Asynchronously copies a blob to a destination within the storage account. * This method returns a long running operation poller that allows you to wait * indefinitely until the copy is completed. * You can also cancel a copy before it is completed by calling `cancelOperation` on the poller. * Note that the onProgress callback will not be invoked if the operation completes in the first * request, and attempting to cancel a completed copy will result in an error being thrown. * * In version 2012-02-12 and later, the source for a Copy Blob operation can be * a committed blob in any Azure storage account. * Beginning with version 2015-02-21, the source for a Copy Blob operation can be * an Azure file in any Azure storage account. * Only storage accounts created on or after June 7th, 2012 allow the Copy Blob * operation to copy from another storage account. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/copy-blob * * Example using automatic polling: * * ```js * const copyPoller = await blobClient.beginCopyFromURL('url'); * const result = await copyPoller.pollUntilDone(); * ``` * * Example using manual polling: * * ```js * const copyPoller = await blobClient.beginCopyFromURL('url'); * while (!poller.isDone()) { * await poller.poll(); * } * const result = copyPoller.getResult(); * ``` * * Example using progress updates: * * ```js * const copyPoller = await blobClient.beginCopyFromURL('url', { * onProgress(state) { * console.log(`Progress: ${state.copyProgress}`); * } * }); * const result = await copyPoller.pollUntilDone(); * ``` * * Example using a changing polling interval (default 15 seconds): * * ```js * const copyPoller = await blobClient.beginCopyFromURL('url', { * intervalInMs: 1000 // poll blob every 1 second for copy progress * }); * const result = await copyPoller.pollUntilDone(); * ``` * * Example using copy cancellation: * * ```js * const copyPoller = await blobClient.beginCopyFromURL('url'); * // cancel operation after starting it. * try { * await copyPoller.cancelOperation(); * // calls to get the result now throw PollerCancelledError * await copyPoller.getResult(); * } catch (err) { * if (err.name === 'PollerCancelledError') { * console.log('The copy was cancelled.'); * } * } * ``` * * @param copySource - url to the source Azure Blob/File. * @param options - Optional options to the Blob Start Copy From URL operation. */ BlobClient.prototype.beginCopyFromURL = function (copySource, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var client, poller; var _this = this; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: client = { abortCopyFromURL: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return _this.abortCopyFromURL.apply(_this, args); }, getProperties: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return _this.getProperties.apply(_this, args); }, startCopyFromURL: function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return _this.startCopyFromURL.apply(_this, args); } }; poller = new BlobBeginCopyFromUrlPoller({ blobClient: client, copySource: copySource, intervalInMs: options.intervalInMs, onProgress: options.onProgress, resumeFrom: options.resumeFrom, startCopyFromURLOptions: options }); // Trigger the startCopyFromURL call by calling poll. // Any errors from this method should be surfaced to the user. return [4 /*yield*/, poller.poll()]; case 1: // Trigger the startCopyFromURL call by calling poll. // Any errors from this method should be surfaced to the user. _a.sent(); return [2 /*return*/, poller]; } }); }); }; /** * Aborts a pending asynchronous Copy Blob operation, and leaves a destination blob with zero * length and full metadata. Version 2012-02-12 and newer. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/abort-copy-blob * * @param copyId - Id of the Copy From URL operation. * @param options - Optional options to the Blob Abort Copy From URL operation. */ BlobClient.prototype.abortCopyFromURL = function (copyId, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, e_12; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("BlobClient-abortCopyFromURL", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.blobContext.abortCopyFromURL(copyId, tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _b.sent()]; case 3: e_12 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_12.message }); throw e_12; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * The synchronous Copy From URL operation copies a blob or an internet resource to a new blob. It will not * return a response until the copy is complete. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/copy-blob-from-url * * @param copySource - The source URL to copy from, Shared Access Signature(SAS) maybe needed for authentication * @param options - */ BlobClient.prototype.syncCopyFromURL = function (copySource, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_13; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: _b = createSpan("BlobClient-syncCopyFromURL", options), span = _b.span, updatedOptions = _b.updatedOptions; options.conditions = options.conditions || {}; options.sourceConditions = options.sourceConditions || {}; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.blobContext.copyFromURL(copySource, tslib.__assign({ abortSignal: options.abortSignal, metadata: options.metadata, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), sourceModifiedAccessConditions: { sourceIfMatch: options.sourceConditions.ifMatch, sourceIfModifiedSince: options.sourceConditions.ifModifiedSince, sourceIfNoneMatch: options.sourceConditions.ifNoneMatch, sourceIfUnmodifiedSince: options.sourceConditions.ifUnmodifiedSince }, sourceContentMD5: options.sourceContentMD5, blobTagsString: toBlobTagsString(options.tags) }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_13 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_13.message }); throw e_13; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Sets the tier on a blob. The operation is allowed on a page blob in a premium * storage account and on a block blob in a blob storage account (locally redundant * storage only). A premium page blob's tier determines the allowed size, IOPS, * and bandwidth of the blob. A block blob's tier determines Hot/Cool/Archive * storage type. This operation does not update the blob's ETag. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-tier * * @param tier - The tier to be set on the blob. Valid values are Hot, Cool, or Archive. * @param options - Optional options to the Blob Set Tier operation. */ BlobClient.prototype.setAccessTier = function (tier, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_14; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: _b = createSpan("BlobClient-setAccessTier", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.blobContext.setTier(toAccessTier(tier), tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), rehydratePriority: options.rehydratePriority }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_14 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_14.message }); throw e_14; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; BlobClient.prototype.downloadToBuffer = function (param1, param2, param3, param4) { if (param4 === void 0) { param4 = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var buffer, offset, count, options, _a, span, updatedOptions, response, transferProgress_1, batch, _loop_1, off, e_15; var _this = this; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: offset = 0; count = 0; options = param4; if (param1 instanceof Buffer) { buffer = param1; offset = param2 || 0; count = typeof param3 === "number" ? param3 : 0; } else { offset = typeof param1 === "number" ? param1 : 0; count = typeof param2 === "number" ? param2 : 0; options = param3 || {}; } _a = createSpan("BlobClient-downloadToBuffer", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 5, 6, 7]); if (!options.blockSize) { options.blockSize = 0; } if (options.blockSize < 0) { throw new RangeError("blockSize option must be >= 0"); } if (options.blockSize === 0) { options.blockSize = DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES; } if (offset < 0) { throw new RangeError("offset option must be >= 0"); } if (count && count <= 0) { throw new RangeError("count option must be greater than 0"); } if (!options.conditions) { options.conditions = {}; } if (!!count) return [3 /*break*/, 3]; return [4 /*yield*/, this.getProperties(tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), convertTracingToRequestOptionsBase(updatedOptions)) }))]; case 2: response = _b.sent(); count = response.contentLength - offset; if (count < 0) { throw new RangeError("offset " + offset + " shouldn't be larger than blob size " + response.contentLength); } _b.label = 3; case 3: // Allocate the buffer of size = count if the buffer is not provided if (!buffer) { try { buffer = Buffer.alloc(count); } catch (error) { throw new Error("Unable to allocate the buffer of size: " + count + "(in bytes). Please try passing your own buffer to the \"downloadToBuffer\" method or try using other methods like \"download\" or \"downloadToFile\".\t " + error.message); } } if (buffer.length < count) { throw new RangeError("The buffer's size should be equal to or larger than the request count of bytes: " + count); } transferProgress_1 = 0; batch = new Batch(options.concurrency); _loop_1 = function (off) { batch.addOperation(function () { return tslib.__awaiter(_this, void 0, void 0, function () { var chunkEnd, response, stream; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: chunkEnd = offset + count; if (off + options.blockSize < chunkEnd) { chunkEnd = off + options.blockSize; } return [4 /*yield*/, this.download(off, chunkEnd - off, { abortSignal: options.abortSignal, conditions: options.conditions, maxRetryRequests: options.maxRetryRequestsPerBlock, customerProvidedKey: options.customerProvidedKey, tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), convertTracingToRequestOptionsBase(updatedOptions)) })]; case 1: response = _a.sent(); stream = response.readableStreamBody; return [4 /*yield*/, streamToBuffer(stream, buffer, off - offset, chunkEnd - offset)]; case 2: _a.sent(); // Update progress after block is downloaded, in case of block trying // Could provide finer grained progress updating inside HTTP requests, // only if convenience layer download try is enabled transferProgress_1 += chunkEnd - off; if (options.onProgress) { options.onProgress({ loadedBytes: transferProgress_1 }); } return [2 /*return*/]; } }); }); }); }; for (off = offset; off < offset + count; off = off + options.blockSize) { _loop_1(off); } return [4 /*yield*/, batch.do()]; case 4: _b.sent(); return [2 /*return*/, buffer]; case 5: e_15 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_15.message }); throw e_15; case 6: span.end(); return [7 /*endfinally*/]; case 7: return [2 /*return*/]; } }); }); }; /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * * Downloads an Azure Blob to a local file. * Fails if the the given file path already exits. * Offset and count are optional, pass 0 and undefined respectively to download the entire blob. * * @param filePath - * @param offset - From which position of the block blob to download. * @param count - How much data to be downloaded. Will download to the end when passing undefined. * @param options - Options to Blob download options. * @returns The response data for blob download operation, * but with readableStreamBody set to undefined since its * content is already read and written into a local file * at the specified path. */ BlobClient.prototype.downloadToFile = function (filePath, offset, count, options) { if (offset === void 0) { offset = 0; } if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, response, e_16; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("BlobClient-downloadToFile", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 5, 6, 7]); return [4 /*yield*/, this.download(offset, count, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), convertTracingToRequestOptionsBase(updatedOptions)) }))]; case 2: response = _b.sent(); if (!response.readableStreamBody) return [3 /*break*/, 4]; return [4 /*yield*/, readStreamToLocalFile(response.readableStreamBody, filePath)]; case 3: _b.sent(); _b.label = 4; case 4: // The stream is no longer accessible so setting it to undefined. response.blobDownloadStream = undefined; return [2 /*return*/, response]; case 5: e_16 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_16.message }); throw e_16; case 6: span.end(); return [7 /*endfinally*/]; case 7: return [2 /*return*/]; } }); }); }; BlobClient.prototype.getBlobAndContainerNamesFromUrl = function () { var containerName; var blobName; try { // URL may look like the following // "https://myaccount.blob.core.windows.net/mycontainer/blob?sasString"; // "https://myaccount.blob.core.windows.net/mycontainer/blob"; // "https://myaccount.blob.core.windows.net/mycontainer/blob/a.txt?sasString"; // "https://myaccount.blob.core.windows.net/mycontainer/blob/a.txt"; // IPv4/IPv6 address hosts, Endpoints - `http://127.0.0.1:10000/devstoreaccount1/containername/blob` // http://localhost:10001/devstoreaccount1/containername/blob var parsedUrl = coreHttp.URLBuilder.parse(this.url); if (parsedUrl.getHost().split(".")[1] === "blob") { // "https://myaccount.blob.core.windows.net/containername/blob". // .getPath() -> /containername/blob var pathComponents = parsedUrl.getPath().match("/([^/]*)(/(.*))?"); containerName = pathComponents[1]; blobName = pathComponents[3]; } else if (isIpEndpointStyle(parsedUrl)) { // IPv4/IPv6 address hosts... Example - http://192.0.0.10:10001/devstoreaccount1/containername/blob // Single word domain without a [dot] in the endpoint... Example - http://localhost:10001/devstoreaccount1/containername/blob // .getPath() -> /devstoreaccount1/containername/blob var pathComponents = parsedUrl.getPath().match("/([^/]*)/([^/]*)(/(.*))?"); containerName = pathComponents[2]; blobName = pathComponents[4]; } else { // "https://customdomain.com/containername/blob". // .getPath() -> /containername/blob var pathComponents = parsedUrl.getPath().match("/([^/]*)(/(.*))?"); containerName = pathComponents[1]; blobName = pathComponents[3]; } // decode the encoded blobName, containerName - to get all the special characters that might be present in them containerName = decodeURIComponent(containerName); blobName = decodeURIComponent(blobName); // Azure Storage Server will replace "\" with "/" in the blob names // doing the same in the SDK side so that the user doesn't have to replace "\" instances in the blobName blobName = blobName.replace(/\\/g, "/"); if (!containerName) { throw new Error("Provided containerName is invalid."); } return { blobName: blobName, containerName: containerName }; } catch (error) { throw new Error("Unable to extract blobName and containerName with provided information."); } }; /** * Asynchronously copies a blob to a destination within the storage account. * In version 2012-02-12 and later, the source for a Copy Blob operation can be * a committed blob in any Azure storage account. * Beginning with version 2015-02-21, the source for a Copy Blob operation can be * an Azure file in any Azure storage account. * Only storage accounts created on or after June 7th, 2012 allow the Copy Blob * operation to copy from another storage account. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/copy-blob * * @param copySource - url to the source Azure Blob/File. * @param options - Optional options to the Blob Start Copy From URL operation. */ BlobClient.prototype.startCopyFromURL = function (copySource, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_17; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: _b = createSpan("BlobClient-startCopyFromURL", options), span = _b.span, updatedOptions = _b.updatedOptions; options.conditions = options.conditions || {}; options.sourceConditions = options.sourceConditions || {}; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.blobContext.startCopyFromURL(copySource, tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, metadata: options.metadata, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), sourceModifiedAccessConditions: { sourceIfMatch: options.sourceConditions.ifMatch, sourceIfModifiedSince: options.sourceConditions.ifModifiedSince, sourceIfNoneMatch: options.sourceConditions.ifNoneMatch, sourceIfUnmodifiedSince: options.sourceConditions.ifUnmodifiedSince, sourceIfTags: options.sourceConditions.tagConditions }, rehydratePriority: options.rehydratePriority, tier: toAccessTier(options.tier), blobTagsString: toBlobTagsString(options.tags), sealBlob: options.sealBlob }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_17 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_17.message }); throw e_17; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Only available for BlobClient constructed with a shared key credential. * * Generates a Blob Service Shared Access Signature (SAS) URI based on the client properties * and parameters passed in. The SAS is signed by the shared key credential of the client. * * @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-a-service-sas * * @param options - Optional parameters. * @returns The SAS URI consisting of the URI to the resource represented by this client, followed by the generated SAS token. */ BlobClient.prototype.generateSasUrl = function (options) { var _this = this; return new Promise(function (resolve) { if (!(_this.credential instanceof StorageSharedKeyCredential)) { throw new RangeError("Can only generate the SAS when the client is initialized with a shared key credential"); } var sas = generateBlobSASQueryParameters(tslib.__assign({ containerName: _this._containerName, blobName: _this._name, snapshotTime: _this._snapshot, versionId: _this._versionId }, options), _this.credential).toString(); resolve(appendToURLQuery(_this.url, sas)); }); }; return BlobClient; }(StorageClient)); /** * AppendBlobClient defines a set of operations applicable to append blobs. */ var AppendBlobClient = /** @class */ (function (_super) { tslib.__extends(AppendBlobClient, _super); function AppendBlobClient(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions, options) { var _this = this; // In TypeScript we cannot simply pass all parameters to super() like below so have to duplicate the code instead. // super(s, credentialOrPipelineOrContainerNameOrOptions, blobNameOrOptions, options); var pipeline; var url; options = options || {}; if (credentialOrPipelineOrContainerName instanceof Pipeline) { // (url: string, pipeline: Pipeline) url = urlOrConnectionString; pipeline = credentialOrPipelineOrContainerName; } else if ((coreHttp.isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) || credentialOrPipelineOrContainerName instanceof AnonymousCredential || coreHttp.isTokenCredential(credentialOrPipelineOrContainerName)) { // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions) url = urlOrConnectionString; url = urlOrConnectionString; options = blobNameOrOptions; pipeline = newPipeline(credentialOrPipelineOrContainerName, options); } else if (!credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName !== "string") { // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions) url = urlOrConnectionString; // The second parameter is undefined. Use anonymous credential. pipeline = newPipeline(new AnonymousCredential(), options); } else if (credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName === "string" && blobNameOrOptions && typeof blobNameOrOptions === "string") { // (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions) var containerName = credentialOrPipelineOrContainerName; var blobName = blobNameOrOptions; var extractedCreds = extractConnectionStringParts(urlOrConnectionString); if (extractedCreds.kind === "AccountConnString") { { var sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey); url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)); options.proxyOptions = coreHttp.getDefaultProxySettings(extractedCreds.proxyUri); pipeline = newPipeline(sharedKeyCredential, options); } } else if (extractedCreds.kind === "SASConnString") { url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)) + "?" + extractedCreds.accountSas; pipeline = newPipeline(new AnonymousCredential(), options); } else { throw new Error("Connection string must be either an Account connection string or a SAS connection string"); } } else { throw new Error("Expecting non-empty strings for containerName and blobName parameters"); } _this = _super.call(this, url, pipeline) || this; _this.appendBlobContext = new AppendBlob(_this.storageClientContext); return _this; } /** * Creates a new AppendBlobClient object identical to the source but with the * specified snapshot timestamp. * Provide "" will remove the snapshot and return a Client to the base blob. * * @param snapshot - The snapshot timestamp. * @returns A new AppendBlobClient object identical to the source but with the specified snapshot timestamp. */ AppendBlobClient.prototype.withSnapshot = function (snapshot) { return new AppendBlobClient(setURLParameter(this.url, URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline); }; /** * Creates a 0-length append blob. Call AppendBlock to append data to an append blob. * @see https://docs.microsoft.com/rest/api/storageservices/put-blob * * @param options - Options to the Append Block Create operation. * * * Example usage: * * ```js * const appendBlobClient = containerClient.getAppendBlobClient(""); * await appendBlobClient.create(); * ``` */ AppendBlobClient.prototype.create = function (options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_18; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: _b = createSpan("AppendBlobClient-create", options), span = _b.span, updatedOptions = _b.updatedOptions; options.conditions = options.conditions || {}; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps); return [4 /*yield*/, this.appendBlobContext.create(0, tslib.__assign({ abortSignal: options.abortSignal, blobHttpHeaders: options.blobHTTPHeaders, leaseAccessConditions: options.conditions, metadata: options.metadata, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope, blobTagsString: toBlobTagsString(options.tags) }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_18 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_18.message }); throw e_18; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Creates a 0-length append blob. Call AppendBlock to append data to an append blob. * If the blob with the same name already exists, the content of the existing blob will remain unchanged. * @see https://docs.microsoft.com/rest/api/storageservices/put-blob * * @param options - */ AppendBlobClient.prototype.createIfNotExists = function (options) { var _a, _b; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _c, span, updatedOptions, conditions, res, e_19; return tslib.__generator(this, function (_d) { switch (_d.label) { case 0: _c = createSpan("AppendBlobClient-createIfNotExists", options), span = _c.span, updatedOptions = _c.updatedOptions; conditions = { ifNoneMatch: ETagAny }; _d.label = 1; case 1: _d.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.create(tslib.__assign(tslib.__assign({}, updatedOptions), { conditions: conditions }))]; case 2: res = _d.sent(); return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: true }, res), { _response: res._response // _response is made non-enumerable })]; case 3: e_19 = _d.sent(); if (((_a = e_19.details) === null || _a === void 0 ? void 0 : _a.errorCode) === "BlobAlreadyExists") { span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: "Expected exception when creating a blob only if it does not already exist." }); return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: false }, (_b = e_19.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), { _response: e_19.response })]; } span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_19.message }); throw e_19; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Seals the append blob, making it read only. * * @param options - */ AppendBlobClient.prototype.seal = function (options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_20; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: _b = createSpan("AppendBlobClient-seal", options), span = _b.span, updatedOptions = _b.updatedOptions; options.conditions = options.conditions || {}; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.appendBlobContext.seal(tslib.__assign({ abortSignal: options.abortSignal, appendPositionAccessConditions: options.conditions, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_20 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_20.message }); throw e_20; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Commits a new block of data to the end of the existing append blob. * @see https://docs.microsoft.com/rest/api/storageservices/append-block * * @param body - Data to be appended. * @param contentLength - Length of the body in bytes. * @param options - Options to the Append Block operation. * * * Example usage: * * ```js * const content = "Hello World!"; * * // Create a new append blob and append data to the blob. * const newAppendBlobClient = containerClient.getAppendBlobClient(""); * await newAppendBlobClient.create(); * await newAppendBlobClient.appendBlock(content, content.length); * * // Append data to an existing append blob. * const existingAppendBlobClient = containerClient.getAppendBlobClient(""); * await existingAppendBlobClient.appendBlock(content, content.length); * ``` */ AppendBlobClient.prototype.appendBlock = function (body, contentLength, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_21; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: _b = createSpan("AppendBlobClient-appendBlock", options), span = _b.span, updatedOptions = _b.updatedOptions; options.conditions = options.conditions || {}; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps); return [4 /*yield*/, this.appendBlobContext.appendBlock(contentLength, body, tslib.__assign({ abortSignal: options.abortSignal, appendPositionAccessConditions: options.conditions, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), requestOptions: { onUploadProgress: options.onProgress }, transactionalContentMD5: options.transactionalContentMD5, transactionalContentCrc64: options.transactionalContentCrc64, cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_21 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_21.message }); throw e_21; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * The Append Block operation commits a new block of data to the end of an existing append blob * where the contents are read from a source url. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/append-block-from-url * * @param sourceURL - * The url to the blob that will be the source of the copy. A source blob in the same storage account can * be authenticated via Shared Key. However, if the source is a blob in another account, the source blob * must either be public or must be authenticated via a shared access signature. If the source blob is * public, no authentication is required to perform the operation. * @param sourceOffset - Offset in source to be appended * @param count - Number of bytes to be appended as a block * @param options - */ AppendBlobClient.prototype.appendBlockFromURL = function (sourceURL, sourceOffset, count, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_22; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: _b = createSpan("AppendBlobClient-appendBlockFromURL", options), span = _b.span, updatedOptions = _b.updatedOptions; options.conditions = options.conditions || {}; options.sourceConditions = options.sourceConditions || {}; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps); return [4 /*yield*/, this.appendBlobContext.appendBlockFromUrl(sourceURL, 0, tslib.__assign({ abortSignal: options.abortSignal, sourceRange: rangeToString({ offset: sourceOffset, count: count }), sourceContentMD5: options.sourceContentMD5, sourceContentCrc64: options.sourceContentCrc64, leaseAccessConditions: options.conditions, appendPositionAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), sourceModifiedAccessConditions: { sourceIfMatch: options.sourceConditions.ifMatch, sourceIfModifiedSince: options.sourceConditions.ifModifiedSince, sourceIfNoneMatch: options.sourceConditions.ifNoneMatch, sourceIfUnmodifiedSince: options.sourceConditions.ifUnmodifiedSince }, cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_22 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_22.message }); throw e_22; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; return AppendBlobClient; }(BlobClient)); /** * BlockBlobClient defines a set of operations applicable to block blobs. */ var BlockBlobClient = /** @class */ (function (_super) { tslib.__extends(BlockBlobClient, _super); function BlockBlobClient(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions, options) { var _this = this; // In TypeScript we cannot simply pass all parameters to super() like below so have to duplicate the code instead. // super(s, credentialOrPipelineOrContainerNameOrOptions, blobNameOrOptions, options); var pipeline; var url; options = options || {}; if (credentialOrPipelineOrContainerName instanceof Pipeline) { // (url: string, pipeline: Pipeline) url = urlOrConnectionString; pipeline = credentialOrPipelineOrContainerName; } else if ((coreHttp.isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) || credentialOrPipelineOrContainerName instanceof AnonymousCredential || coreHttp.isTokenCredential(credentialOrPipelineOrContainerName)) { // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions) url = urlOrConnectionString; options = blobNameOrOptions; pipeline = newPipeline(credentialOrPipelineOrContainerName, options); } else if (!credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName !== "string") { // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions) // The second parameter is undefined. Use anonymous credential. url = urlOrConnectionString; pipeline = newPipeline(new AnonymousCredential(), options); } else if (credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName === "string" && blobNameOrOptions && typeof blobNameOrOptions === "string") { // (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions) var containerName = credentialOrPipelineOrContainerName; var blobName = blobNameOrOptions; var extractedCreds = extractConnectionStringParts(urlOrConnectionString); if (extractedCreds.kind === "AccountConnString") { { var sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey); url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)); options.proxyOptions = coreHttp.getDefaultProxySettings(extractedCreds.proxyUri); pipeline = newPipeline(sharedKeyCredential, options); } } else if (extractedCreds.kind === "SASConnString") { url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)) + "?" + extractedCreds.accountSas; pipeline = newPipeline(new AnonymousCredential(), options); } else { throw new Error("Connection string must be either an Account connection string or a SAS connection string"); } } else { throw new Error("Expecting non-empty strings for containerName and blobName parameters"); } _this = _super.call(this, url, pipeline) || this; _this.blockBlobContext = new BlockBlob(_this.storageClientContext); _this._blobContext = new Blob$1(_this.storageClientContext); return _this; } /** * Creates a new BlockBlobClient object identical to the source but with the * specified snapshot timestamp. * Provide "" will remove the snapshot and return a URL to the base blob. * * @param snapshot - The snapshot timestamp. * @returns A new BlockBlobClient object identical to the source but with the specified snapshot timestamp. */ BlockBlobClient.prototype.withSnapshot = function (snapshot) { return new BlockBlobClient(setURLParameter(this.url, URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline); }; /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * * Quick query for a JSON or CSV formatted blob. * * Example usage (Node.js): * * ```js * // Query and convert a blob to a string * const queryBlockBlobResponse = await blockBlobClient.query("select * from BlobStorage"); * const downloaded = (await streamToBuffer(queryBlockBlobResponse.readableStreamBody)).toString(); * console.log("Query blob content:", downloaded); * * async function streamToBuffer(readableStream) { * return new Promise((resolve, reject) => { * const chunks = []; * readableStream.on("data", (data) => { * chunks.push(data instanceof Buffer ? data : Buffer.from(data)); * }); * readableStream.on("end", () => { * resolve(Buffer.concat(chunks)); * }); * readableStream.on("error", reject); * }); * } * ``` * * @param query - * @param options - */ BlockBlobClient.prototype.query = function (query, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, response, e_23; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps); _b = createSpan("BlockBlobClient-query", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this._blobContext.query(tslib.__assign({ abortSignal: options.abortSignal, queryRequest: { queryType: "SQL", expression: query, inputSerialization: toQuerySerialization(options.inputTextConfiguration), outputSerialization: toQuerySerialization(options.outputTextConfiguration) }, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: response = _c.sent(); return [2 /*return*/, new BlobQueryResponse(response, { abortSignal: options.abortSignal, onProgress: options.onProgress, onError: options.onError })]; case 3: e_23 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_23.message }); throw e_23; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Creates a new block blob, or updates the content of an existing block blob. * Updating an existing block blob overwrites any existing metadata on the blob. * Partial updates are not supported; the content of the existing blob is * overwritten with the new content. To perform a partial update of a block blob's, * use {@link stageBlock} and {@link commitBlockList}. * * This is a non-parallel uploading method, please use {@link uploadFile}, * {@link uploadStream} or {@link uploadBrowserData} for better performance * with concurrency uploading. * * @see https://docs.microsoft.com/rest/api/storageservices/put-blob * * @param body - Blob, string, ArrayBuffer, ArrayBufferView or a function * which returns a new Readable stream whose offset is from data source beginning. * @param contentLength - Length of body in bytes. Use Buffer.byteLength() to calculate body length for a * string including non non-Base64/Hex-encoded characters. * @param options - Options to the Block Blob Upload operation. * @returns Response data for the Block Blob Upload operation. * * Example usage: * * ```js * const content = "Hello world!"; * const uploadBlobResponse = await blockBlobClient.upload(content, content.length); * ``` */ BlockBlobClient.prototype.upload = function (body, contentLength, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_24; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: options.conditions = options.conditions || {}; _b = createSpan("BlockBlobClient-upload", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps); return [4 /*yield*/, this.blockBlobContext.upload(contentLength, body, tslib.__assign({ abortSignal: options.abortSignal, blobHttpHeaders: options.blobHTTPHeaders, leaseAccessConditions: options.conditions, metadata: options.metadata, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), requestOptions: { onUploadProgress: options.onProgress }, cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope, tier: toAccessTier(options.tier), blobTagsString: toBlobTagsString(options.tags) }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_24 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_24.message }); throw e_24; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Creates a new Block Blob where the contents of the blob are read from a given URL. * This API is supported beginning with the 2020-04-08 version. Partial updates * are not supported with Put Blob from URL; the content of an existing blob is overwritten with * the content of the new blob. To perform partial updates to a block blob’s contents using a * source URL, use {@link stageBlockFromURL} and {@link commitBlockList}. * * @param sourceURL - Specifies the URL of the blob. The value * may be a URL of up to 2 KB in length that specifies a blob. * The value should be URL-encoded as it would appear * in a request URI. The source blob must either be public * or must be authenticated via a shared access signature. * If the source blob is public, no authentication is required * to perform the operation. Here are some examples of source object URLs: * - https://myaccount.blob.core.windows.net/mycontainer/myblob * - https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot= * @param options - Optional parameters. */ BlockBlobClient.prototype.syncUploadFromURL = function (sourceURL, options) { var _a, _b, _c, _d, _e; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _f, span, updatedOptions, e_25; return tslib.__generator(this, function (_g) { switch (_g.label) { case 0: options.conditions = options.conditions || {}; _f = createSpan("BlockBlobClient-syncUploadFromURL", options), span = _f.span, updatedOptions = _f.updatedOptions; _g.label = 1; case 1: _g.trys.push([1, 3, 4, 5]); ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps); return [4 /*yield*/, this.blockBlobContext.putBlobFromUrl(0, sourceURL, tslib.__assign(tslib.__assign(tslib.__assign({}, options), { blobHttpHeaders: options.blobHTTPHeaders, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: options.conditions.tagConditions }), sourceModifiedAccessConditions: { sourceIfMatch: (_a = options.sourceConditions) === null || _a === void 0 ? void 0 : _a.ifMatch, sourceIfModifiedSince: (_b = options.sourceConditions) === null || _b === void 0 ? void 0 : _b.ifModifiedSince, sourceIfNoneMatch: (_c = options.sourceConditions) === null || _c === void 0 ? void 0 : _c.ifNoneMatch, sourceIfUnmodifiedSince: (_d = options.sourceConditions) === null || _d === void 0 ? void 0 : _d.ifUnmodifiedSince, sourceIfTags: (_e = options.sourceConditions) === null || _e === void 0 ? void 0 : _e.tagConditions }, cpkInfo: options.customerProvidedKey, tier: toAccessTier(options.tier), blobTagsString: toBlobTagsString(options.tags) }), convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _g.sent()]; case 3: e_25 = _g.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_25.message }); throw e_25; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Uploads the specified block to the block blob's "staging area" to be later * committed by a call to commitBlockList. * @see https://docs.microsoft.com/rest/api/storageservices/put-block * * @param blockId - A 64-byte value that is base64-encoded * @param body - Data to upload to the staging area. * @param contentLength - Number of bytes to upload. * @param options - Options to the Block Blob Stage Block operation. * @returns Response data for the Block Blob Stage Block operation. */ BlockBlobClient.prototype.stageBlock = function (blockId, body, contentLength, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, e_26; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("BlockBlobClient-stageBlock", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps); return [4 /*yield*/, this.blockBlobContext.stageBlock(blockId, contentLength, body, tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, requestOptions: { onUploadProgress: options.onProgress }, transactionalContentMD5: options.transactionalContentMD5, transactionalContentCrc64: options.transactionalContentCrc64, cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _b.sent()]; case 3: e_26 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_26.message }); throw e_26; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * The Stage Block From URL operation creates a new block to be committed as part * of a blob where the contents are read from a URL. * This API is available starting in version 2018-03-28. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/put-block-from-url * * @param blockId - A 64-byte value that is base64-encoded * @param sourceURL - Specifies the URL of the blob. The value * may be a URL of up to 2 KB in length that specifies a blob. * The value should be URL-encoded as it would appear * in a request URI. The source blob must either be public * or must be authenticated via a shared access signature. * If the source blob is public, no authentication is required * to perform the operation. Here are some examples of source object URLs: * - https://myaccount.blob.core.windows.net/mycontainer/myblob * - https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot= * @param offset - From which position of the blob to download, greater than or equal to 0 * @param count - How much data to be downloaded, greater than 0. Will download to the end when undefined * @param options - Options to the Block Blob Stage Block From URL operation. * @returns Response data for the Block Blob Stage Block From URL operation. */ BlockBlobClient.prototype.stageBlockFromURL = function (blockId, sourceURL, offset, count, options) { if (offset === void 0) { offset = 0; } if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, e_27; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("BlockBlobClient-stageBlockFromURL", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps); return [4 /*yield*/, this.blockBlobContext.stageBlockFromURL(blockId, 0, sourceURL, tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, sourceContentMD5: options.sourceContentMD5, sourceContentCrc64: options.sourceContentCrc64, sourceRange: offset === 0 && !count ? undefined : rangeToString({ offset: offset, count: count }), cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _b.sent()]; case 3: e_27 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_27.message }); throw e_27; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Writes a blob by specifying the list of block IDs that make up the blob. * In order to be written as part of a blob, a block must have been successfully written * to the server in a prior {@link stageBlock} operation. You can call {@link commitBlockList} to * update a blob by uploading only those blocks that have changed, then committing the new and existing * blocks together. Any blocks not specified in the block list and permanently deleted. * @see https://docs.microsoft.com/rest/api/storageservices/put-block-list * * @param blocks - Array of 64-byte value that is base64-encoded * @param options - Options to the Block Blob Commit Block List operation. * @returns Response data for the Block Blob Commit Block List operation. */ BlockBlobClient.prototype.commitBlockList = function (blocks, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_28; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: options.conditions = options.conditions || {}; _b = createSpan("BlockBlobClient-commitBlockList", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps); return [4 /*yield*/, this.blockBlobContext.commitBlockList({ latest: blocks }, tslib.__assign({ abortSignal: options.abortSignal, blobHttpHeaders: options.blobHTTPHeaders, leaseAccessConditions: options.conditions, metadata: options.metadata, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope, tier: toAccessTier(options.tier), blobTagsString: toBlobTagsString(options.tags) }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_28 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_28.message }); throw e_28; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Returns the list of blocks that have been uploaded as part of a block blob * using the specified block list filter. * @see https://docs.microsoft.com/rest/api/storageservices/get-block-list * * @param listType - Specifies whether to return the list of committed blocks, * the list of uncommitted blocks, or both lists together. * @param options - Options to the Block Blob Get Block List operation. * @returns Response data for the Block Blob Get Block List operation. */ BlockBlobClient.prototype.getBlockList = function (listType, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, res, e_29; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: _b = createSpan("BlockBlobClient-getBlockList", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.blockBlobContext.getBlockList(listType, tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: res = _c.sent(); if (!res.committedBlocks) { res.committedBlocks = []; } if (!res.uncommittedBlocks) { res.uncommittedBlocks = []; } return [2 /*return*/, res]; case 3: e_29 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_29.message }); throw e_29; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; // High level functions /** * Uploads a Buffer(Node.js)/Blob(browsers)/ArrayBuffer/ArrayBufferView object to a BlockBlob. * * When data length is no more than the specifiled {@link BlockBlobParallelUploadOptions.maxSingleShotSize} (default is * {@link BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES}), this method will use 1 {@link upload} call to finish the upload. * Otherwise, this method will call {@link stageBlock} to upload blocks, and finally call {@link commitBlockList} * to commit the block list. * * @param data - Buffer(Node.js), Blob, ArrayBuffer or ArrayBufferView * @param options - */ BlockBlobClient.prototype.uploadData = function (data, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, buffer_1, browserBlob_1; return tslib.__generator(this, function (_b) { _a = createSpan("BlockBlobClient-uploadData", options), span = _a.span, updatedOptions = _a.updatedOptions; try { if (true) { if (data instanceof Buffer) { buffer_1 = data; } else if (data instanceof ArrayBuffer) { buffer_1 = Buffer.from(data); } else { data = data; buffer_1 = Buffer.from(data.buffer, data.byteOffset, data.byteLength); } return [2 /*return*/, this.uploadSeekableInternal(function (offset, size) { return buffer_1.slice(offset, offset + size); }, buffer_1.byteLength, updatedOptions)]; } else {} } catch (e) { span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e.message }); throw e; } finally { span.end(); } return [2 /*return*/]; }); }); }; /** * ONLY AVAILABLE IN BROWSERS. * * Uploads a browser Blob/File/ArrayBuffer/ArrayBufferView object to block blob. * * When buffer length lesser than or equal to 256MB, this method will use 1 upload call to finish the upload. * Otherwise, this method will call {@link stageBlock} to upload blocks, and finally call * {@link commitBlockList} to commit the block list. * * @deprecated Use {@link uploadData} instead. * * @param browserData - Blob, File, ArrayBuffer or ArrayBufferView * @param options - Options to upload browser data. * @returns Response data for the Blob Upload operation. */ BlockBlobClient.prototype.uploadBrowserData = function (browserData, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, browserBlob_2, e_30; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("BlockBlobClient-uploadBrowserData", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); browserBlob_2 = new Blob([browserData]); return [4 /*yield*/, this.uploadSeekableInternal(function (offset, size) { return browserBlob_2.slice(offset, offset + size); }, browserBlob_2.size, updatedOptions)]; case 2: return [2 /*return*/, _b.sent()]; case 3: e_30 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_30.message }); throw e_30; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * * Uploads data to block blob. Requires a bodyFactory as the data source, * which need to return a {@link HttpRequestBody} object with the offset and size provided. * * When data length is no more than the specifiled {@link BlockBlobParallelUploadOptions.maxSingleShotSize} (default is * {@link BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES}), this method will use 1 {@link upload} call to finish the upload. * Otherwise, this method will call {@link stageBlock} to upload blocks, and finally call {@link commitBlockList} * to commit the block list. * * @param bodyFactory - * @param size - size of the data to upload. * @param options - Options to Upload to Block Blob operation. * @returns Response data for the Blob Upload operation. */ BlockBlobClient.prototype.uploadSeekableInternal = function (bodyFactory, size, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, numBlocks_1, blockList_1, blockIDPrefix_1, transferProgress_2, batch, _loop_2, i, e_31; var _this = this; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: if (!options.blockSize) { options.blockSize = 0; } if (options.blockSize < 0 || options.blockSize > BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES) { throw new RangeError("blockSize option must be >= 0 and <= " + BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES); } if (options.maxSingleShotSize !== 0 && !options.maxSingleShotSize) { options.maxSingleShotSize = BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES; } if (options.maxSingleShotSize < 0 || options.maxSingleShotSize > BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES) { throw new RangeError("maxSingleShotSize option must be >= 0 and <= " + BLOCK_BLOB_MAX_UPLOAD_BLOB_BYTES); } if (options.blockSize === 0) { if (size > BLOCK_BLOB_MAX_STAGE_BLOCK_BYTES * BLOCK_BLOB_MAX_BLOCKS) { throw new RangeError(size + " is too larger to upload to a block blob."); } if (size > options.maxSingleShotSize) { options.blockSize = Math.ceil(size / BLOCK_BLOB_MAX_BLOCKS); if (options.blockSize < DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES) { options.blockSize = DEFAULT_BLOB_DOWNLOAD_BLOCK_BYTES; } } } if (!options.blobHTTPHeaders) { options.blobHTTPHeaders = {}; } if (!options.conditions) { options.conditions = {}; } _a = createSpan("BlockBlobClient-uploadSeekableInternal", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 5, 6, 7]); if (!(size <= options.maxSingleShotSize)) return [3 /*break*/, 3]; return [4 /*yield*/, this.upload(bodyFactory(0, size), size, updatedOptions)]; case 2: return [2 /*return*/, _b.sent()]; case 3: numBlocks_1 = Math.floor((size - 1) / options.blockSize) + 1; if (numBlocks_1 > BLOCK_BLOB_MAX_BLOCKS) { throw new RangeError("The buffer's size is too big or the BlockSize is too small;" + ("the number of blocks must be <= " + BLOCK_BLOB_MAX_BLOCKS)); } blockList_1 = []; blockIDPrefix_1 = coreHttp.generateUuid(); transferProgress_2 = 0; batch = new Batch(options.concurrency); _loop_2 = function (i) { batch.addOperation(function () { return tslib.__awaiter(_this, void 0, void 0, function () { var blockID, start, end, contentLength; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: blockID = generateBlockID(blockIDPrefix_1, i); start = options.blockSize * i; end = i === numBlocks_1 - 1 ? size : start + options.blockSize; contentLength = end - start; blockList_1.push(blockID); return [4 /*yield*/, this.stageBlock(blockID, bodyFactory(start, contentLength), contentLength, { abortSignal: options.abortSignal, conditions: options.conditions, encryptionScope: options.encryptionScope, tracingOptions: updatedOptions.tracingOptions })]; case 1: _a.sent(); // Update progress after block is successfully uploaded to server, in case of block trying // TODO: Hook with convenience layer progress event in finer level transferProgress_2 += contentLength; if (options.onProgress) { options.onProgress({ loadedBytes: transferProgress_2 }); } return [2 /*return*/]; } }); }); }); }; for (i = 0; i < numBlocks_1; i++) { _loop_2(i); } return [4 /*yield*/, batch.do()]; case 4: _b.sent(); return [2 /*return*/, this.commitBlockList(blockList_1, updatedOptions)]; case 5: e_31 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_31.message }); throw e_31; case 6: span.end(); return [7 /*endfinally*/]; case 7: return [2 /*return*/]; } }); }); }; /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * * Uploads a local file in blocks to a block blob. * * When file size lesser than or equal to 256MB, this method will use 1 upload call to finish the upload. * Otherwise, this method will call stageBlock to upload blocks, and finally call commitBlockList * to commit the block list. * * @param filePath - Full path of local file * @param options - Options to Upload to Block Blob operation. * @returns Response data for the Blob Upload operation. */ BlockBlobClient.prototype.uploadFile = function (filePath, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, size, e_32; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("BlockBlobClient-uploadFile", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 4, 5, 6]); return [4 /*yield*/, fsStat(filePath)]; case 2: size = (_b.sent()).size; return [4 /*yield*/, this.uploadSeekableInternal(function (offset, count) { return function () { return fsCreateReadStream(filePath, { autoClose: true, end: count ? offset + count - 1 : Infinity, start: offset }); }; }, size, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), convertTracingToRequestOptionsBase(updatedOptions)) }))]; case 3: return [2 /*return*/, _b.sent()]; case 4: e_32 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_32.message }); throw e_32; case 5: span.end(); return [7 /*endfinally*/]; case 6: return [2 /*return*/]; } }); }); }; /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * * Uploads a Node.js Readable stream into block blob. * * PERFORMANCE IMPROVEMENT TIPS: * * Input stream highWaterMark is better to set a same value with bufferSize * parameter, which will avoid Buffer.concat() operations. * * @param stream - Node.js Readable stream * @param bufferSize - Size of every buffer allocated, also the block size in the uploaded block blob. Default value is 8MB * @param maxConcurrency - Max concurrency indicates the max number of buffers that can be allocated, * positive correlation with max uploading concurrency. Default value is 5 * @param options - Options to Upload Stream to Block Blob operation. * @returns Response data for the Blob Upload operation. */ BlockBlobClient.prototype.uploadStream = function (stream, bufferSize, maxConcurrency, options) { if (bufferSize === void 0) { bufferSize = DEFAULT_BLOCK_BUFFER_SIZE_BYTES; } if (maxConcurrency === void 0) { maxConcurrency = 5; } if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, blockNum_1, blockIDPrefix_2, transferProgress_3, blockList_2, scheduler, e_33; var _this = this; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: if (!options.blobHTTPHeaders) { options.blobHTTPHeaders = {}; } if (!options.conditions) { options.conditions = {}; } _a = createSpan("BlockBlobClient-uploadStream", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 4, 5, 6]); blockNum_1 = 0; blockIDPrefix_2 = coreHttp.generateUuid(); transferProgress_3 = 0; blockList_2 = []; scheduler = new BufferScheduler(stream, bufferSize, maxConcurrency, function (body, length) { return tslib.__awaiter(_this, void 0, void 0, function () { var blockID; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: blockID = generateBlockID(blockIDPrefix_2, blockNum_1); blockList_2.push(blockID); blockNum_1++; return [4 /*yield*/, this.stageBlock(blockID, body, length, { conditions: options.conditions, encryptionScope: options.encryptionScope, tracingOptions: updatedOptions.tracingOptions })]; case 1: _a.sent(); // Update progress after block is successfully uploaded to server, in case of block trying transferProgress_3 += length; if (options.onProgress) { options.onProgress({ loadedBytes: transferProgress_3 }); } return [2 /*return*/]; } }); }); }, // concurrency should set a smaller value than maxConcurrency, which is helpful to // reduce the possibility when a outgoing handler waits for stream data, in // this situation, outgoing handlers are blocked. // Outgoing queue shouldn't be empty. Math.ceil((maxConcurrency / 4) * 3)); return [4 /*yield*/, scheduler.do()]; case 2: _b.sent(); return [4 /*yield*/, this.commitBlockList(blockList_2, tslib.__assign(tslib.__assign({}, options), { tracingOptions: tslib.__assign(tslib.__assign({}, options.tracingOptions), convertTracingToRequestOptionsBase(updatedOptions)) }))]; case 3: return [2 /*return*/, _b.sent()]; case 4: e_33 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_33.message }); throw e_33; case 5: span.end(); return [7 /*endfinally*/]; case 6: return [2 /*return*/]; } }); }); }; return BlockBlobClient; }(BlobClient)); /** * PageBlobClient defines a set of operations applicable to page blobs. */ var PageBlobClient = /** @class */ (function (_super) { tslib.__extends(PageBlobClient, _super); function PageBlobClient(urlOrConnectionString, credentialOrPipelineOrContainerName, blobNameOrOptions, options) { var _this = this; // In TypeScript we cannot simply pass all parameters to super() like below so have to duplicate the code instead. // super(s, credentialOrPipelineOrContainerNameOrOptions, blobNameOrOptions, options); var pipeline; var url; options = options || {}; if (credentialOrPipelineOrContainerName instanceof Pipeline) { // (url: string, pipeline: Pipeline) url = urlOrConnectionString; pipeline = credentialOrPipelineOrContainerName; } else if ((coreHttp.isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) || credentialOrPipelineOrContainerName instanceof AnonymousCredential || coreHttp.isTokenCredential(credentialOrPipelineOrContainerName)) { // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions) url = urlOrConnectionString; options = blobNameOrOptions; pipeline = newPipeline(credentialOrPipelineOrContainerName, options); } else if (!credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName !== "string") { // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions) // The second parameter is undefined. Use anonymous credential. url = urlOrConnectionString; pipeline = newPipeline(new AnonymousCredential(), options); } else if (credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName === "string" && blobNameOrOptions && typeof blobNameOrOptions === "string") { // (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions) var containerName = credentialOrPipelineOrContainerName; var blobName = blobNameOrOptions; var extractedCreds = extractConnectionStringParts(urlOrConnectionString); if (extractedCreds.kind === "AccountConnString") { { var sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey); url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)); options.proxyOptions = coreHttp.getDefaultProxySettings(extractedCreds.proxyUri); pipeline = newPipeline(sharedKeyCredential, options); } } else if (extractedCreds.kind === "SASConnString") { url = appendToURLPath(appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)), encodeURIComponent(blobName)) + "?" + extractedCreds.accountSas; pipeline = newPipeline(new AnonymousCredential(), options); } else { throw new Error("Connection string must be either an Account connection string or a SAS connection string"); } } else { throw new Error("Expecting non-empty strings for containerName and blobName parameters"); } _this = _super.call(this, url, pipeline) || this; _this.pageBlobContext = new PageBlob(_this.storageClientContext); return _this; } /** * Creates a new PageBlobClient object identical to the source but with the * specified snapshot timestamp. * Provide "" will remove the snapshot and return a Client to the base blob. * * @param snapshot - The snapshot timestamp. * @returns A new PageBlobClient object identical to the source but with the specified snapshot timestamp. */ PageBlobClient.prototype.withSnapshot = function (snapshot) { return new PageBlobClient(setURLParameter(this.url, URLConstants.Parameters.SNAPSHOT, snapshot.length === 0 ? undefined : snapshot), this.pipeline); }; /** * Creates a page blob of the specified length. Call uploadPages to upload data * data to a page blob. * @see https://docs.microsoft.com/rest/api/storageservices/put-blob * * @param size - size of the page blob. * @param options - Options to the Page Blob Create operation. * @returns Response data for the Page Blob Create operation. */ PageBlobClient.prototype.create = function (size, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_34; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: options.conditions = options.conditions || {}; _b = createSpan("PageBlobClient-create", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps); return [4 /*yield*/, this.pageBlobContext.create(0, size, tslib.__assign({ abortSignal: options.abortSignal, blobHttpHeaders: options.blobHTTPHeaders, blobSequenceNumber: options.blobSequenceNumber, leaseAccessConditions: options.conditions, metadata: options.metadata, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope, tier: toAccessTier(options.tier), blobTagsString: toBlobTagsString(options.tags) }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_34 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_34.message }); throw e_34; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Creates a page blob of the specified length. Call uploadPages to upload data * data to a page blob. If the blob with the same name already exists, the content * of the existing blob will remain unchanged. * @see https://docs.microsoft.com/rest/api/storageservices/put-blob * * @param size - size of the page blob. * @param options - */ PageBlobClient.prototype.createIfNotExists = function (size, options) { var _a, _b; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _c, span, updatedOptions, conditions, res, e_35; return tslib.__generator(this, function (_d) { switch (_d.label) { case 0: _c = createSpan("PageBlobClient-createIfNotExists", options), span = _c.span, updatedOptions = _c.updatedOptions; _d.label = 1; case 1: _d.trys.push([1, 3, 4, 5]); conditions = { ifNoneMatch: ETagAny }; return [4 /*yield*/, this.create(size, tslib.__assign(tslib.__assign({}, options), { conditions: conditions, tracingOptions: updatedOptions.tracingOptions }))]; case 2: res = _d.sent(); return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: true }, res), { _response: res._response // _response is made non-enumerable })]; case 3: e_35 = _d.sent(); if (((_a = e_35.details) === null || _a === void 0 ? void 0 : _a.errorCode) === "BlobAlreadyExists") { span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: "Expected exception when creating a blob only if it does not already exist." }); return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: false }, (_b = e_35.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), { _response: e_35.response })]; } span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_35.message }); throw e_35; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Writes 1 or more pages to the page blob. The start and end offsets must be a multiple of 512. * @see https://docs.microsoft.com/rest/api/storageservices/put-page * * @param body - Data to upload * @param offset - Offset of destination page blob * @param count - Content length of the body, also number of bytes to be uploaded * @param options - Options to the Page Blob Upload Pages operation. * @returns Response data for the Page Blob Upload Pages operation. */ PageBlobClient.prototype.uploadPages = function (body, offset, count, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_36; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: options.conditions = options.conditions || {}; _b = createSpan("PageBlobClient-uploadPages", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps); return [4 /*yield*/, this.pageBlobContext.uploadPages(count, body, tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), requestOptions: { onUploadProgress: options.onProgress }, range: rangeToString({ offset: offset, count: count }), sequenceNumberAccessConditions: options.conditions, transactionalContentMD5: options.transactionalContentMD5, transactionalContentCrc64: options.transactionalContentCrc64, cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_36 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_36.message }); throw e_36; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * The Upload Pages operation writes a range of pages to a page blob where the * contents are read from a URL. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/put-page-from-url * * @param sourceURL - Specify a URL to the copy source, Shared Access Signature(SAS) maybe needed for authentication * @param sourceOffset - The source offset to copy from. Pass 0 to copy from the beginning of source page blob * @param destOffset - Offset of destination page blob * @param count - Number of bytes to be uploaded from source page blob * @param options - */ PageBlobClient.prototype.uploadPagesFromURL = function (sourceURL, sourceOffset, destOffset, count, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_37; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: options.conditions = options.conditions || {}; options.sourceConditions = options.sourceConditions || {}; _b = createSpan("PageBlobClient-uploadPagesFromURL", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); ensureCpkIfSpecified(options.customerProvidedKey, this.isHttps); return [4 /*yield*/, this.pageBlobContext.uploadPagesFromURL(sourceURL, rangeToString({ offset: sourceOffset, count: count }), 0, rangeToString({ offset: destOffset, count: count }), tslib.__assign({ abortSignal: options.abortSignal, sourceContentMD5: options.sourceContentMD5, sourceContentCrc64: options.sourceContentCrc64, leaseAccessConditions: options.conditions, sequenceNumberAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), sourceModifiedAccessConditions: { sourceIfMatch: options.sourceConditions.ifMatch, sourceIfModifiedSince: options.sourceConditions.ifModifiedSince, sourceIfNoneMatch: options.sourceConditions.ifNoneMatch, sourceIfUnmodifiedSince: options.sourceConditions.ifUnmodifiedSince }, cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_37 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_37.message }); throw e_37; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Frees the specified pages from the page blob. * @see https://docs.microsoft.com/rest/api/storageservices/put-page * * @param offset - Starting byte position of the pages to clear. * @param count - Number of bytes to clear. * @param options - Options to the Page Blob Clear Pages operation. * @returns Response data for the Page Blob Clear Pages operation. */ PageBlobClient.prototype.clearPages = function (offset, count, options) { var _a; if (offset === void 0) { offset = 0; } if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_38; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: options.conditions = options.conditions || {}; _b = createSpan("PageBlobClient-clearPages", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.pageBlobContext.clearPages(0, tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), range: rangeToString({ offset: offset, count: count }), sequenceNumberAccessConditions: options.conditions, cpkInfo: options.customerProvidedKey, encryptionScope: options.encryptionScope }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_38 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_38.message }); throw e_38; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Returns the list of valid page ranges for a page blob or snapshot of a page blob. * @see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges * * @param offset - Starting byte position of the page ranges. * @param count - Number of bytes to get. * @param options - Options to the Page Blob Get Ranges operation. * @returns Response data for the Page Blob Get Ranges operation. */ PageBlobClient.prototype.getPageRanges = function (offset, count, options) { var _a; if (offset === void 0) { offset = 0; } if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_39; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: options.conditions = options.conditions || {}; _b = createSpan("PageBlobClient-getPageRanges", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.pageBlobContext .getPageRanges(tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), range: rangeToString({ offset: offset, count: count }) }, convertTracingToRequestOptionsBase(updatedOptions))) .then(rangeResponseFromModel)]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_39 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_39.message }); throw e_39; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Gets the collection of page ranges that differ between a specified snapshot and this page blob. * @see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges * * @param offset - Starting byte position of the page blob * @param count - Number of bytes to get ranges diff. * @param prevSnapshot - Timestamp of snapshot to retrieve the difference. * @param options - Options to the Page Blob Get Page Ranges Diff operation. * @returns Response data for the Page Blob Get Page Range Diff operation. */ PageBlobClient.prototype.getPageRangesDiff = function (offset, count, prevSnapshot, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_40; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: options.conditions = options.conditions || {}; _b = createSpan("PageBlobClient-getPageRangesDiff", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.pageBlobContext .getPageRangesDiff(tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), prevsnapshot: prevSnapshot, range: rangeToString({ offset: offset, count: count }) }, convertTracingToRequestOptionsBase(updatedOptions))) .then(rangeResponseFromModel)]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_40 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_40.message }); throw e_40; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Gets the collection of page ranges that differ between a specified snapshot and this page blob for managed disks. * @see https://docs.microsoft.com/rest/api/storageservices/get-page-ranges * * @param offset - Starting byte position of the page blob * @param count - Number of bytes to get ranges diff. * @param prevSnapshotUrl - URL of snapshot to retrieve the difference. * @param options - Options to the Page Blob Get Page Ranges Diff operation. * @returns Response data for the Page Blob Get Page Range Diff operation. */ PageBlobClient.prototype.getPageRangesDiffForManagedDisks = function (offset, count, prevSnapshotUrl, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_41; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: options.conditions = options.conditions || {}; _b = createSpan("PageBlobClient-GetPageRangesDiffForManagedDisks", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.pageBlobContext .getPageRangesDiff(tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), prevSnapshotUrl: prevSnapshotUrl, range: rangeToString({ offset: offset, count: count }) }, convertTracingToRequestOptionsBase(updatedOptions))) .then(rangeResponseFromModel)]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_41 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_41.message }); throw e_41; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Resizes the page blob to the specified size (which must be a multiple of 512). * @see https://docs.microsoft.com/rest/api/storageservices/set-blob-properties * * @param size - Target size * @param options - Options to the Page Blob Resize operation. * @returns Response data for the Page Blob Resize operation. */ PageBlobClient.prototype.resize = function (size, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_42; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: options.conditions = options.conditions || {}; _b = createSpan("PageBlobClient-resize", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.pageBlobContext.resize(size, tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }), encryptionScope: options.encryptionScope }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_42 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_42.message }); throw e_42; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Sets a page blob's sequence number. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-properties * * @param sequenceNumberAction - Indicates how the service should modify the blob's sequence number. * @param sequenceNumber - Required if sequenceNumberAction is max or update * @param options - Options to the Page Blob Update Sequence Number operation. * @returns Response data for the Page Blob Update Sequence Number operation. */ PageBlobClient.prototype.updateSequenceNumber = function (sequenceNumberAction, sequenceNumber, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_43; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: options.conditions = options.conditions || {}; _b = createSpan("PageBlobClient-updateSequenceNumber", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.pageBlobContext.updateSequenceNumber(sequenceNumberAction, tslib.__assign({ abortSignal: options.abortSignal, blobSequenceNumber: sequenceNumber, leaseAccessConditions: options.conditions, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_43 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_43.message }); throw e_43; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Begins an operation to start an incremental copy from one page blob's snapshot to this page blob. * The snapshot is copied such that only the differential changes between the previously * copied snapshot are transferred to the destination. * The copied snapshots are complete copies of the original snapshot and can be read or copied from as usual. * @see https://docs.microsoft.com/rest/api/storageservices/incremental-copy-blob * @see https://docs.microsoft.com/en-us/azure/virtual-machines/windows/incremental-snapshots * * @param copySource - Specifies the name of the source page blob snapshot. For example, * https://myaccount.blob.core.windows.net/mycontainer/myblob?snapshot= * @param options - Options to the Page Blob Copy Incremental operation. * @returns Response data for the Page Blob Copy Incremental operation. */ PageBlobClient.prototype.startCopyIncremental = function (copySource, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, e_44; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: _b = createSpan("PageBlobClient-startCopyIncremental", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.pageBlobContext.copyIncremental(copySource, tslib.__assign({ abortSignal: options.abortSignal, modifiedAccessConditions: tslib.__assign(tslib.__assign({}, options.conditions), { ifTags: (_a = options.conditions) === null || _a === void 0 ? void 0 : _a.tagConditions }) }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_44 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_44.message }); throw e_44; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; return PageBlobClient; }(BlobClient)); // Copyright (c) Microsoft Corporation. function getBodyAsText(batchResponse) { return tslib.__awaiter(this, void 0, void 0, function () { var buffer, responseLength; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: buffer = Buffer.alloc(BATCH_MAX_PAYLOAD_IN_BYTES); return [4 /*yield*/, streamToBuffer2(batchResponse.readableStreamBody, buffer)]; case 1: responseLength = _a.sent(); // Slice the buffer to trim the empty ending. buffer = buffer.slice(0, responseLength); return [2 /*return*/, buffer.toString()]; } }); }); } function utf8ByteLength(str) { return Buffer.byteLength(str); } // Copyright (c) Microsoft Corporation. var HTTP_HEADER_DELIMITER = ": "; var SPACE_DELIMITER = " "; var NOT_FOUND = -1; /** * Util class for parsing batch response. */ var BatchResponseParser = /** @class */ (function () { function BatchResponseParser(batchResponse, subRequests) { if (!batchResponse || !batchResponse.contentType) { // In special case(reported), server may return invalid content-type which could not be parsed. throw new RangeError("batchResponse is malformed or doesn't contain valid content-type."); } if (!subRequests || subRequests.size === 0) { // This should be prevent during coding. throw new RangeError("Invalid state: subRequests is not provided or size is 0."); } this.batchResponse = batchResponse; this.subRequests = subRequests; this.responseBatchBoundary = this.batchResponse.contentType.split("=")[1]; this.perResponsePrefix = "--" + this.responseBatchBoundary + HTTP_LINE_ENDING; this.batchResponseEnding = "--" + this.responseBatchBoundary + "--"; } // For example of response, please refer to https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch#response BatchResponseParser.prototype.parseBatchResponse = function () { return tslib.__awaiter(this, void 0, void 0, function () { var responseBodyAsText, subResponses, subResponseCount, deserializedSubResponses, subResponsesSucceededCount, subResponsesFailedCount, index, subResponse, deserializedSubResponse, responseLines, subRespHeaderStartFound, subRespHeaderEndFound, subRespFailed, contentId, _i, responseLines_1, responseLine, tokens, tokens; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: // When logic reach here, suppose batch request has already succeeded with 202, so we can further parse // sub request's response. if (this.batchResponse._response.status != HTTPURLConnection.HTTP_ACCEPTED) { throw new Error("Invalid state: batch request failed with status: '" + this.batchResponse._response.status + "'."); } return [4 /*yield*/, getBodyAsText(this.batchResponse)]; case 1: responseBodyAsText = _a.sent(); subResponses = responseBodyAsText .split(this.batchResponseEnding)[0] // string after ending is useless .split(this.perResponsePrefix) .slice(1); subResponseCount = subResponses.length; // Defensive coding in case of potential error parsing. // Note: subResponseCount == 1 is special case where sub request is invalid. // We try to prevent such cases through early validation, e.g. validate sub request count >= 1. // While in unexpected sub request invalid case, we allow sub response to be parsed and return to user. if (subResponseCount != this.subRequests.size && subResponseCount != 1) { throw new Error("Invalid state: sub responses' count is not equal to sub requests' count."); } deserializedSubResponses = new Array(subResponseCount); subResponsesSucceededCount = 0; subResponsesFailedCount = 0; // Parse sub subResponses. for (index = 0; index < subResponseCount; index++) { subResponse = subResponses[index]; deserializedSubResponse = {}; deserializedSubResponse.headers = new coreHttp.HttpHeaders(); responseLines = subResponse.split("" + HTTP_LINE_ENDING); subRespHeaderStartFound = false; subRespHeaderEndFound = false; subRespFailed = false; contentId = NOT_FOUND; for (_i = 0, responseLines_1 = responseLines; _i < responseLines_1.length; _i++) { responseLine = responseLines_1[_i]; if (!subRespHeaderStartFound) { // Convention line to indicate content ID if (responseLine.startsWith(HeaderConstants.CONTENT_ID)) { contentId = parseInt(responseLine.split(HTTP_HEADER_DELIMITER)[1]); } // Http version line with status code indicates the start of sub request's response. // Example: HTTP/1.1 202 Accepted if (responseLine.startsWith(HTTP_VERSION_1_1)) { subRespHeaderStartFound = true; tokens = responseLine.split(SPACE_DELIMITER); deserializedSubResponse.status = parseInt(tokens[1]); deserializedSubResponse.statusMessage = tokens.slice(2).join(SPACE_DELIMITER); } continue; // Skip convention headers not specifically for sub request i.e. Content-Type: application/http and Content-ID: * } if (responseLine.trim() === "") { // Sub response's header start line already found, and the first empty line indicates header end line found. if (!subRespHeaderEndFound) { subRespHeaderEndFound = true; } continue; // Skip empty line } // Note: when code reach here, it indicates subRespHeaderStartFound == true if (!subRespHeaderEndFound) { if (responseLine.indexOf(HTTP_HEADER_DELIMITER) === -1) { // Defensive coding to prevent from missing valuable lines. throw new Error("Invalid state: find non-empty line '" + responseLine + "' without HTTP header delimiter '" + HTTP_HEADER_DELIMITER + "'."); } tokens = responseLine.split(HTTP_HEADER_DELIMITER); deserializedSubResponse.headers.set(tokens[0], tokens[1]); if (tokens[0] === HeaderConstants.X_MS_ERROR_CODE) { deserializedSubResponse.errorCode = tokens[1]; subRespFailed = true; } } else { // Assemble body of sub response. if (!deserializedSubResponse.bodyAsText) { deserializedSubResponse.bodyAsText = ""; } deserializedSubResponse.bodyAsText += responseLine; } } // Inner for end // The response will contain the Content-ID header for each corresponding subrequest response to use for tracking. // The Content-IDs are set to a valid index in the subrequests we sent. In the status code 202 path, we could expect it // to be 1-1 mapping from the [0, subRequests.size) to the Content-IDs returned. If not, we simply don't return that // unexpected subResponse in the parsed reponse and we can always look it up in the raw response for debugging purpose. if (contentId != NOT_FOUND && Number.isInteger(contentId) && contentId >= 0 && contentId < this.subRequests.size && deserializedSubResponses[contentId] === undefined) { deserializedSubResponse._request = this.subRequests.get(contentId); deserializedSubResponses[contentId] = deserializedSubResponse; } else { logger.error("subResponses[" + index + "] is dropped as the Content-ID is not found or invalid, Content-ID: " + contentId); } if (subRespFailed) { subResponsesFailedCount++; } else { subResponsesSucceededCount++; } } return [2 /*return*/, { subResponses: deserializedSubResponses, subResponsesSucceededCount: subResponsesSucceededCount, subResponsesFailedCount: subResponsesFailedCount }]; } }); }); }; return BatchResponseParser; }()); // Copyright (c) Microsoft Corporation. var MutexLockStatus; (function (MutexLockStatus) { MutexLockStatus[MutexLockStatus["LOCKED"] = 0] = "LOCKED"; MutexLockStatus[MutexLockStatus["UNLOCKED"] = 1] = "UNLOCKED"; })(MutexLockStatus || (MutexLockStatus = {})); /** * An async mutex lock. */ var Mutex = /** @class */ (function () { function Mutex() { } /** * Lock for a specific key. If the lock has been acquired by another customer, then * will wait until getting the lock. * * @param key - lock key */ Mutex.lock = function (key) { return tslib.__awaiter(this, void 0, void 0, function () { var _this = this; return tslib.__generator(this, function (_a) { return [2 /*return*/, new Promise(function (resolve) { if (_this.keys[key] === undefined || _this.keys[key] === MutexLockStatus.UNLOCKED) { _this.keys[key] = MutexLockStatus.LOCKED; resolve(); } else { _this.onUnlockEvent(key, function () { _this.keys[key] = MutexLockStatus.LOCKED; resolve(); }); } })]; }); }); }; /** * Unlock a key. * * @param key - */ Mutex.unlock = function (key) { return tslib.__awaiter(this, void 0, void 0, function () { var _this = this; return tslib.__generator(this, function (_a) { return [2 /*return*/, new Promise(function (resolve) { if (_this.keys[key] === MutexLockStatus.LOCKED) { _this.emitUnlockEvent(key); } delete _this.keys[key]; resolve(); })]; }); }); }; Mutex.onUnlockEvent = function (key, handler) { if (this.listeners[key] === undefined) { this.listeners[key] = [handler]; } else { this.listeners[key].push(handler); } }; Mutex.emitUnlockEvent = function (key) { var _this = this; if (this.listeners[key] !== undefined && this.listeners[key].length > 0) { var handler_1 = this.listeners[key].shift(); setImmediate(function () { handler_1.call(_this); }); } }; Mutex.keys = {}; Mutex.listeners = {}; return Mutex; }()); // Copyright (c) Microsoft Corporation. /** * A BlobBatch represents an aggregated set of operations on blobs. * Currently, only `delete` and `setAccessTier` are supported. */ var BlobBatch = /** @class */ (function () { function BlobBatch() { this.batch = "batch"; this.batchRequest = new InnerBatchRequest(); } /** * Get the value of Content-Type for a batch request. * The value must be multipart/mixed with a batch boundary. * Example: multipart/mixed; boundary=batch_a81786c8-e301-4e42-a729-a32ca24ae252 */ BlobBatch.prototype.getMultiPartContentType = function () { return this.batchRequest.getMultipartContentType(); }; /** * Get assembled HTTP request body for sub requests. */ BlobBatch.prototype.getHttpRequestBody = function () { return this.batchRequest.getHttpRequestBody(); }; /** * Get sub requests that are added into the batch request. */ BlobBatch.prototype.getSubRequests = function () { return this.batchRequest.getSubRequests(); }; BlobBatch.prototype.addSubRequestInternal = function (subRequest, assembleSubRequestFunc) { return tslib.__awaiter(this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, Mutex.lock(this.batch)]; case 1: _a.sent(); _a.label = 2; case 2: _a.trys.push([2, , 4, 6]); this.batchRequest.preAddSubRequest(subRequest); return [4 /*yield*/, assembleSubRequestFunc()]; case 3: _a.sent(); this.batchRequest.postAddSubRequest(subRequest); return [3 /*break*/, 6]; case 4: return [4 /*yield*/, Mutex.unlock(this.batch)]; case 5: _a.sent(); return [7 /*endfinally*/]; case 6: return [2 /*return*/]; } }); }); }; BlobBatch.prototype.setBatchType = function (batchType) { if (!this.batchType) { this.batchType = batchType; } if (this.batchType !== batchType) { throw new RangeError("BlobBatch only supports one operation type per batch and it already is being used for " + this.batchType + " operations."); } }; BlobBatch.prototype.deleteBlob = function (urlOrBlobClient, credentialOrOptions, options) { return tslib.__awaiter(this, void 0, void 0, function () { var url, credential, _a, span, updatedOptions, e_1; var _this = this; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: if (typeof urlOrBlobClient === "string" && ((coreHttp.isNode && credentialOrOptions instanceof StorageSharedKeyCredential) || credentialOrOptions instanceof AnonymousCredential || coreHttp.isTokenCredential(credentialOrOptions))) { // First overload url = urlOrBlobClient; credential = credentialOrOptions; } else if (urlOrBlobClient instanceof BlobClient) { // Second overload url = urlOrBlobClient.url; credential = urlOrBlobClient.credential; options = credentialOrOptions; } else { throw new RangeError("Invalid arguments. Either url and credential, or BlobClient need be provided."); } if (!options) { options = {}; } _a = createSpan("BatchDeleteRequest-addSubRequest", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); this.setBatchType("delete"); return [4 /*yield*/, this.addSubRequestInternal({ url: url, credential: credential }, function () { return tslib.__awaiter(_this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, new BlobClient(url, this.batchRequest.createPipeline(credential)).delete(updatedOptions)]; case 1: _a.sent(); return [2 /*return*/]; } }); }); })]; case 2: _b.sent(); return [3 /*break*/, 5]; case 3: e_1 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_1.message }); throw e_1; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; BlobBatch.prototype.setBlobAccessTier = function (urlOrBlobClient, credentialOrTier, tierOrOptions, options) { return tslib.__awaiter(this, void 0, void 0, function () { var url, credential, tier, _a, span, updatedOptions, e_2; var _this = this; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: if (typeof urlOrBlobClient === "string" && ((coreHttp.isNode && credentialOrTier instanceof StorageSharedKeyCredential) || credentialOrTier instanceof AnonymousCredential || coreHttp.isTokenCredential(credentialOrTier))) { // First overload url = urlOrBlobClient; credential = credentialOrTier; tier = tierOrOptions; } else if (urlOrBlobClient instanceof BlobClient) { // Second overload url = urlOrBlobClient.url; credential = urlOrBlobClient.credential; tier = credentialOrTier; options = tierOrOptions; } else { throw new RangeError("Invalid arguments. Either url and credential, or BlobClient need be provided."); } if (!options) { options = {}; } _a = createSpan("BatchSetTierRequest-addSubRequest", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); this.setBatchType("setAccessTier"); return [4 /*yield*/, this.addSubRequestInternal({ url: url, credential: credential }, function () { return tslib.__awaiter(_this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, new BlobClient(url, this.batchRequest.createPipeline(credential)).setAccessTier(tier, updatedOptions)]; case 1: _a.sent(); return [2 /*return*/]; } }); }); })]; case 2: _b.sent(); return [3 /*break*/, 5]; case 3: e_2 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_2.message }); throw e_2; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; return BlobBatch; }()); /** * Inner batch request class which is responsible for assembling and serializing sub requests. * See https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch#request-body for how requests are assembled. */ var InnerBatchRequest = /** @class */ (function () { function InnerBatchRequest() { this.operationCount = 0; this.body = ""; var tempGuid = coreHttp.generateUuid(); // batch_{batchid} this.boundary = "batch_" + tempGuid; // --batch_{batchid} // Content-Type: application/http // Content-Transfer-Encoding: binary this.subRequestPrefix = "--" + this.boundary + HTTP_LINE_ENDING + HeaderConstants.CONTENT_TYPE + ": application/http" + HTTP_LINE_ENDING + HeaderConstants.CONTENT_TRANSFER_ENCODING + ": binary"; // multipart/mixed; boundary=batch_{batchid} this.multipartContentType = "multipart/mixed; boundary=" + this.boundary; // --batch_{batchid}-- this.batchRequestEnding = "--" + this.boundary + "--"; this.subRequests = new Map(); } /** * Create pipeline to assemble sub requests. The idea here is to use existing * credential and serialization/deserialization components, with additional policies to * filter unnecessary headers, assemble sub requests into request's body * and intercept request from going to wire. * @param credential - Such as AnonymousCredential, StorageSharedKeyCredential or any credential from the `@azure/identity` package to authenticate requests to the service. You can also provide an object that implements the TokenCredential interface. If not specified, AnonymousCredential is used. */ InnerBatchRequest.prototype.createPipeline = function (credential) { var isAnonymousCreds = credential instanceof AnonymousCredential; var policyFactoryLength = 3 + (isAnonymousCreds ? 0 : 1); // [deserializationPolicy, BatchHeaderFilterPolicyFactory, (Optional)Credential, BatchRequestAssemblePolicyFactory] var factories = new Array(policyFactoryLength); factories[0] = coreHttp.deserializationPolicy(); // Default deserializationPolicy is provided by protocol layer factories[1] = new BatchHeaderFilterPolicyFactory(); // Use batch header filter policy to exclude unnecessary headers if (!isAnonymousCreds) { factories[2] = coreHttp.isTokenCredential(credential) ? attachCredential(coreHttp.bearerTokenAuthenticationPolicy(credential, StorageOAuthScopes), credential) : credential; } factories[policyFactoryLength - 1] = new BatchRequestAssemblePolicyFactory(this); // Use batch assemble policy to assemble request and intercept request from going to wire return new Pipeline(factories, {}); }; InnerBatchRequest.prototype.appendSubRequestToBody = function (request) { // Start to assemble sub request this.body += [ this.subRequestPrefix, HeaderConstants.CONTENT_ID + ": " + this.operationCount, "", request.method.toString() + " " + getURLPathAndQuery(request.url) + " " + HTTP_VERSION_1_1 + HTTP_LINE_ENDING // sub request start line with method ].join(HTTP_LINE_ENDING); for (var _i = 0, _a = request.headers.headersArray(); _i < _a.length; _i++) { var header = _a[_i]; this.body += header.name + ": " + header.value + HTTP_LINE_ENDING; } this.body += HTTP_LINE_ENDING; // sub request's headers need be ending with an empty line // No body to assemble for current batch request support // End to assemble sub request }; InnerBatchRequest.prototype.preAddSubRequest = function (subRequest) { if (this.operationCount >= BATCH_MAX_REQUEST) { throw new RangeError("Cannot exceed " + BATCH_MAX_REQUEST + " sub requests in a single batch"); } // Fast fail if url for sub request is invalid var path = getURLPath(subRequest.url); if (!path || path == "") { throw new RangeError("Invalid url for sub request: '" + subRequest.url + "'"); } }; InnerBatchRequest.prototype.postAddSubRequest = function (subRequest) { this.subRequests.set(this.operationCount, subRequest); this.operationCount++; }; // Return the http request body with assembling the ending line to the sub request body. InnerBatchRequest.prototype.getHttpRequestBody = function () { return "" + this.body + this.batchRequestEnding + HTTP_LINE_ENDING; }; InnerBatchRequest.prototype.getMultipartContentType = function () { return this.multipartContentType; }; InnerBatchRequest.prototype.getSubRequests = function () { return this.subRequests; }; return InnerBatchRequest; }()); var BatchRequestAssemblePolicy = /** @class */ (function (_super) { tslib.__extends(BatchRequestAssemblePolicy, _super); function BatchRequestAssemblePolicy(batchRequest, nextPolicy, options) { var _this = _super.call(this, nextPolicy, options) || this; _this.dummyResponse = { request: new coreHttp.WebResource(), status: 200, headers: new coreHttp.HttpHeaders() }; _this.batchRequest = batchRequest; return _this; } BatchRequestAssemblePolicy.prototype.sendRequest = function (request) { return tslib.__awaiter(this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.batchRequest.appendSubRequestToBody(request)]; case 1: _a.sent(); return [2 /*return*/, this.dummyResponse]; // Intercept request from going to wire } }); }); }; return BatchRequestAssemblePolicy; }(coreHttp.BaseRequestPolicy)); var BatchRequestAssemblePolicyFactory = /** @class */ (function () { function BatchRequestAssemblePolicyFactory(batchRequest) { this.batchRequest = batchRequest; } BatchRequestAssemblePolicyFactory.prototype.create = function (nextPolicy, options) { return new BatchRequestAssemblePolicy(this.batchRequest, nextPolicy, options); }; return BatchRequestAssemblePolicyFactory; }()); var BatchHeaderFilterPolicy = /** @class */ (function (_super) { tslib.__extends(BatchHeaderFilterPolicy, _super); function BatchHeaderFilterPolicy(nextPolicy, options) { return _super.call(this, nextPolicy, options) || this; } BatchHeaderFilterPolicy.prototype.sendRequest = function (request) { return tslib.__awaiter(this, void 0, void 0, function () { var xMsHeaderName, _i, _a, header; return tslib.__generator(this, function (_b) { xMsHeaderName = ""; for (_i = 0, _a = request.headers.headersArray(); _i < _a.length; _i++) { header = _a[_i]; if (iEqual(header.name, HeaderConstants.X_MS_VERSION)) { xMsHeaderName = header.name; } } if (xMsHeaderName !== "") { request.headers.remove(xMsHeaderName); // The subrequests should not have the x-ms-version header. } return [2 /*return*/, this._nextPolicy.sendRequest(request)]; }); }); }; return BatchHeaderFilterPolicy; }(coreHttp.BaseRequestPolicy)); var BatchHeaderFilterPolicyFactory = /** @class */ (function () { function BatchHeaderFilterPolicyFactory() { } BatchHeaderFilterPolicyFactory.prototype.create = function (nextPolicy, options) { return new BatchHeaderFilterPolicy(nextPolicy, options); }; return BatchHeaderFilterPolicyFactory; }()); // Copyright (c) Microsoft Corporation. /** * A BlobBatchClient allows you to make batched requests to the Azure Storage Blob service. * * @see https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch */ var BlobBatchClient = /** @class */ (function () { function BlobBatchClient(url, credentialOrPipeline, options) { var pipeline; if (credentialOrPipeline instanceof Pipeline) { pipeline = credentialOrPipeline; } else if (!credentialOrPipeline) { // no credential provided pipeline = newPipeline(new AnonymousCredential(), options); } else { pipeline = newPipeline(credentialOrPipeline, options); } var storageClientContext = new StorageClientContext(url, pipeline.toServiceClientOptions()); var path = getURLPath(url); if (path && path !== "/") { // Container scoped. this.serviceOrContainerContext = new Container(storageClientContext); } else { this.serviceOrContainerContext = new Service(storageClientContext); } } /** * Creates a {@link BlobBatch}. * A BlobBatch represents an aggregated set of operations on blobs. */ BlobBatchClient.prototype.createBatch = function () { return new BlobBatch(); }; BlobBatchClient.prototype.deleteBlobs = function (urlsOrBlobClients, credentialOrOptions, options) { return tslib.__awaiter(this, void 0, void 0, function () { var batch, _i, urlsOrBlobClients_1, urlOrBlobClient; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: batch = new BlobBatch(); _i = 0, urlsOrBlobClients_1 = urlsOrBlobClients; _a.label = 1; case 1: if (!(_i < urlsOrBlobClients_1.length)) return [3 /*break*/, 6]; urlOrBlobClient = urlsOrBlobClients_1[_i]; if (!(typeof urlOrBlobClient === "string")) return [3 /*break*/, 3]; return [4 /*yield*/, batch.deleteBlob(urlOrBlobClient, credentialOrOptions, options)]; case 2: _a.sent(); return [3 /*break*/, 5]; case 3: return [4 /*yield*/, batch.deleteBlob(urlOrBlobClient, credentialOrOptions)]; case 4: _a.sent(); _a.label = 5; case 5: _i++; return [3 /*break*/, 1]; case 6: return [2 /*return*/, this.submitBatch(batch)]; } }); }); }; BlobBatchClient.prototype.setBlobsAccessTier = function (urlsOrBlobClients, credentialOrTier, tierOrOptions, options) { return tslib.__awaiter(this, void 0, void 0, function () { var batch, _i, urlsOrBlobClients_2, urlOrBlobClient; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: batch = new BlobBatch(); _i = 0, urlsOrBlobClients_2 = urlsOrBlobClients; _a.label = 1; case 1: if (!(_i < urlsOrBlobClients_2.length)) return [3 /*break*/, 6]; urlOrBlobClient = urlsOrBlobClients_2[_i]; if (!(typeof urlOrBlobClient === "string")) return [3 /*break*/, 3]; return [4 /*yield*/, batch.setBlobAccessTier(urlOrBlobClient, credentialOrTier, tierOrOptions, options)]; case 2: _a.sent(); return [3 /*break*/, 5]; case 3: return [4 /*yield*/, batch.setBlobAccessTier(urlOrBlobClient, credentialOrTier, tierOrOptions)]; case 4: _a.sent(); _a.label = 5; case 5: _i++; return [3 /*break*/, 1]; case 6: return [2 /*return*/, this.submitBatch(batch)]; } }); }); }; /** * Submit batch request which consists of multiple subrequests. * * Get `blobBatchClient` and other details before running the snippets. * `blobServiceClient.getBlobBatchClient()` gives the `blobBatchClient` * * Example usage: * * ```js * let batchRequest = new BlobBatch(); * await batchRequest.deleteBlob(urlInString0, credential0); * await batchRequest.deleteBlob(urlInString1, credential1, { * deleteSnapshots: "include" * }); * const batchResp = await blobBatchClient.submitBatch(batchRequest); * console.log(batchResp.subResponsesSucceededCount); * ``` * * Example using a lease: * * ```js * let batchRequest = new BlobBatch(); * await batchRequest.setBlobAccessTier(blockBlobClient0, "Cool"); * await batchRequest.setBlobAccessTier(blockBlobClient1, "Cool", { * conditions: { leaseId: leaseId } * }); * const batchResp = await blobBatchClient.submitBatch(batchRequest); * console.log(batchResp.subResponsesSucceededCount); * ``` * * @see https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch * * @param batchRequest - A set of Delete or SetTier operations. * @param options - */ BlobBatchClient.prototype.submitBatch = function (batchRequest, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, batchRequestBody, rawBatchResponse, batchResponseParser, responseSummary, res, e_1; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: if (!batchRequest || batchRequest.getSubRequests().size == 0) { throw new RangeError("Batch request should contain one or more sub requests."); } _a = createSpan("BlobBatchClient-submitBatch", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 4, 5, 6]); batchRequestBody = batchRequest.getHttpRequestBody(); return [4 /*yield*/, this.serviceOrContainerContext.submitBatch(utf8ByteLength(batchRequestBody), batchRequest.getMultiPartContentType(), batchRequestBody, tslib.__assign(tslib.__assign({}, options), convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: rawBatchResponse = _b.sent(); batchResponseParser = new BatchResponseParser(rawBatchResponse, batchRequest.getSubRequests()); return [4 /*yield*/, batchResponseParser.parseBatchResponse()]; case 3: responseSummary = _b.sent(); res = { _response: rawBatchResponse._response, contentType: rawBatchResponse.contentType, errorCode: rawBatchResponse.errorCode, requestId: rawBatchResponse.requestId, clientRequestId: rawBatchResponse.clientRequestId, version: rawBatchResponse.version, subResponses: responseSummary.subResponses, subResponsesSucceededCount: responseSummary.subResponsesSucceededCount, subResponsesFailedCount: responseSummary.subResponsesFailedCount }; return [2 /*return*/, res]; case 4: e_1 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_1.message }); throw e_1; case 5: span.end(); return [7 /*endfinally*/]; case 6: return [2 /*return*/]; } }); }); }; return BlobBatchClient; }()); /** * A ContainerClient represents a URL to the Azure Storage container allowing you to manipulate its blobs. */ var ContainerClient = /** @class */ (function (_super) { tslib.__extends(ContainerClient, _super); function ContainerClient(urlOrConnectionString, credentialOrPipelineOrContainerName, options) { var _this = this; var pipeline; var url; options = options || {}; if (credentialOrPipelineOrContainerName instanceof Pipeline) { // (url: string, pipeline: Pipeline) url = urlOrConnectionString; pipeline = credentialOrPipelineOrContainerName; } else if ((coreHttp.isNode && credentialOrPipelineOrContainerName instanceof StorageSharedKeyCredential) || credentialOrPipelineOrContainerName instanceof AnonymousCredential || coreHttp.isTokenCredential(credentialOrPipelineOrContainerName)) { // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions) url = urlOrConnectionString; pipeline = newPipeline(credentialOrPipelineOrContainerName, options); } else if (!credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName !== "string") { // (url: string, credential?: StorageSharedKeyCredential | AnonymousCredential | TokenCredential, options?: StoragePipelineOptions) // The second parameter is undefined. Use anonymous credential. url = urlOrConnectionString; pipeline = newPipeline(new AnonymousCredential(), options); } else if (credentialOrPipelineOrContainerName && typeof credentialOrPipelineOrContainerName === "string") { // (connectionString: string, containerName: string, blobName: string, options?: StoragePipelineOptions) var containerName = credentialOrPipelineOrContainerName; var extractedCreds = extractConnectionStringParts(urlOrConnectionString); if (extractedCreds.kind === "AccountConnString") { { var sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey); url = appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)); options.proxyOptions = coreHttp.getDefaultProxySettings(extractedCreds.proxyUri); pipeline = newPipeline(sharedKeyCredential, options); } } else if (extractedCreds.kind === "SASConnString") { url = appendToURLPath(extractedCreds.url, encodeURIComponent(containerName)) + "?" + extractedCreds.accountSas; pipeline = newPipeline(new AnonymousCredential(), options); } else { throw new Error("Connection string must be either an Account connection string or a SAS connection string"); } } else { throw new Error("Expecting non-empty strings for containerName parameter"); } _this = _super.call(this, url, pipeline) || this; _this._containerName = _this.getContainerNameFromUrl(); _this.containerContext = new Container(_this.storageClientContext); return _this; } Object.defineProperty(ContainerClient.prototype, "containerName", { /** * The name of the container. */ get: function () { return this._containerName; }, enumerable: false, configurable: true }); /** * Creates a new container under the specified account. If the container with * the same name already exists, the operation fails. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/create-container * * @param options - Options to Container Create operation. * * * Example usage: * * ```js * const containerClient = blobServiceClient.getContainerClient(""); * const createContainerResponse = await containerClient.create(); * console.log("Container was created successfully", createContainerResponse.requestId); * ``` */ ContainerClient.prototype.create = function (options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, e_1; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("ContainerClient-create", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.containerContext.create(tslib.__assign(tslib.__assign({}, options), convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: // Spread operator in destructuring assignments, // this will filter out unwanted properties from the response object into result object return [2 /*return*/, _b.sent()]; case 3: e_1 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_1.message }); throw e_1; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Creates a new container under the specified account. If the container with * the same name already exists, it is not changed. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/create-container * * @param options - */ ContainerClient.prototype.createIfNotExists = function (options) { var _a, _b; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _c, span, updatedOptions, res, e_2; return tslib.__generator(this, function (_d) { switch (_d.label) { case 0: _c = createSpan("ContainerClient-createIfNotExists", options), span = _c.span, updatedOptions = _c.updatedOptions; _d.label = 1; case 1: _d.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.create(updatedOptions)]; case 2: res = _d.sent(); return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: true }, res), { _response: res._response // _response is made non-enumerable })]; case 3: e_2 = _d.sent(); if (((_a = e_2.details) === null || _a === void 0 ? void 0 : _a.errorCode) === "ContainerAlreadyExists") { span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: "Expected exception when creating a container only if it does not already exist." }); return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: false }, (_b = e_2.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), { _response: e_2.response })]; } span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_2.message }); throw e_2; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Returns true if the Azure container resource represented by this client exists; false otherwise. * * NOTE: use this function with care since an existing container might be deleted by other clients or * applications. Vice versa new containers with the same name might be added by other clients or * applications after this function completes. * * @param options - */ ContainerClient.prototype.exists = function (options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, e_3; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("ContainerClient-exists", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.getProperties({ abortSignal: options.abortSignal, tracingOptions: updatedOptions.tracingOptions })]; case 2: _b.sent(); return [2 /*return*/, true]; case 3: e_3 = _b.sent(); if (e_3.statusCode === 404) { span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: "Expected exception when checking container existence" }); return [2 /*return*/, false]; } span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_3.message }); throw e_3; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Creates a {@link BlobClient} * * @param blobName - A blob name * @returns A new BlobClient object for the given blob name. */ ContainerClient.prototype.getBlobClient = function (blobName) { return new BlobClient(appendToURLPath(this.url, encodeURIComponent(blobName)), this.pipeline); }; /** * Creates an {@link AppendBlobClient} * * @param blobName - An append blob name */ ContainerClient.prototype.getAppendBlobClient = function (blobName) { return new AppendBlobClient(appendToURLPath(this.url, encodeURIComponent(blobName)), this.pipeline); }; /** * Creates a {@link BlockBlobClient} * * @param blobName - A block blob name * * * Example usage: * * ```js * const content = "Hello world!"; * * const blockBlobClient = containerClient.getBlockBlobClient(""); * const uploadBlobResponse = await blockBlobClient.upload(content, content.length); * ``` */ ContainerClient.prototype.getBlockBlobClient = function (blobName) { return new BlockBlobClient(appendToURLPath(this.url, encodeURIComponent(blobName)), this.pipeline); }; /** * Creates a {@link PageBlobClient} * * @param blobName - A page blob name */ ContainerClient.prototype.getPageBlobClient = function (blobName) { return new PageBlobClient(appendToURLPath(this.url, encodeURIComponent(blobName)), this.pipeline); }; /** * Returns all user-defined metadata and system properties for the specified * container. The data returned does not include the container's list of blobs. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-container-properties * * WARNING: The `metadata` object returned in the response will have its keys in lowercase, even if * they originally contained uppercase characters. This differs from the metadata keys returned by * the `listContainers` method of {@link BlobServiceClient} using the `includeMetadata` option, which * will retain their original casing. * * @param options - Options to Container Get Properties operation. */ ContainerClient.prototype.getProperties = function (options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, e_4; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: if (!options.conditions) { options.conditions = {}; } _a = createSpan("ContainerClient-getProperties", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.containerContext.getProperties(tslib.__assign(tslib.__assign({ abortSignal: options.abortSignal }, options.conditions), convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _b.sent()]; case 3: e_4 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_4.message }); throw e_4; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Marks the specified container for deletion. The container and any blobs * contained within it are later deleted during garbage collection. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/delete-container * * @param options - Options to Container Delete operation. */ ContainerClient.prototype.delete = function (options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, e_5; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: if (!options.conditions) { options.conditions = {}; } _a = createSpan("ContainerClient-delete", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.containerContext.delete(tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, modifiedAccessConditions: options.conditions }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _b.sent()]; case 3: e_5 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_5.message }); throw e_5; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Marks the specified container for deletion if it exists. The container and any blobs * contained within it are later deleted during garbage collection. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/delete-container * * @param options - Options to Container Delete operation. */ ContainerClient.prototype.deleteIfExists = function (options) { var _a, _b; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _c, span, updatedOptions, res, e_6; return tslib.__generator(this, function (_d) { switch (_d.label) { case 0: _c = createSpan("ContainerClient-deleteIfExists", options), span = _c.span, updatedOptions = _c.updatedOptions; _d.label = 1; case 1: _d.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.delete(updatedOptions)]; case 2: res = _d.sent(); return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: true }, res), { _response: res._response // _response is made non-enumerable })]; case 3: e_6 = _d.sent(); if (((_a = e_6.details) === null || _a === void 0 ? void 0 : _a.errorCode) === "ContainerNotFound") { span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: "Expected exception when deleting a container only if it exists." }); return [2 /*return*/, tslib.__assign(tslib.__assign({ succeeded: false }, (_b = e_6.response) === null || _b === void 0 ? void 0 : _b.parsedHeaders), { _response: e_6.response })]; } span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_6.message }); throw e_6; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Sets one or more user-defined name-value pairs for the specified container. * * If no option provided, or no metadata defined in the parameter, the container * metadata will be removed. * * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-container-metadata * * @param metadata - Replace existing metadata with this value. * If no value provided the existing metadata will be removed. * @param options - Options to Container Set Metadata operation. */ ContainerClient.prototype.setMetadata = function (metadata, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, e_7; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: if (!options.conditions) { options.conditions = {}; } if (options.conditions.ifUnmodifiedSince) { throw new RangeError("the IfUnmodifiedSince must have their default values because they are ignored by the blob service"); } _a = createSpan("ContainerClient-setMetadata", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.containerContext.setMetadata(tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions, metadata: metadata, modifiedAccessConditions: options.conditions }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _b.sent()]; case 3: e_7 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_7.message }); throw e_7; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Gets the permissions for the specified container. The permissions indicate * whether container data may be accessed publicly. * * WARNING: JavaScript Date will potentially lose precision when parsing startsOn and expiresOn strings. * For example, new Date("2018-12-31T03:44:23.8827891Z").toISOString() will get "2018-12-31T03:44:23.882Z". * * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-container-acl * * @param options - Options to Container Get Access Policy operation. */ ContainerClient.prototype.getAccessPolicy = function (options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, response, res, _i, response_1, identifier, accessPolicy, e_8; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: if (!options.conditions) { options.conditions = {}; } _a = createSpan("ContainerClient-getAccessPolicy", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.containerContext.getAccessPolicy(tslib.__assign({ abortSignal: options.abortSignal, leaseAccessConditions: options.conditions }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: response = _b.sent(); res = { _response: response._response, blobPublicAccess: response.blobPublicAccess, date: response.date, etag: response.etag, errorCode: response.errorCode, lastModified: response.lastModified, requestId: response.requestId, clientRequestId: response.clientRequestId, signedIdentifiers: [], version: response.version }; for (_i = 0, response_1 = response; _i < response_1.length; _i++) { identifier = response_1[_i]; accessPolicy = undefined; if (identifier.accessPolicy) { accessPolicy = { permissions: identifier.accessPolicy.permissions }; if (identifier.accessPolicy.expiresOn) { accessPolicy.expiresOn = new Date(identifier.accessPolicy.expiresOn); } if (identifier.accessPolicy.startsOn) { accessPolicy.startsOn = new Date(identifier.accessPolicy.startsOn); } } res.signedIdentifiers.push({ accessPolicy: accessPolicy, id: identifier.id }); } return [2 /*return*/, res]; case 3: e_8 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_8.message }); throw e_8; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Sets the permissions for the specified container. The permissions indicate * whether blobs in a container may be accessed publicly. * * When you set permissions for a container, the existing permissions are replaced. * If no access or containerAcl provided, the existing container ACL will be * removed. * * When you establish a stored access policy on a container, it may take up to 30 seconds to take effect. * During this interval, a shared access signature that is associated with the stored access policy will * fail with status code 403 (Forbidden), until the access policy becomes active. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-container-acl * * @param access - The level of public access to data in the container. * @param containerAcl - Array of elements each having a unique Id and details of the access policy. * @param options - Options to Container Set Access Policy operation. */ ContainerClient.prototype.setAccessPolicy = function (access, containerAcl, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, acl, _i, _b, identifier, e_9; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: options.conditions = options.conditions || {}; _a = createSpan("ContainerClient-setAccessPolicy", options), span = _a.span, updatedOptions = _a.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); acl = []; for (_i = 0, _b = containerAcl || []; _i < _b.length; _i++) { identifier = _b[_i]; acl.push({ accessPolicy: { expiresOn: identifier.accessPolicy.expiresOn ? truncatedISO8061Date(identifier.accessPolicy.expiresOn) : "", permissions: identifier.accessPolicy.permissions, startsOn: identifier.accessPolicy.startsOn ? truncatedISO8061Date(identifier.accessPolicy.startsOn) : "" }, id: identifier.id }); } return [4 /*yield*/, this.containerContext.setAccessPolicy(tslib.__assign({ abortSignal: options.abortSignal, access: access, containerAcl: acl, leaseAccessConditions: options.conditions, modifiedAccessConditions: options.conditions }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _c.sent()]; case 3: e_9 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_9.message }); throw e_9; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Get a {@link BlobLeaseClient} that manages leases on the container. * * @param proposeLeaseId - Initial proposed lease Id. * @returns A new BlobLeaseClient object for managing leases on the container. */ ContainerClient.prototype.getBlobLeaseClient = function (proposeLeaseId) { return new BlobLeaseClient(this, proposeLeaseId); }; /** * Creates a new block blob, or updates the content of an existing block blob. * * Updating an existing block blob overwrites any existing metadata on the blob. * Partial updates are not supported; the content of the existing blob is * overwritten with the new content. To perform a partial update of a block blob's, * use {@link BlockBlobClient.stageBlock} and {@link BlockBlobClient.commitBlockList}. * * This is a non-parallel uploading method, please use {@link BlockBlobClient.uploadFile}, * {@link BlockBlobClient.uploadStream} or {@link BlockBlobClient.uploadBrowserData} for better * performance with concurrency uploading. * * @see https://docs.microsoft.com/rest/api/storageservices/put-blob * * @param blobName - Name of the block blob to create or update. * @param body - Blob, string, ArrayBuffer, ArrayBufferView or a function * which returns a new Readable stream whose offset is from data source beginning. * @param contentLength - Length of body in bytes. Use Buffer.byteLength() to calculate body length for a * string including non non-Base64/Hex-encoded characters. * @param options - Options to configure the Block Blob Upload operation. * @returns Block Blob upload response data and the corresponding BlockBlobClient instance. */ ContainerClient.prototype.uploadBlockBlob = function (blobName, body, contentLength, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, blockBlobClient, response, e_10; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("ContainerClient-uploadBlockBlob", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); blockBlobClient = this.getBlockBlobClient(blobName); return [4 /*yield*/, blockBlobClient.upload(body, contentLength, updatedOptions)]; case 2: response = _b.sent(); return [2 /*return*/, { blockBlobClient: blockBlobClient, response: response }]; case 3: e_10 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_10.message }); throw e_10; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Marks the specified blob or snapshot for deletion. The blob is later deleted * during garbage collection. Note that in order to delete a blob, you must delete * all of its snapshots. You can delete both at the same time with the Delete * Blob operation. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/delete-blob * * @param blobName - * @param options - Options to Blob Delete operation. * @returns Block blob deletion response data. */ ContainerClient.prototype.deleteBlob = function (blobName, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, blobClient, e_11; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("ContainerClient-deleteBlob", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); blobClient = this.getBlobClient(blobName); if (options.versionId) { blobClient = blobClient.withVersion(options.versionId); } return [4 /*yield*/, blobClient.delete(updatedOptions)]; case 2: return [2 /*return*/, _b.sent()]; case 3: e_11 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_11.message }); throw e_11; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * listBlobFlatSegment returns a single segment of blobs starting from the * specified Marker. Use an empty Marker to start enumeration from the beginning. * After getting a segment, process it, and then call listBlobsFlatSegment again * (passing the the previously-returned Marker) to get the next segment. * @see https://docs.microsoft.com/rest/api/storageservices/list-blobs * * @param marker - A string value that identifies the portion of the list to be returned with the next list operation. * @param options - Options to Container List Blob Flat Segment operation. */ ContainerClient.prototype.listBlobFlatSegment = function (marker, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, response, wrappedResponse, e_12; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("ContainerClient-listBlobFlatSegment", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.containerContext.listBlobFlatSegment(tslib.__assign(tslib.__assign({ marker: marker }, options), convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: response = _b.sent(); wrappedResponse = tslib.__assign(tslib.__assign({}, response), { _response: response._response, segment: tslib.__assign(tslib.__assign({}, response.segment), { blobItems: response.segment.blobItems.map(function (blobItemInteral) { var blobItem = tslib.__assign(tslib.__assign({}, blobItemInteral), { tags: toTags(blobItemInteral.blobTags), objectReplicationSourceProperties: parseObjectReplicationRecord(blobItemInteral.objectReplicationMetadata) }); return blobItem; }) }) }); return [2 /*return*/, wrappedResponse]; case 3: e_12 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_12.message }); throw e_12; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * listBlobHierarchySegment returns a single segment of blobs starting from * the specified Marker. Use an empty Marker to start enumeration from the * beginning. After getting a segment, process it, and then call listBlobsHierarchicalSegment * again (passing the the previously-returned Marker) to get the next segment. * @see https://docs.microsoft.com/rest/api/storageservices/list-blobs * * @param delimiter - The character or string used to define the virtual hierarchy * @param marker - A string value that identifies the portion of the list to be returned with the next list operation. * @param options - Options to Container List Blob Hierarchy Segment operation. */ ContainerClient.prototype.listBlobHierarchySegment = function (delimiter, marker, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, response, wrappedResponse, e_13; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("ContainerClient-listBlobHierarchySegment", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.containerContext.listBlobHierarchySegment(delimiter, tslib.__assign(tslib.__assign({ marker: marker }, options), convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: response = _b.sent(); wrappedResponse = tslib.__assign(tslib.__assign({}, response), { _response: response._response, segment: tslib.__assign(tslib.__assign({}, response.segment), { blobItems: response.segment.blobItems.map(function (blobItemInteral) { var blobItem = tslib.__assign(tslib.__assign({}, blobItemInteral), { tags: toTags(blobItemInteral.blobTags), objectReplicationSourceProperties: parseObjectReplicationRecord(blobItemInteral.objectReplicationMetadata) }); return blobItem; }) }) }); return [2 /*return*/, wrappedResponse]; case 3: e_13 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_13.message }); throw e_13; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Returns an AsyncIterableIterator for ContainerListBlobFlatSegmentResponse * * @param marker - A string value that identifies the portion of * the list of blobs to be returned with the next listing operation. The * operation returns the ContinuationToken value within the response body if the * listing operation did not return all blobs remaining to be listed * with the current page. The ContinuationToken value can be used as the value for * the marker parameter in a subsequent call to request the next page of list * items. The marker value is opaque to the client. * @param options - Options to list blobs operation. */ ContainerClient.prototype.listSegments = function (marker, options) { if (options === void 0) { options = {}; } return tslib.__asyncGenerator(this, arguments, function listSegments_1() { var listBlobsFlatSegmentResponse; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: if (!(!!marker || marker === undefined)) return [3 /*break*/, 7]; _a.label = 1; case 1: return [4 /*yield*/, tslib.__await(this.listBlobFlatSegment(marker, options))]; case 2: listBlobsFlatSegmentResponse = _a.sent(); marker = listBlobsFlatSegmentResponse.continuationToken; return [4 /*yield*/, tslib.__await(listBlobsFlatSegmentResponse)]; case 3: return [4 /*yield*/, tslib.__await.apply(void 0, [_a.sent()])]; case 4: return [4 /*yield*/, _a.sent()]; case 5: _a.sent(); _a.label = 6; case 6: if (marker) return [3 /*break*/, 1]; _a.label = 7; case 7: return [2 /*return*/]; } }); }); }; /** * Returns an AsyncIterableIterator of {@link BlobItem} objects * * @param options - Options to list blobs operation. */ ContainerClient.prototype.listItems = function (options) { if (options === void 0) { options = {}; } return tslib.__asyncGenerator(this, arguments, function listItems_1() { var marker, _a, _b, listBlobsFlatSegmentResponse, e_14_1; var e_14, _c; return tslib.__generator(this, function (_d) { switch (_d.label) { case 0: _d.trys.push([0, 7, 8, 13]); _a = tslib.__asyncValues(this.listSegments(marker, options)); _d.label = 1; case 1: return [4 /*yield*/, tslib.__await(_a.next())]; case 2: if (!(_b = _d.sent(), !_b.done)) return [3 /*break*/, 6]; listBlobsFlatSegmentResponse = _b.value; return [5 /*yield**/, tslib.__values(tslib.__asyncDelegator(tslib.__asyncValues(listBlobsFlatSegmentResponse.segment.blobItems)))]; case 3: return [4 /*yield*/, tslib.__await.apply(void 0, [_d.sent()])]; case 4: _d.sent(); _d.label = 5; case 5: return [3 /*break*/, 1]; case 6: return [3 /*break*/, 13]; case 7: e_14_1 = _d.sent(); e_14 = { error: e_14_1 }; return [3 /*break*/, 13]; case 8: _d.trys.push([8, , 11, 12]); if (!(_b && !_b.done && (_c = _a.return))) return [3 /*break*/, 10]; return [4 /*yield*/, tslib.__await(_c.call(_a))]; case 9: _d.sent(); _d.label = 10; case 10: return [3 /*break*/, 12]; case 11: if (e_14) throw e_14.error; return [7 /*endfinally*/]; case 12: return [7 /*endfinally*/]; case 13: return [2 /*return*/]; } }); }); }; /** * Returns an async iterable iterator to list all the blobs * under the specified account. * * .byPage() returns an async iterable iterator to list the blobs in pages. * * Example using `for await` syntax: * * ```js * // Get the containerClient before you run these snippets, * // Can be obtained from `blobServiceClient.getContainerClient("");` * let i = 1; * for await (const blob of containerClient.listBlobsFlat()) { * console.log(`Blob ${i++}: ${blob.name}`); * } * ``` * * Example using `iter.next()`: * * ```js * let i = 1; * let iter = containerClient.listBlobsFlat(); * let blobItem = await iter.next(); * while (!blobItem.done) { * console.log(`Blob ${i++}: ${blobItem.value.name}`); * blobItem = await iter.next(); * } * ``` * * Example using `byPage()`: * * ```js * // passing optional maxPageSize in the page settings * let i = 1; * for await (const response of containerClient.listBlobsFlat().byPage({ maxPageSize: 20 })) { * for (const blob of response.segment.blobItems) { * console.log(`Blob ${i++}: ${blob.name}`); * } * } * ``` * * Example using paging with a marker: * * ```js * let i = 1; * let iterator = containerClient.listBlobsFlat().byPage({ maxPageSize: 2 }); * let response = (await iterator.next()).value; * * // Prints 2 blob names * for (const blob of response.segment.blobItems) { * console.log(`Blob ${i++}: ${blob.name}`); * } * * // Gets next marker * let marker = response.continuationToken; * * // Passing next marker as continuationToken * * iterator = containerClient.listBlobsFlat().byPage({ continuationToken: marker, maxPageSize: 10 }); * response = (await iterator.next()).value; * * // Prints 10 blob names * for (const blob of response.segment.blobItems) { * console.log(`Blob ${i++}: ${blob.name}`); * } * ``` * * @param options - Options to list blobs. * @returns An asyncIterableIterator that supports paging. */ ContainerClient.prototype.listBlobsFlat = function (options) { var _a; var _this = this; if (options === void 0) { options = {}; } var include = []; if (options.includeCopy) { include.push("copy"); } if (options.includeDeleted) { include.push("deleted"); } if (options.includeMetadata) { include.push("metadata"); } if (options.includeSnapshots) { include.push("snapshots"); } if (options.includeVersions) { include.push("versions"); } if (options.includeUncommitedBlobs) { include.push("uncommittedblobs"); } if (options.includeTags) { include.push("tags"); } if (options.prefix === "") { options.prefix = undefined; } var updatedOptions = tslib.__assign(tslib.__assign({}, options), (include.length > 0 ? { include: include } : {})); // AsyncIterableIterator to iterate over blobs var iter = this.listItems(updatedOptions); return _a = { /** * The next method, part of the iteration protocol */ next: function () { return iter.next(); } }, /** * The connection to the async iterator, part of the iteration protocol */ _a[Symbol.asyncIterator] = function () { return this; }, /** * Return an AsyncIterableIterator that works a page at a time */ _a.byPage = function (settings) { if (settings === void 0) { settings = {}; } return _this.listSegments(settings.continuationToken, tslib.__assign({ maxPageSize: settings.maxPageSize }, updatedOptions)); }, _a; }; /** * Returns an AsyncIterableIterator for ContainerListBlobHierarchySegmentResponse * * @param delimiter - The character or string used to define the virtual hierarchy * @param marker - A string value that identifies the portion of * the list of blobs to be returned with the next listing operation. The * operation returns the ContinuationToken value within the response body if the * listing operation did not return all blobs remaining to be listed * with the current page. The ContinuationToken value can be used as the value for * the marker parameter in a subsequent call to request the next page of list * items. The marker value is opaque to the client. * @param options - Options to list blobs operation. */ ContainerClient.prototype.listHierarchySegments = function (delimiter, marker, options) { if (options === void 0) { options = {}; } return tslib.__asyncGenerator(this, arguments, function listHierarchySegments_1() { var listBlobsHierarchySegmentResponse; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: if (!(!!marker || marker === undefined)) return [3 /*break*/, 7]; _a.label = 1; case 1: return [4 /*yield*/, tslib.__await(this.listBlobHierarchySegment(delimiter, marker, options))]; case 2: listBlobsHierarchySegmentResponse = _a.sent(); marker = listBlobsHierarchySegmentResponse.continuationToken; return [4 /*yield*/, tslib.__await(listBlobsHierarchySegmentResponse)]; case 3: return [4 /*yield*/, tslib.__await.apply(void 0, [_a.sent()])]; case 4: return [4 /*yield*/, _a.sent()]; case 5: _a.sent(); _a.label = 6; case 6: if (marker) return [3 /*break*/, 1]; _a.label = 7; case 7: return [2 /*return*/]; } }); }); }; /** * Returns an AsyncIterableIterator for {@link BlobPrefix} and {@link BlobItem} objects. * * @param delimiter - The character or string used to define the virtual hierarchy * @param options - Options to list blobs operation. */ ContainerClient.prototype.listItemsByHierarchy = function (delimiter, options) { if (options === void 0) { options = {}; } return tslib.__asyncGenerator(this, arguments, function listItemsByHierarchy_1() { var marker, _a, _b, listBlobsHierarchySegmentResponse, segment, _i, _c, prefix, _d, _e, blob, e_15_1; var e_15, _f; return tslib.__generator(this, function (_g) { switch (_g.label) { case 0: _g.trys.push([0, 14, 15, 20]); _a = tslib.__asyncValues(this.listHierarchySegments(delimiter, marker, options)); _g.label = 1; case 1: return [4 /*yield*/, tslib.__await(_a.next())]; case 2: if (!(_b = _g.sent(), !_b.done)) return [3 /*break*/, 13]; listBlobsHierarchySegmentResponse = _b.value; segment = listBlobsHierarchySegmentResponse.segment; if (!segment.blobPrefixes) return [3 /*break*/, 7]; _i = 0, _c = segment.blobPrefixes; _g.label = 3; case 3: if (!(_i < _c.length)) return [3 /*break*/, 7]; prefix = _c[_i]; return [4 /*yield*/, tslib.__await(tslib.__assign({ kind: "prefix" }, prefix))]; case 4: return [4 /*yield*/, _g.sent()]; case 5: _g.sent(); _g.label = 6; case 6: _i++; return [3 /*break*/, 3]; case 7: _d = 0, _e = segment.blobItems; _g.label = 8; case 8: if (!(_d < _e.length)) return [3 /*break*/, 12]; blob = _e[_d]; return [4 /*yield*/, tslib.__await(tslib.__assign({ kind: "blob" }, blob))]; case 9: return [4 /*yield*/, _g.sent()]; case 10: _g.sent(); _g.label = 11; case 11: _d++; return [3 /*break*/, 8]; case 12: return [3 /*break*/, 1]; case 13: return [3 /*break*/, 20]; case 14: e_15_1 = _g.sent(); e_15 = { error: e_15_1 }; return [3 /*break*/, 20]; case 15: _g.trys.push([15, , 18, 19]); if (!(_b && !_b.done && (_f = _a.return))) return [3 /*break*/, 17]; return [4 /*yield*/, tslib.__await(_f.call(_a))]; case 16: _g.sent(); _g.label = 17; case 17: return [3 /*break*/, 19]; case 18: if (e_15) throw e_15.error; return [7 /*endfinally*/]; case 19: return [7 /*endfinally*/]; case 20: return [2 /*return*/]; } }); }); }; /** * Returns an async iterable iterator to list all the blobs by hierarchy. * under the specified account. * * .byPage() returns an async iterable iterator to list the blobs by hierarchy in pages. * * Example using `for await` syntax: * * ```js * for await (const item of containerClient.listBlobsByHierarchy("/")) { * if (item.kind === "prefix") { * console.log(`\tBlobPrefix: ${item.name}`); * } else { * console.log(`\tBlobItem: name - ${item.name}, last modified - ${item.properties.lastModified}`); * } * } * ``` * * Example using `iter.next()`: * * ```js * let iter = containerClient.listBlobsByHierarchy("/", { prefix: "prefix1/" }); * let entity = await iter.next(); * while (!entity.done) { * let item = entity.value; * if (item.kind === "prefix") { * console.log(`\tBlobPrefix: ${item.name}`); * } else { * console.log(`\tBlobItem: name - ${item.name}, last modified - ${item.properties.lastModified}`); * } * entity = await iter.next(); * } * ``` * * Example using `byPage()`: * * ```js * console.log("Listing blobs by hierarchy by page"); * for await (const response of containerClient.listBlobsByHierarchy("/").byPage()) { * const segment = response.segment; * if (segment.blobPrefixes) { * for (const prefix of segment.blobPrefixes) { * console.log(`\tBlobPrefix: ${prefix.name}`); * } * } * for (const blob of response.segment.blobItems) { * console.log(`\tBlobItem: name - ${blob.name}, last modified - ${blob.properties.lastModified}`); * } * } * ``` * * Example using paging with a max page size: * * ```js * console.log("Listing blobs by hierarchy by page, specifying a prefix and a max page size"); * * let i = 1; * for await (const response of containerClient.listBlobsByHierarchy("/", { prefix: "prefix2/sub1/"}).byPage({ maxPageSize: 2 })) { * console.log(`Page ${i++}`); * const segment = response.segment; * * if (segment.blobPrefixes) { * for (const prefix of segment.blobPrefixes) { * console.log(`\tBlobPrefix: ${prefix.name}`); * } * } * * for (const blob of response.segment.blobItems) { * console.log(`\tBlobItem: name - ${blob.name}, last modified - ${blob.properties.lastModified}`); * } * } * ``` * * @param delimiter - The character or string used to define the virtual hierarchy * @param options - Options to list blobs operation. */ ContainerClient.prototype.listBlobsByHierarchy = function (delimiter, options) { var _a; var _this = this; if (options === void 0) { options = {}; } if (delimiter === "") { throw new RangeError("delimiter should contain one or more characters"); } var include = []; if (options.includeCopy) { include.push("copy"); } if (options.includeDeleted) { include.push("deleted"); } if (options.includeMetadata) { include.push("metadata"); } if (options.includeSnapshots) { include.push("snapshots"); } if (options.includeVersions) { include.push("versions"); } if (options.includeUncommitedBlobs) { include.push("uncommittedblobs"); } if (options.includeTags) { include.push("tags"); } if (options.prefix === "") { options.prefix = undefined; } var updatedOptions = tslib.__assign(tslib.__assign({}, options), (include.length > 0 ? { include: include } : {})); // AsyncIterableIterator to iterate over blob prefixes and blobs var iter = this.listItemsByHierarchy(delimiter, updatedOptions); return _a = { /** * The next method, part of the iteration protocol */ next: function () { return tslib.__awaiter(this, void 0, void 0, function () { return tslib.__generator(this, function (_a) { return [2 /*return*/, iter.next()]; }); }); } }, /** * The connection to the async iterator, part of the iteration protocol */ _a[Symbol.asyncIterator] = function () { return this; }, /** * Return an AsyncIterableIterator that works a page at a time */ _a.byPage = function (settings) { if (settings === void 0) { settings = {}; } return _this.listHierarchySegments(delimiter, settings.continuationToken, tslib.__assign({ maxPageSize: settings.maxPageSize }, updatedOptions)); }, _a; }; ContainerClient.prototype.getContainerNameFromUrl = function () { var containerName; try { // URL may look like the following // "https://myaccount.blob.core.windows.net/mycontainer?sasString"; // "https://myaccount.blob.core.windows.net/mycontainer"; // IPv4/IPv6 address hosts, Endpoints - `http://127.0.0.1:10000/devstoreaccount1/containername` // http://localhost:10001/devstoreaccount1/containername var parsedUrl = coreHttp.URLBuilder.parse(this.url); if (parsedUrl.getHost().split(".")[1] === "blob") { // "https://myaccount.blob.core.windows.net/containername". // "https://customdomain.com/containername". // .getPath() -> /containername containerName = parsedUrl.getPath().split("/")[1]; } else if (isIpEndpointStyle(parsedUrl)) { // IPv4/IPv6 address hosts... Example - http://192.0.0.10:10001/devstoreaccount1/containername // Single word domain without a [dot] in the endpoint... Example - http://localhost:10001/devstoreaccount1/containername // .getPath() -> /devstoreaccount1/containername containerName = parsedUrl.getPath().split("/")[2]; } else { // "https://customdomain.com/containername". // .getPath() -> /containername containerName = parsedUrl.getPath().split("/")[1]; } // decode the encoded containerName - to get all the special characters that might be present in it containerName = decodeURIComponent(containerName); if (!containerName) { throw new Error("Provided containerName is invalid."); } return containerName; } catch (error) { throw new Error("Unable to extract containerName with provided information."); } }; /** * Only available for ContainerClient constructed with a shared key credential. * * Generates a Blob Container Service Shared Access Signature (SAS) URI based on the client properties * and parameters passed in. The SAS is signed by the shared key credential of the client. * * @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-a-service-sas * * @param options - Optional parameters. * @returns The SAS URI consisting of the URI to the resource represented by this client, followed by the generated SAS token. */ ContainerClient.prototype.generateSasUrl = function (options) { var _this = this; return new Promise(function (resolve) { if (!(_this.credential instanceof StorageSharedKeyCredential)) { throw new RangeError("Can only generate the SAS when the client is initialized with a shared key credential"); } var sas = generateBlobSASQueryParameters(tslib.__assign({ containerName: _this._containerName }, options), _this.credential).toString(); resolve(appendToURLQuery(_this.url, sas)); }); }; /** * Creates a BlobBatchClient object to conduct batch operations. * * @see https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch * * @returns A new BlobBatchClient object for this container. */ ContainerClient.prototype.getBlobBatchClient = function () { return new BlobBatchClient(this.url, this.pipeline); }; return ContainerClient; }(StorageClient)); // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * * This is a helper class to construct a string representing the permissions granted by an AccountSAS. Setting a value * to true means that any SAS which uses these permissions will grant permissions for that operation. Once all the * values are set, this should be serialized with toString and set as the permissions field on an * {@link AccountSASSignatureValues} object. It is possible to construct the permissions string without this class, but * the order of the permissions is particular and this class guarantees correctness. */ var AccountSASPermissions = /** @class */ (function () { function AccountSASPermissions() { /** * Permission to read resources and list queues and tables granted. */ this.read = false; /** * Permission to write resources granted. */ this.write = false; /** * Permission to create blobs and files granted. */ this.delete = false; /** * Permission to delete versions granted. */ this.deleteVersion = false; /** * Permission to list blob containers, blobs, shares, directories, and files granted. */ this.list = false; /** * Permission to add messages, table entities, and append to blobs granted. */ this.add = false; /** * Permission to create blobs and files granted. */ this.create = false; /** * Permissions to update messages and table entities granted. */ this.update = false; /** * Permission to get and delete messages granted. */ this.process = false; /** * Specfies Tag access granted. */ this.tag = false; /** * Permission to filter blobs. */ this.filter = false; } /** * Parse initializes the AccountSASPermissions fields from a string. * * @param permissions - */ AccountSASPermissions.parse = function (permissions) { var accountSASPermissions = new AccountSASPermissions(); for (var _i = 0, permissions_1 = permissions; _i < permissions_1.length; _i++) { var c = permissions_1[_i]; switch (c) { case "r": accountSASPermissions.read = true; break; case "w": accountSASPermissions.write = true; break; case "d": accountSASPermissions.delete = true; break; case "x": accountSASPermissions.deleteVersion = true; break; case "l": accountSASPermissions.list = true; break; case "a": accountSASPermissions.add = true; break; case "c": accountSASPermissions.create = true; break; case "u": accountSASPermissions.update = true; break; case "p": accountSASPermissions.process = true; break; case "t": accountSASPermissions.tag = true; break; case "f": accountSASPermissions.filter = true; break; default: throw new RangeError("Invalid permission character: " + c); } } return accountSASPermissions; }; /** * Creates a {@link AccountSASPermissions} from a raw object which contains same keys as it * and boolean values for them. * * @param permissionLike - */ AccountSASPermissions.from = function (permissionLike) { var accountSASPermissions = new AccountSASPermissions(); if (permissionLike.read) { accountSASPermissions.read = true; } if (permissionLike.write) { accountSASPermissions.write = true; } if (permissionLike.delete) { accountSASPermissions.delete = true; } if (permissionLike.deleteVersion) { accountSASPermissions.deleteVersion = true; } if (permissionLike.filter) { accountSASPermissions.filter = true; } if (permissionLike.tag) { accountSASPermissions.tag = true; } if (permissionLike.list) { accountSASPermissions.list = true; } if (permissionLike.add) { accountSASPermissions.add = true; } if (permissionLike.create) { accountSASPermissions.create = true; } if (permissionLike.update) { accountSASPermissions.update = true; } if (permissionLike.process) { accountSASPermissions.process = true; } return accountSASPermissions; }; /** * Produces the SAS permissions string for an Azure Storage account. * Call this method to set AccountSASSignatureValues Permissions field. * * Using this method will guarantee the resource types are in * an order accepted by the service. * * @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-an-account-sas * */ AccountSASPermissions.prototype.toString = function () { // The order of the characters should be as specified here to ensure correctness: // https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-an-account-sas // Use a string array instead of string concatenating += operator for performance var permissions = []; if (this.read) { permissions.push("r"); } if (this.write) { permissions.push("w"); } if (this.delete) { permissions.push("d"); } if (this.deleteVersion) { permissions.push("x"); } if (this.filter) { permissions.push("f"); } if (this.tag) { permissions.push("t"); } if (this.list) { permissions.push("l"); } if (this.add) { permissions.push("a"); } if (this.create) { permissions.push("c"); } if (this.update) { permissions.push("u"); } if (this.process) { permissions.push("p"); } return permissions.join(""); }; return AccountSASPermissions; }()); // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * * This is a helper class to construct a string representing the resources accessible by an AccountSAS. Setting a value * to true means that any SAS which uses these permissions will grant access to that resource type. Once all the * values are set, this should be serialized with toString and set as the resources field on an * {@link AccountSASSignatureValues} object. It is possible to construct the resources string without this class, but * the order of the resources is particular and this class guarantees correctness. */ var AccountSASResourceTypes = /** @class */ (function () { function AccountSASResourceTypes() { /** * Permission to access service level APIs granted. */ this.service = false; /** * Permission to access container level APIs (Blob Containers, Tables, Queues, File Shares) granted. */ this.container = false; /** * Permission to access object level APIs (Blobs, Table Entities, Queue Messages, Files) granted. */ this.object = false; } /** * Creates an {@link AccountSASResourceTypes} from the specified resource types string. This method will throw an * Error if it encounters a character that does not correspond to a valid resource type. * * @param resourceTypes - */ AccountSASResourceTypes.parse = function (resourceTypes) { var accountSASResourceTypes = new AccountSASResourceTypes(); for (var _i = 0, resourceTypes_1 = resourceTypes; _i < resourceTypes_1.length; _i++) { var c = resourceTypes_1[_i]; switch (c) { case "s": accountSASResourceTypes.service = true; break; case "c": accountSASResourceTypes.container = true; break; case "o": accountSASResourceTypes.object = true; break; default: throw new RangeError("Invalid resource type: " + c); } } return accountSASResourceTypes; }; /** * Converts the given resource types to a string. * * @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-an-account-sas * */ AccountSASResourceTypes.prototype.toString = function () { var resourceTypes = []; if (this.service) { resourceTypes.push("s"); } if (this.container) { resourceTypes.push("c"); } if (this.object) { resourceTypes.push("o"); } return resourceTypes.join(""); }; return AccountSASResourceTypes; }()); // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * * This is a helper class to construct a string representing the services accessible by an AccountSAS. Setting a value * to true means that any SAS which uses these permissions will grant access to that service. Once all the * values are set, this should be serialized with toString and set as the services field on an * {@link AccountSASSignatureValues} object. It is possible to construct the services string without this class, but * the order of the services is particular and this class guarantees correctness. */ var AccountSASServices = /** @class */ (function () { function AccountSASServices() { /** * Permission to access blob resources granted. */ this.blob = false; /** * Permission to access file resources granted. */ this.file = false; /** * Permission to access queue resources granted. */ this.queue = false; /** * Permission to access table resources granted. */ this.table = false; } /** * Creates an {@link AccountSASServices} from the specified services string. This method will throw an * Error if it encounters a character that does not correspond to a valid service. * * @param services - */ AccountSASServices.parse = function (services) { var accountSASServices = new AccountSASServices(); for (var _i = 0, services_1 = services; _i < services_1.length; _i++) { var c = services_1[_i]; switch (c) { case "b": accountSASServices.blob = true; break; case "f": accountSASServices.file = true; break; case "q": accountSASServices.queue = true; break; case "t": accountSASServices.table = true; break; default: throw new RangeError("Invalid service character: " + c); } } return accountSASServices; }; /** * Converts the given services to a string. * */ AccountSASServices.prototype.toString = function () { var services = []; if (this.blob) { services.push("b"); } if (this.table) { services.push("t"); } if (this.queue) { services.push("q"); } if (this.file) { services.push("f"); } return services.join(""); }; return AccountSASServices; }()); // Copyright (c) Microsoft Corporation. /** * ONLY AVAILABLE IN NODE.JS RUNTIME. * * Generates a {@link SASQueryParameters} object which contains all SAS query parameters needed to make an actual * REST request. * * @see https://docs.microsoft.com/en-us/rest/api/storageservices/constructing-an-account-sas * * @param accountSASSignatureValues - * @param sharedKeyCredential - */ function generateAccountSASQueryParameters(accountSASSignatureValues, sharedKeyCredential) { var version = accountSASSignatureValues.version ? accountSASSignatureValues.version : SERVICE_VERSION; if (accountSASSignatureValues.permissions && accountSASSignatureValues.permissions.deleteVersion && version < "2019-10-10") { throw RangeError("'version' must be >= '2019-10-10' when provided 'x' permission."); } if (accountSASSignatureValues.permissions && accountSASSignatureValues.permissions.tag && version < "2019-12-12") { throw RangeError("'version' must be >= '2019-12-12' when provided 't' permission."); } if (accountSASSignatureValues.permissions && accountSASSignatureValues.permissions.filter && version < "2019-12-12") { throw RangeError("'version' must be >= '2019-12-12' when provided 'f' permission."); } var parsedPermissions = AccountSASPermissions.parse(accountSASSignatureValues.permissions.toString()); var parsedServices = AccountSASServices.parse(accountSASSignatureValues.services).toString(); var parsedResourceTypes = AccountSASResourceTypes.parse(accountSASSignatureValues.resourceTypes).toString(); var stringToSign = [ sharedKeyCredential.accountName, parsedPermissions, parsedServices, parsedResourceTypes, accountSASSignatureValues.startsOn ? truncatedISO8061Date(accountSASSignatureValues.startsOn, false) : "", truncatedISO8061Date(accountSASSignatureValues.expiresOn, false), accountSASSignatureValues.ipRange ? ipRangeToString(accountSASSignatureValues.ipRange) : "", accountSASSignatureValues.protocol ? accountSASSignatureValues.protocol : "", version, "" // Account SAS requires an additional newline character ].join("\n"); var signature = sharedKeyCredential.computeHMACSHA256(stringToSign); return new SASQueryParameters(version, signature, parsedPermissions.toString(), parsedServices, parsedResourceTypes, accountSASSignatureValues.protocol, accountSASSignatureValues.startsOn, accountSASSignatureValues.expiresOn, accountSASSignatureValues.ipRange); } /** * A BlobServiceClient represents a Client to the Azure Storage Blob service allowing you * to manipulate blob containers. */ var BlobServiceClient = /** @class */ (function (_super) { tslib.__extends(BlobServiceClient, _super); function BlobServiceClient(url, credentialOrPipeline, options) { var _this = this; var pipeline; if (credentialOrPipeline instanceof Pipeline) { pipeline = credentialOrPipeline; } else if ((coreHttp.isNode && credentialOrPipeline instanceof StorageSharedKeyCredential) || credentialOrPipeline instanceof AnonymousCredential || coreHttp.isTokenCredential(credentialOrPipeline)) { pipeline = newPipeline(credentialOrPipeline, options); } else { // The second parameter is undefined. Use anonymous credential pipeline = newPipeline(new AnonymousCredential(), options); } _this = _super.call(this, url, pipeline) || this; _this.serviceContext = new Service(_this.storageClientContext); return _this; } /** * * Creates an instance of BlobServiceClient from connection string. * * @param connectionString - Account connection string or a SAS connection string of an Azure storage account. * [ Note - Account connection string can only be used in NODE.JS runtime. ] * Account connection string example - * `DefaultEndpointsProtocol=https;AccountName=myaccount;AccountKey=accountKey;EndpointSuffix=core.windows.net` * SAS connection string example - * `BlobEndpoint=https://myaccount.blob.core.windows.net/;QueueEndpoint=https://myaccount.queue.core.windows.net/;FileEndpoint=https://myaccount.file.core.windows.net/;TableEndpoint=https://myaccount.table.core.windows.net/;SharedAccessSignature=sasString` * @param options - Optional. Options to configure the HTTP pipeline. */ BlobServiceClient.fromConnectionString = function (connectionString, options) { options = options || {}; var extractedCreds = extractConnectionStringParts(connectionString); if (extractedCreds.kind === "AccountConnString") { { var sharedKeyCredential = new StorageSharedKeyCredential(extractedCreds.accountName, extractedCreds.accountKey); options.proxyOptions = coreHttp.getDefaultProxySettings(extractedCreds.proxyUri); var pipeline = newPipeline(sharedKeyCredential, options); return new BlobServiceClient(extractedCreds.url, pipeline); } } else if (extractedCreds.kind === "SASConnString") { var pipeline = newPipeline(new AnonymousCredential(), options); return new BlobServiceClient(extractedCreds.url + "?" + extractedCreds.accountSas, pipeline); } else { throw new Error("Connection string must be either an Account connection string or a SAS connection string"); } }; /** * Creates a {@link ContainerClient} object * * @param containerName - A container name * @returns A new ContainerClient object for the given container name. * * Example usage: * * ```js * const containerClient = blobServiceClient.getContainerClient(""); * ``` */ BlobServiceClient.prototype.getContainerClient = function (containerName) { return new ContainerClient(appendToURLPath(this.url, encodeURIComponent(containerName)), this.pipeline); }; /** * Create a Blob container. * * @param containerName - Name of the container to create. * @param options - Options to configure Container Create operation. * @returns Container creation response and the corresponding container client. */ BlobServiceClient.prototype.createContainer = function (containerName, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, containerClient, containerCreateResponse, e_1; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("BlobServiceClient-createContainer", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); containerClient = this.getContainerClient(containerName); return [4 /*yield*/, containerClient.create(updatedOptions)]; case 2: containerCreateResponse = _b.sent(); return [2 /*return*/, { containerClient: containerClient, containerCreateResponse: containerCreateResponse }]; case 3: e_1 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_1.message }); throw e_1; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Deletes a Blob container. * * @param containerName - Name of the container to delete. * @param options - Options to configure Container Delete operation. * @returns Container deletion response. */ BlobServiceClient.prototype.deleteContainer = function (containerName, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, containerClient, e_2; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("BlobServiceClient-deleteContainer", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); containerClient = this.getContainerClient(containerName); return [4 /*yield*/, containerClient.delete(updatedOptions)]; case 2: return [2 /*return*/, _b.sent()]; case 3: e_2 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_2.message }); throw e_2; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Restore a previously deleted Blob container. * This API is only functional if Container Soft Delete is enabled for the storage account associated with the container. * * @param deletedContainerName - Name of the previously deleted container. * @param deletedContainerVersion - Version of the previously deleted container, used to uniquely identify the deleted container. * @param options - Options to configure Container Restore operation. * @returns Container deletion response. */ BlobServiceClient.prototype.undeleteContainer = function (deletedContainerName, deletedContainerVersion, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, containerClient, containerContext, containerUndeleteResponse, e_3; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("BlobServiceClient-undeleteContainer", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); containerClient = this.getContainerClient(options.destinationContainerName || deletedContainerName); containerContext = new Container(containerClient["storageClientContext"]); return [4 /*yield*/, containerContext.restore(tslib.__assign({ deletedContainerName: deletedContainerName, deletedContainerVersion: deletedContainerVersion }, updatedOptions))]; case 2: containerUndeleteResponse = _b.sent(); return [2 /*return*/, { containerClient: containerClient, containerUndeleteResponse: containerUndeleteResponse }]; case 3: e_3 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_3.message }); throw e_3; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Rename an existing Blob Container. * * @param sourceContainerName - The name of the source container. * @param destinationContainerName - The new name of the container. * @param options - Options to configure Container Rename operation. */ // @ts-ignore Need to hide this interface for now. Make it public and turn on the live tests for it when the service is ready. BlobServiceClient.prototype.renameContainer = function (sourceContainerName, destinationContainerName, options) { var _a; if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _b, span, updatedOptions, containerClient, containerContext, containerRenameResponse, e_4; return tslib.__generator(this, function (_c) { switch (_c.label) { case 0: _b = createSpan("BlobServiceClient-renameContainer", options), span = _b.span, updatedOptions = _b.updatedOptions; _c.label = 1; case 1: _c.trys.push([1, 3, 4, 5]); containerClient = this.getContainerClient(destinationContainerName); containerContext = new Container(containerClient["storageClientContext"]); return [4 /*yield*/, containerContext.rename(sourceContainerName, tslib.__assign(tslib.__assign({}, updatedOptions), { sourceLeaseId: (_a = options.sourceCondition) === null || _a === void 0 ? void 0 : _a.leaseId }))]; case 2: containerRenameResponse = _c.sent(); return [2 /*return*/, { containerClient: containerClient, containerRenameResponse: containerRenameResponse }]; case 3: e_4 = _c.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_4.message }); throw e_4; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Gets the properties of a storage account’s Blob service, including properties * for Storage Analytics and CORS (Cross-Origin Resource Sharing) rules. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-service-properties * * @param options - Options to the Service Get Properties operation. * @returns Response data for the Service Get Properties operation. */ BlobServiceClient.prototype.getProperties = function (options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, e_5; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("BlobServiceClient-getProperties", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.serviceContext.getProperties(tslib.__assign({ abortSignal: options.abortSignal }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _b.sent()]; case 3: e_5 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_5.message }); throw e_5; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Sets properties for a storage account’s Blob service endpoint, including properties * for Storage Analytics, CORS (Cross-Origin Resource Sharing) rules and soft delete settings. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-service-properties * * @param properties - * @param options - Options to the Service Set Properties operation. * @returns Response data for the Service Set Properties operation. */ BlobServiceClient.prototype.setProperties = function (properties, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, e_6; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("BlobServiceClient-setProperties", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.serviceContext.setProperties(properties, tslib.__assign({ abortSignal: options.abortSignal }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _b.sent()]; case 3: e_6 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_6.message }); throw e_6; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Retrieves statistics related to replication for the Blob service. It is only * available on the secondary location endpoint when read-access geo-redundant * replication is enabled for the storage account. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-service-stats * * @param options - Options to the Service Get Statistics operation. * @returns Response data for the Service Get Statistics operation. */ BlobServiceClient.prototype.getStatistics = function (options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, e_7; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("BlobServiceClient-getStatistics", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.serviceContext.getStatistics(tslib.__assign({ abortSignal: options.abortSignal }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _b.sent()]; case 3: e_7 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_7.message }); throw e_7; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * The Get Account Information operation returns the sku name and account kind * for the specified account. * The Get Account Information operation is available on service versions beginning * with version 2018-03-28. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-account-information * * @param options - Options to the Service Get Account Info operation. * @returns Response data for the Service Get Account Info operation. */ BlobServiceClient.prototype.getAccountInfo = function (options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, e_8; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("BlobServiceClient-getAccountInfo", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.serviceContext.getAccountInfo(tslib.__assign({ abortSignal: options.abortSignal }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _b.sent()]; case 3: e_8 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_8.message }); throw e_8; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Returns a list of the containers under the specified account. * @see https://docs.microsoft.com/en-us/rest/api/storageservices/list-containers2 * * @param marker - A string value that identifies the portion of * the list of containers to be returned with the next listing operation. The * operation returns the continuationToken value within the response body if the * listing operation did not return all containers remaining to be listed * with the current page. The continuationToken value can be used as the value for * the marker parameter in a subsequent call to request the next page of list * items. The marker value is opaque to the client. * @param options - Options to the Service List Container Segment operation. * @returns Response data for the Service List Container Segment operation. */ BlobServiceClient.prototype.listContainersSegment = function (marker, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, e_9; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("BlobServiceClient-listContainersSegment", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.serviceContext.listContainersSegment(tslib.__assign(tslib.__assign(tslib.__assign({ abortSignal: options.abortSignal, marker: marker }, options), { include: typeof options.include === "string" ? [options.include] : options.include }), convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: return [2 /*return*/, _b.sent()]; case 3: e_9 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_9.message }); throw e_9; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * The Filter Blobs operation enables callers to list blobs across all containers whose tags * match a given search expression. Filter blobs searches across all containers within a * storage account but can be scoped within the expression to a single container. * * @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression. * The given expression must evaluate to true for a blob to be returned in the results. * The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter; * however, only a subset of the OData filter syntax is supported in the Blob service. * @param marker - A string value that identifies the portion of * the list of blobs to be returned with the next listing operation. The * operation returns the continuationToken value within the response body if the * listing operation did not return all blobs remaining to be listed * with the current page. The continuationToken value can be used as the value for * the marker parameter in a subsequent call to request the next page of list * items. The marker value is opaque to the client. * @param options - Options to find blobs by tags. */ BlobServiceClient.prototype.findBlobsByTagsSegment = function (tagFilterSqlExpression, marker, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, response, wrappedResponse, e_10; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("BlobServiceClient-findBlobsByTagsSegment", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.serviceContext.filterBlobs(tslib.__assign({ abortSignal: options.abortSignal, where: tagFilterSqlExpression, marker: marker, maxPageSize: options.maxPageSize }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: response = _b.sent(); wrappedResponse = tslib.__assign(tslib.__assign({}, response), { _response: response._response, blobs: response.blobs.map(function (blob) { var _a; var tagValue = ""; if (((_a = blob.tags) === null || _a === void 0 ? void 0 : _a.blobTagSet.length) === 1) { tagValue = blob.tags.blobTagSet[0].value; } return tslib.__assign(tslib.__assign({}, blob), { tags: toTags(blob.tags), tagValue: tagValue }); }) }); return [2 /*return*/, wrappedResponse]; case 3: e_10 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_10.message }); throw e_10; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Returns an AsyncIterableIterator for ServiceFindBlobsByTagsSegmentResponse. * * @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression. * The given expression must evaluate to true for a blob to be returned in the results. * The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter; * however, only a subset of the OData filter syntax is supported in the Blob service. * @param marker - A string value that identifies the portion of * the list of blobs to be returned with the next listing operation. The * operation returns the continuationToken value within the response body if the * listing operation did not return all blobs remaining to be listed * with the current page. The continuationToken value can be used as the value for * the marker parameter in a subsequent call to request the next page of list * items. The marker value is opaque to the client. * @param options - Options to find blobs by tags. */ BlobServiceClient.prototype.findBlobsByTagsSegments = function (tagFilterSqlExpression, marker, options) { if (options === void 0) { options = {}; } return tslib.__asyncGenerator(this, arguments, function findBlobsByTagsSegments_1() { var response; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: if (!(!!marker || marker === undefined)) return [3 /*break*/, 6]; _a.label = 1; case 1: return [4 /*yield*/, tslib.__await(this.findBlobsByTagsSegment(tagFilterSqlExpression, marker, options))]; case 2: response = _a.sent(); response.blobs = response.blobs || []; marker = response.continuationToken; return [4 /*yield*/, tslib.__await(response)]; case 3: return [4 /*yield*/, _a.sent()]; case 4: _a.sent(); _a.label = 5; case 5: if (marker) return [3 /*break*/, 1]; _a.label = 6; case 6: return [2 /*return*/]; } }); }); }; /** * Returns an AsyncIterableIterator for blobs. * * @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression. * The given expression must evaluate to true for a blob to be returned in the results. * The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter; * however, only a subset of the OData filter syntax is supported in the Blob service. * @param options - Options to findBlobsByTagsItems. */ BlobServiceClient.prototype.findBlobsByTagsItems = function (tagFilterSqlExpression, options) { if (options === void 0) { options = {}; } return tslib.__asyncGenerator(this, arguments, function findBlobsByTagsItems_1() { var marker, _a, _b, segment, e_11_1; var e_11, _c; return tslib.__generator(this, function (_d) { switch (_d.label) { case 0: _d.trys.push([0, 7, 8, 13]); _a = tslib.__asyncValues(this.findBlobsByTagsSegments(tagFilterSqlExpression, marker, options)); _d.label = 1; case 1: return [4 /*yield*/, tslib.__await(_a.next())]; case 2: if (!(_b = _d.sent(), !_b.done)) return [3 /*break*/, 6]; segment = _b.value; return [5 /*yield**/, tslib.__values(tslib.__asyncDelegator(tslib.__asyncValues(segment.blobs)))]; case 3: return [4 /*yield*/, tslib.__await.apply(void 0, [_d.sent()])]; case 4: _d.sent(); _d.label = 5; case 5: return [3 /*break*/, 1]; case 6: return [3 /*break*/, 13]; case 7: e_11_1 = _d.sent(); e_11 = { error: e_11_1 }; return [3 /*break*/, 13]; case 8: _d.trys.push([8, , 11, 12]); if (!(_b && !_b.done && (_c = _a.return))) return [3 /*break*/, 10]; return [4 /*yield*/, tslib.__await(_c.call(_a))]; case 9: _d.sent(); _d.label = 10; case 10: return [3 /*break*/, 12]; case 11: if (e_11) throw e_11.error; return [7 /*endfinally*/]; case 12: return [7 /*endfinally*/]; case 13: return [2 /*return*/]; } }); }); }; /** * Returns an async iterable iterator to find all blobs with specified tag * under the specified account. * * .byPage() returns an async iterable iterator to list the blobs in pages. * * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-service-properties * * Example using `for await` syntax: * * ```js * let i = 1; * for await (const blob of blobServiceClient.findBlobsByTags("tagkey='tagvalue'")) { * console.log(`Blob ${i++}: ${container.name}`); * } * ``` * * Example using `iter.next()`: * * ```js * let i = 1; * const iter = blobServiceClient.findBlobsByTags("tagkey='tagvalue'"); * let blobItem = await iter.next(); * while (!blobItem.done) { * console.log(`Blob ${i++}: ${blobItem.value.name}`); * blobItem = await iter.next(); * } * ``` * * Example using `byPage()`: * * ```js * // passing optional maxPageSize in the page settings * let i = 1; * for await (const response of blobServiceClient.findBlobsByTags("tagkey='tagvalue'").byPage({ maxPageSize: 20 })) { * if (response.blobs) { * for (const blob of response.blobs) { * console.log(`Blob ${i++}: ${blob.name}`); * } * } * } * ``` * * Example using paging with a marker: * * ```js * let i = 1; * let iterator = blobServiceClient.findBlobsByTags("tagkey='tagvalue'").byPage({ maxPageSize: 2 }); * let response = (await iterator.next()).value; * * // Prints 2 blob names * if (response.blobs) { * for (const blob of response.blobs) { * console.log(`Blob ${i++}: ${blob.name}`); * } * } * * // Gets next marker * let marker = response.continuationToken; * // Passing next marker as continuationToken * iterator = blobServiceClient * .findBlobsByTags("tagkey='tagvalue'") * .byPage({ continuationToken: marker, maxPageSize: 10 }); * response = (await iterator.next()).value; * * // Prints blob names * if (response.blobs) { * for (const blob of response.blobs) { * console.log(`Blob ${i++}: ${blob.name}`); * } * } * ``` * * @param tagFilterSqlExpression - The where parameter enables the caller to query blobs whose tags match a given expression. * The given expression must evaluate to true for a blob to be returned in the results. * The[OData - ABNF] filter syntax rule defines the formal grammar for the value of the where query parameter; * however, only a subset of the OData filter syntax is supported in the Blob service. * @param options - Options to find blobs by tags. */ BlobServiceClient.prototype.findBlobsByTags = function (tagFilterSqlExpression, options) { var _a; var _this = this; if (options === void 0) { options = {}; } // AsyncIterableIterator to iterate over blobs var listSegmentOptions = tslib.__assign({}, options); var iter = this.findBlobsByTagsItems(tagFilterSqlExpression, listSegmentOptions); return _a = { /** * The next method, part of the iteration protocol */ next: function () { return iter.next(); } }, /** * The connection to the async iterator, part of the iteration protocol */ _a[Symbol.asyncIterator] = function () { return this; }, /** * Return an AsyncIterableIterator that works a page at a time */ _a.byPage = function (settings) { if (settings === void 0) { settings = {}; } return _this.findBlobsByTagsSegments(tagFilterSqlExpression, settings.continuationToken, tslib.__assign({ maxPageSize: settings.maxPageSize }, listSegmentOptions)); }, _a; }; /** * Returns an AsyncIterableIterator for ServiceListContainersSegmentResponses * * @param marker - A string value that identifies the portion of * the list of containers to be returned with the next listing operation. The * operation returns the continuationToken value within the response body if the * listing operation did not return all containers remaining to be listed * with the current page. The continuationToken value can be used as the value for * the marker parameter in a subsequent call to request the next page of list * items. The marker value is opaque to the client. * @param options - Options to list containers operation. */ BlobServiceClient.prototype.listSegments = function (marker, options) { if (options === void 0) { options = {}; } return tslib.__asyncGenerator(this, arguments, function listSegments_1() { var listContainersSegmentResponse; return tslib.__generator(this, function (_a) { switch (_a.label) { case 0: if (!(!!marker || marker === undefined)) return [3 /*break*/, 7]; _a.label = 1; case 1: return [4 /*yield*/, tslib.__await(this.listContainersSegment(marker, options))]; case 2: listContainersSegmentResponse = _a.sent(); listContainersSegmentResponse.containerItems = listContainersSegmentResponse.containerItems || []; marker = listContainersSegmentResponse.continuationToken; return [4 /*yield*/, tslib.__await(listContainersSegmentResponse)]; case 3: return [4 /*yield*/, tslib.__await.apply(void 0, [_a.sent()])]; case 4: return [4 /*yield*/, _a.sent()]; case 5: _a.sent(); _a.label = 6; case 6: if (marker) return [3 /*break*/, 1]; _a.label = 7; case 7: return [2 /*return*/]; } }); }); }; /** * Returns an AsyncIterableIterator for Container Items * * @param options - Options to list containers operation. */ BlobServiceClient.prototype.listItems = function (options) { if (options === void 0) { options = {}; } return tslib.__asyncGenerator(this, arguments, function listItems_1() { var marker, _a, _b, segment, e_12_1; var e_12, _c; return tslib.__generator(this, function (_d) { switch (_d.label) { case 0: _d.trys.push([0, 7, 8, 13]); _a = tslib.__asyncValues(this.listSegments(marker, options)); _d.label = 1; case 1: return [4 /*yield*/, tslib.__await(_a.next())]; case 2: if (!(_b = _d.sent(), !_b.done)) return [3 /*break*/, 6]; segment = _b.value; return [5 /*yield**/, tslib.__values(tslib.__asyncDelegator(tslib.__asyncValues(segment.containerItems)))]; case 3: return [4 /*yield*/, tslib.__await.apply(void 0, [_d.sent()])]; case 4: _d.sent(); _d.label = 5; case 5: return [3 /*break*/, 1]; case 6: return [3 /*break*/, 13]; case 7: e_12_1 = _d.sent(); e_12 = { error: e_12_1 }; return [3 /*break*/, 13]; case 8: _d.trys.push([8, , 11, 12]); if (!(_b && !_b.done && (_c = _a.return))) return [3 /*break*/, 10]; return [4 /*yield*/, tslib.__await(_c.call(_a))]; case 9: _d.sent(); _d.label = 10; case 10: return [3 /*break*/, 12]; case 11: if (e_12) throw e_12.error; return [7 /*endfinally*/]; case 12: return [7 /*endfinally*/]; case 13: return [2 /*return*/]; } }); }); }; /** * Returns an async iterable iterator to list all the containers * under the specified account. * * .byPage() returns an async iterable iterator to list the containers in pages. * * Example using `for await` syntax: * * ```js * let i = 1; * for await (const container of blobServiceClient.listContainers()) { * console.log(`Container ${i++}: ${container.name}`); * } * ``` * * Example using `iter.next()`: * * ```js * let i = 1; * const iter = blobServiceClient.listContainers(); * let containerItem = await iter.next(); * while (!containerItem.done) { * console.log(`Container ${i++}: ${containerItem.value.name}`); * containerItem = await iter.next(); * } * ``` * * Example using `byPage()`: * * ```js * // passing optional maxPageSize in the page settings * let i = 1; * for await (const response of blobServiceClient.listContainers().byPage({ maxPageSize: 20 })) { * if (response.containerItems) { * for (const container of response.containerItems) { * console.log(`Container ${i++}: ${container.name}`); * } * } * } * ``` * * Example using paging with a marker: * * ```js * let i = 1; * let iterator = blobServiceClient.listContainers().byPage({ maxPageSize: 2 }); * let response = (await iterator.next()).value; * * // Prints 2 container names * if (response.containerItems) { * for (const container of response.containerItems) { * console.log(`Container ${i++}: ${container.name}`); * } * } * * // Gets next marker * let marker = response.continuationToken; * // Passing next marker as continuationToken * iterator = blobServiceClient * .listContainers() * .byPage({ continuationToken: marker, maxPageSize: 10 }); * response = (await iterator.next()).value; * * // Prints 10 container names * if (response.containerItems) { * for (const container of response.containerItems) { * console.log(`Container ${i++}: ${container.name}`); * } * } * ``` * * @param options - Options to list containers. * @returns An asyncIterableIterator that supports paging. */ BlobServiceClient.prototype.listContainers = function (options) { var _a; var _this = this; if (options === void 0) { options = {}; } if (options.prefix === "") { options.prefix = undefined; } var include = []; if (options.includeDeleted) { include.push("deleted"); } if (options.includeMetadata) { include.push("metadata"); } // AsyncIterableIterator to iterate over containers var listSegmentOptions = tslib.__assign(tslib.__assign({}, options), (include.length > 0 ? { include: include } : {})); var iter = this.listItems(listSegmentOptions); return _a = { /** * The next method, part of the iteration protocol */ next: function () { return iter.next(); } }, /** * The connection to the async iterator, part of the iteration protocol */ _a[Symbol.asyncIterator] = function () { return this; }, /** * Return an AsyncIterableIterator that works a page at a time */ _a.byPage = function (settings) { if (settings === void 0) { settings = {}; } return _this.listSegments(settings.continuationToken, tslib.__assign({ maxPageSize: settings.maxPageSize }, listSegmentOptions)); }, _a; }; /** * ONLY AVAILABLE WHEN USING BEARER TOKEN AUTHENTICATION (TokenCredential). * * Retrieves a user delegation key for the Blob service. This is only a valid operation when using * bearer token authentication. * * @see https://docs.microsoft.com/en-us/rest/api/storageservices/get-user-delegation-key * * @param startsOn - The start time for the user delegation SAS. Must be within 7 days of the current time * @param expiresOn - The end time for the user delegation SAS. Must be within 7 days of the current time */ BlobServiceClient.prototype.getUserDelegationKey = function (startsOn, expiresOn, options) { if (options === void 0) { options = {}; } return tslib.__awaiter(this, void 0, void 0, function () { var _a, span, updatedOptions, response, userDelegationKey, res, e_13; return tslib.__generator(this, function (_b) { switch (_b.label) { case 0: _a = createSpan("BlobServiceClient-getUserDelegationKey", options), span = _a.span, updatedOptions = _a.updatedOptions; _b.label = 1; case 1: _b.trys.push([1, 3, 4, 5]); return [4 /*yield*/, this.serviceContext.getUserDelegationKey({ startsOn: truncatedISO8061Date(startsOn, false), expiresOn: truncatedISO8061Date(expiresOn, false) }, tslib.__assign({ abortSignal: options.abortSignal }, convertTracingToRequestOptionsBase(updatedOptions)))]; case 2: response = _b.sent(); userDelegationKey = { signedObjectId: response.signedObjectId, signedTenantId: response.signedTenantId, signedStartsOn: new Date(response.signedStartsOn), signedExpiresOn: new Date(response.signedExpiresOn), signedService: response.signedService, signedVersion: response.signedVersion, value: response.value }; res = tslib.__assign({ _response: response._response, requestId: response.requestId, clientRequestId: response.clientRequestId, version: response.version, date: response.date, errorCode: response.errorCode }, userDelegationKey); return [2 /*return*/, res]; case 3: e_13 = _b.sent(); span.setStatus({ code: coreTracing.SpanStatusCode.ERROR, message: e_13.message }); throw e_13; case 4: span.end(); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }; /** * Creates a BlobBatchClient object to conduct batch operations. * * @see https://docs.microsoft.com/en-us/rest/api/storageservices/blob-batch * * @returns A new BlobBatchClient object for this service. */ BlobServiceClient.prototype.getBlobBatchClient = function () { return new BlobBatchClient(this.url, this.pipeline); }; /** * Only available for BlobServiceClient constructed with a shared key credential. * * Generates a Blob account Shared Access Signature (SAS) URI based on the client properties * and parameters passed in. The SAS is signed by the shared key credential of the client. * * @see https://docs.microsoft.com/en-us/rest/api/storageservices/create-account-sas * * @param expiresOn - Optional. The time at which the shared access signature becomes invalid. Default to an hour later if not provided. * @param permissions - Specifies the list of permissions to be associated with the SAS. * @param resourceTypes - Specifies the resource types associated with the shared access signature. * @param options - Optional parameters. * @returns An account SAS URI consisting of the URI to the resource represented by this client, followed by the generated SAS token. */ BlobServiceClient.prototype.generateAccountSasUrl = function (expiresOn, permissions, resourceTypes, options) { if (permissions === void 0) { permissions = AccountSASPermissions.parse("r"); } if (resourceTypes === void 0) { resourceTypes = "sco"; } if (options === void 0) { options = {}; } if (!(this.credential instanceof StorageSharedKeyCredential)) { throw RangeError("Can only generate the account SAS when the client is initialized with a shared key credential"); } if (expiresOn === undefined) { var now = new Date(); expiresOn = new Date(now.getTime() + 3600 * 1000); } var sas = generateAccountSASQueryParameters(tslib.__assign({ permissions: permissions, expiresOn: expiresOn, resourceTypes: resourceTypes, services: AccountSASServices.parse("b").toString() }, options), this.credential).toString(); return appendToURLQuery(this.url, sas); }; return BlobServiceClient; }(StorageClient)); Object.defineProperty(exports, "BaseRequestPolicy", ({ enumerable: true, get: function () { return coreHttp.BaseRequestPolicy; } })); Object.defineProperty(exports, "HttpHeaders", ({ enumerable: true, get: function () { return coreHttp.HttpHeaders; } })); Object.defineProperty(exports, "RequestPolicyOptions", ({ enumerable: true, get: function () { return coreHttp.RequestPolicyOptions; } })); Object.defineProperty(exports, "RestError", ({ enumerable: true, get: function () { return coreHttp.RestError; } })); Object.defineProperty(exports, "WebResource", ({ enumerable: true, get: function () { return coreHttp.WebResource; } })); Object.defineProperty(exports, "deserializationPolicy", ({ enumerable: true, get: function () { return coreHttp.deserializationPolicy; } })); exports.AccountSASPermissions = AccountSASPermissions; exports.AccountSASResourceTypes = AccountSASResourceTypes; exports.AccountSASServices = AccountSASServices; exports.AnonymousCredential = AnonymousCredential; exports.AnonymousCredentialPolicy = AnonymousCredentialPolicy; exports.AppendBlobClient = AppendBlobClient; exports.BlobBatch = BlobBatch; exports.BlobBatchClient = BlobBatchClient; exports.BlobClient = BlobClient; exports.BlobLeaseClient = BlobLeaseClient; exports.BlobSASPermissions = BlobSASPermissions; exports.BlobServiceClient = BlobServiceClient; exports.BlockBlobClient = BlockBlobClient; exports.ContainerClient = ContainerClient; exports.ContainerSASPermissions = ContainerSASPermissions; exports.Credential = Credential; exports.CredentialPolicy = CredentialPolicy; exports.PageBlobClient = PageBlobClient; exports.Pipeline = Pipeline; exports.SASQueryParameters = SASQueryParameters; exports.StorageBrowserPolicy = StorageBrowserPolicy; exports.StorageBrowserPolicyFactory = StorageBrowserPolicyFactory; exports.StorageOAuthScopes = StorageOAuthScopes; exports.StorageRetryPolicy = StorageRetryPolicy; exports.StorageRetryPolicyFactory = StorageRetryPolicyFactory; exports.StorageSharedKeyCredential = StorageSharedKeyCredential; exports.StorageSharedKeyCredentialPolicy = StorageSharedKeyCredentialPolicy; exports.generateAccountSASQueryParameters = generateAccountSASQueryParameters; exports.generateBlobSASQueryParameters = generateBlobSASQueryParameters; exports.logger = logger; exports.newPipeline = newPipeline; //# sourceMappingURL=index.js.map /***/ }), /***/ 7171: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var __spreadArrays = (this && this.__spreadArrays) || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ContextAPI = void 0; var NoopContextManager_1 = __nccwpck_require__(4118); var global_utils_1 = __nccwpck_require__(5135); var API_NAME = 'context'; var NOOP_CONTEXT_MANAGER = new NoopContextManager_1.NoopContextManager(); /** * Singleton object which represents the entry point to the OpenTelemetry Context API */ var ContextAPI = /** @class */ (function () { /** Empty private constructor prevents end users from constructing a new instance of the API */ function ContextAPI() { } /** Get the singleton instance of the Context API */ ContextAPI.getInstance = function () { if (!this._instance) { this._instance = new ContextAPI(); } return this._instance; }; /** * Set the current context manager. Returns the initialized context manager */ ContextAPI.prototype.setGlobalContextManager = function (contextManager) { global_utils_1.registerGlobal(API_NAME, contextManager); return contextManager; }; /** * Get the currently active context */ ContextAPI.prototype.active = function () { return this._getContextManager().active(); }; /** * Execute a function with an active context * * @param context context to be active during function execution * @param fn function to execute in a context * @param thisArg optional receiver to be used for calling fn * @param args optional arguments forwarded to fn */ ContextAPI.prototype.with = function (context, fn, thisArg) { var _a; var args = []; for (var _i = 3; _i < arguments.length; _i++) { args[_i - 3] = arguments[_i]; } return (_a = this._getContextManager()).with.apply(_a, __spreadArrays([context, fn, thisArg], args)); }; /** * Bind a context to a target function or event emitter * * @param target function or event emitter to bind * @param context context to bind to the event emitter or function. Defaults to the currently active context */ ContextAPI.prototype.bind = function (target, context) { if (context === void 0) { context = this.active(); } return this._getContextManager().bind(target, context); }; ContextAPI.prototype._getContextManager = function () { return global_utils_1.getGlobal(API_NAME) || NOOP_CONTEXT_MANAGER; }; /** Disable and remove the global context manager */ ContextAPI.prototype.disable = function () { this._getContextManager().disable(); global_utils_1.unregisterGlobal(API_NAME); }; return ContextAPI; }()); exports.ContextAPI = ContextAPI; //# sourceMappingURL=context.js.map /***/ }), /***/ 1877: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.DiagAPI = void 0; var logLevelLogger_1 = __nccwpck_require__(9639); var types_1 = __nccwpck_require__(8077); var global_utils_1 = __nccwpck_require__(5135); var API_NAME = 'diag'; /** * Singleton object which represents the entry point to the OpenTelemetry internal * diagnostic API */ var DiagAPI = /** @class */ (function () { /** * Private internal constructor * @private */ function DiagAPI() { function _logProxy(funcName) { return function () { var logger = global_utils_1.getGlobal('diag'); // shortcut if logger not set if (!logger) return; return logger[funcName].apply(logger, // work around Function.prototype.apply types // eslint-disable-next-line @typescript-eslint/no-explicit-any arguments); }; } // Using self local variable for minification purposes as 'this' cannot be minified var self = this; // DiagAPI specific functions self.setLogger = function (logger, logLevel) { var _a; if (logLevel === void 0) { logLevel = types_1.DiagLogLevel.INFO; } if (logger === self) { // There isn't much we can do here. // Logging to the console might break the user application. // Try to log to self. If a logger was previously registered it will receive the log. var err = new Error('Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation'); self.error((_a = err.stack) !== null && _a !== void 0 ? _a : err.message); return; } global_utils_1.registerGlobal('diag', logLevelLogger_1.createLogLevelDiagLogger(logLevel, logger), true); }; self.disable = function () { global_utils_1.unregisterGlobal(API_NAME); }; self.verbose = _logProxy('verbose'); self.debug = _logProxy('debug'); self.info = _logProxy('info'); self.warn = _logProxy('warn'); self.error = _logProxy('error'); } /** Get the singleton instance of the DiagAPI API */ DiagAPI.instance = function () { if (!this._instance) { this._instance = new DiagAPI(); } return this._instance; }; return DiagAPI; }()); exports.DiagAPI = DiagAPI; //# sourceMappingURL=diag.js.map /***/ }), /***/ 9909: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PropagationAPI = void 0; var NoopTextMapPropagator_1 = __nccwpck_require__(2368); var TextMapPropagator_1 = __nccwpck_require__(865); var global_utils_1 = __nccwpck_require__(5135); var API_NAME = 'propagation'; /** * Singleton object which represents the entry point to the OpenTelemetry Propagation API */ var PropagationAPI = /** @class */ (function () { /** Empty private constructor prevents end users from constructing a new instance of the API */ function PropagationAPI() { } /** Get the singleton instance of the Propagator API */ PropagationAPI.getInstance = function () { if (!this._instance) { this._instance = new PropagationAPI(); } return this._instance; }; /** * Set the current propagator. Returns the initialized propagator */ PropagationAPI.prototype.setGlobalPropagator = function (propagator) { global_utils_1.registerGlobal(API_NAME, propagator); return propagator; }; /** * Inject context into a carrier to be propagated inter-process * * @param context Context carrying tracing data to inject * @param carrier carrier to inject context into * @param setter Function used to set values on the carrier */ PropagationAPI.prototype.inject = function (context, carrier, setter) { if (setter === void 0) { setter = TextMapPropagator_1.defaultTextMapSetter; } return this._getGlobalPropagator().inject(context, carrier, setter); }; /** * Extract context from a carrier * * @param context Context which the newly created context will inherit from * @param carrier Carrier to extract context from * @param getter Function used to extract keys from a carrier */ PropagationAPI.prototype.extract = function (context, carrier, getter) { if (getter === void 0) { getter = TextMapPropagator_1.defaultTextMapGetter; } return this._getGlobalPropagator().extract(context, carrier, getter); }; /** * Return a list of all fields which may be used by the propagator. */ PropagationAPI.prototype.fields = function () { return this._getGlobalPropagator().fields(); }; /** Remove the global propagator */ PropagationAPI.prototype.disable = function () { global_utils_1.unregisterGlobal(API_NAME); }; PropagationAPI.prototype._getGlobalPropagator = function () { return global_utils_1.getGlobal(API_NAME) || NoopTextMapPropagator_1.NOOP_TEXT_MAP_PROPAGATOR; }; return PropagationAPI; }()); exports.PropagationAPI = PropagationAPI; //# sourceMappingURL=propagation.js.map /***/ }), /***/ 1539: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.TraceAPI = void 0; var ProxyTracerProvider_1 = __nccwpck_require__(2285); var spancontext_utils_1 = __nccwpck_require__(9745); var global_utils_1 = __nccwpck_require__(5135); var API_NAME = 'trace'; /** * Singleton object which represents the entry point to the OpenTelemetry Tracing API */ var TraceAPI = /** @class */ (function () { /** Empty private constructor prevents end users from constructing a new instance of the API */ function TraceAPI() { this._proxyTracerProvider = new ProxyTracerProvider_1.ProxyTracerProvider(); this.isSpanContextValid = spancontext_utils_1.isSpanContextValid; } /** Get the singleton instance of the Trace API */ TraceAPI.getInstance = function () { if (!this._instance) { this._instance = new TraceAPI(); } return this._instance; }; /** * Set the current global tracer. Returns the initialized global tracer provider */ TraceAPI.prototype.setGlobalTracerProvider = function (provider) { this._proxyTracerProvider.setDelegate(provider); global_utils_1.registerGlobal(API_NAME, this._proxyTracerProvider); return this._proxyTracerProvider; }; /** * Returns the global tracer provider. */ TraceAPI.prototype.getTracerProvider = function () { return global_utils_1.getGlobal(API_NAME) || this._proxyTracerProvider; }; /** * Returns a tracer from the global tracer provider. */ TraceAPI.prototype.getTracer = function (name, version) { return this.getTracerProvider().getTracer(name, version); }; /** Remove the global tracer provider */ TraceAPI.prototype.disable = function () { global_utils_1.unregisterGlobal(API_NAME); this._proxyTracerProvider = new ProxyTracerProvider_1.ProxyTracerProvider(); }; return TraceAPI; }()); exports.TraceAPI = TraceAPI; //# sourceMappingURL=trace.js.map /***/ }), /***/ 131: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); //# sourceMappingURL=Baggage.js.map /***/ }), /***/ 719: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); //# sourceMappingURL=Entry.js.map /***/ }), /***/ 4967: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.baggageEntryMetadataFromString = exports.createBaggage = void 0; var baggage_1 = __nccwpck_require__(8137); var symbol_1 = __nccwpck_require__(3542); __exportStar(__nccwpck_require__(131), exports); __exportStar(__nccwpck_require__(719), exports); /** * Create a new Baggage with optional entries * * @param entries An array of baggage entries the new baggage should contain */ function createBaggage(entries) { if (entries === void 0) { entries = {}; } return new baggage_1.BaggageImpl(new Map(Object.entries(entries))); } exports.createBaggage = createBaggage; /** * Create a serializable BaggageEntryMetadata object from a string. * * @param str string metadata. Format is currently not defined by the spec and has no special meaning. * */ function baggageEntryMetadataFromString(str) { if (typeof str !== 'string') { // @TODO log diagnostic str = ''; } return { __TYPE__: symbol_1.baggageEntryMetadataSymbol, toString: function () { return str; }, }; } exports.baggageEntryMetadataFromString = baggageEntryMetadataFromString; //# sourceMappingURL=index.js.map /***/ }), /***/ 8137: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.BaggageImpl = void 0; var BaggageImpl = /** @class */ (function () { function BaggageImpl(entries) { this._entries = entries ? new Map(entries) : new Map(); } BaggageImpl.prototype.getEntry = function (key) { var entry = this._entries.get(key); if (!entry) { return undefined; } return Object.assign({}, entry); }; BaggageImpl.prototype.getAllEntries = function () { return Array.from(this._entries.entries()).map(function (_a) { var k = _a[0], v = _a[1]; return [k, v]; }); }; BaggageImpl.prototype.setEntry = function (key, entry) { var newBaggage = new BaggageImpl(this._entries); newBaggage._entries.set(key, entry); return newBaggage; }; BaggageImpl.prototype.removeEntry = function (key) { var newBaggage = new BaggageImpl(this._entries); newBaggage._entries.delete(key); return newBaggage; }; BaggageImpl.prototype.removeEntries = function () { var keys = []; for (var _i = 0; _i < arguments.length; _i++) { keys[_i] = arguments[_i]; } var newBaggage = new BaggageImpl(this._entries); for (var _a = 0, keys_1 = keys; _a < keys_1.length; _a++) { var key = keys_1[_a]; newBaggage._entries.delete(key); } return newBaggage; }; BaggageImpl.prototype.clear = function () { return new BaggageImpl(); }; return BaggageImpl; }()); exports.BaggageImpl = BaggageImpl; //# sourceMappingURL=baggage.js.map /***/ }), /***/ 3542: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.baggageEntryMetadataSymbol = void 0; /** * Symbol used to make BaggageEntryMetadata an opaque type */ exports.baggageEntryMetadataSymbol = Symbol('BaggageEntryMetadata'); //# sourceMappingURL=symbol.js.map /***/ }), /***/ 4447: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); //# sourceMappingURL=Exception.js.map /***/ }), /***/ 2358: /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); //# sourceMappingURL=Time.js.map /***/ }), /***/ 4118: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var __spreadArrays = (this && this.__spreadArrays) || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.NoopContextManager = void 0; var context_1 = __nccwpck_require__(8242); var NoopContextManager = /** @class */ (function () { function NoopContextManager() { } NoopContextManager.prototype.active = function () { return context_1.ROOT_CONTEXT; }; NoopContextManager.prototype.with = function (_context, fn, thisArg) { var args = []; for (var _i = 3; _i < arguments.length; _i++) { args[_i - 3] = arguments[_i]; } return fn.call.apply(fn, __spreadArrays([thisArg], args)); }; NoopContextManager.prototype.bind = function (target, _context) { return target; }; NoopContextManager.prototype.enable = function () { return this; }; NoopContextManager.prototype.disable = function () { return this; }; return NoopContextManager; }()); exports.NoopContextManager = NoopContextManager; //# sourceMappingURL=NoopContextManager.js.map /***/ }), /***/ 8242: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ROOT_CONTEXT = exports.createContextKey = exports.setBaggage = exports.getBaggage = exports.isInstrumentationSuppressed = exports.unsuppressInstrumentation = exports.suppressInstrumentation = exports.getSpanContext = exports.setSpanContext = exports.setSpan = exports.getSpan = void 0; var NoopSpan_1 = __nccwpck_require__(1169); /** * span key */ var SPAN_KEY = createContextKey('OpenTelemetry Context Key SPAN'); /** * Shared key for indicating if instrumentation should be suppressed beyond * this current scope. */ var SUPPRESS_INSTRUMENTATION_KEY = createContextKey('OpenTelemetry Context Key SUPPRESS_INSTRUMENTATION'); /** * Baggage key */ var BAGGAGE_KEY = createContextKey('OpenTelemetry Baggage Key'); /** * Return the span if one exists * * @param context context to get span from */ function getSpan(context) { return context.getValue(SPAN_KEY) || undefined; } exports.getSpan = getSpan; /** * Set the span on a context * * @param context context to use as parent * @param span span to set active */ function setSpan(context, span) { return context.setValue(SPAN_KEY, span); } exports.setSpan = setSpan; /** * Wrap span context in a NoopSpan and set as span in a new * context * * @param context context to set active span on * @param spanContext span context to be wrapped */ function setSpanContext(context, spanContext) { return setSpan(context, new NoopSpan_1.NoopSpan(spanContext)); } exports.setSpanContext = setSpanContext; /** * Get the span context of the span if it exists. * * @param context context to get values from */ function getSpanContext(context) { var _a; return (_a = getSpan(context)) === null || _a === void 0 ? void 0 : _a.context(); } exports.getSpanContext = getSpanContext; /** * Sets value on context to indicate that instrumentation should * be suppressed beyond this current scope. * * @param context context to set the suppress instrumentation value on. */ function suppressInstrumentation(context) { return context.setValue(SUPPRESS_INSTRUMENTATION_KEY, true); } exports.suppressInstrumentation = suppressInstrumentation; /** * Sets value on context to indicate that instrumentation should * no-longer be suppressed beyond this current scope. * * @param context context to set the suppress instrumentation value on. */ function unsuppressInstrumentation(context) { return context.setValue(SUPPRESS_INSTRUMENTATION_KEY, false); } exports.unsuppressInstrumentation = unsuppressInstrumentation; /** * Return current suppress instrumentation value for the given context, * if it exists. * * @param context context check for the suppress instrumentation value. */ function isInstrumentationSuppressed(context) { return Boolean(context.getValue(SUPPRESS_INSTRUMENTATION_KEY)); } exports.isInstrumentationSuppressed = isInstrumentationSuppressed; /** * @param {Context} Context that manage all context values * @returns {Baggage} Extracted baggage from the context */ function getBaggage(context) { return context.getValue(BAGGAGE_KEY) || undefined; } exports.getBaggage = getBaggage; /** * @param {Context} Context that manage all context values * @param {Baggage} baggage that will be set in the actual context */ function setBaggage(context, baggage) { return context.setValue(BAGGAGE_KEY, baggage); } exports.setBaggage = setBaggage; /** Get a key to uniquely identify a context value */ function createContextKey(description) { return Symbol.for(description); } exports.createContextKey = createContextKey; var BaseContext = /** @class */ (function () { /** * Construct a new context which inherits values from an optional parent context. * * @param parentContext a context from which to inherit values */ function BaseContext(parentContext) { // for minification var self = this; self._currentContext = parentContext ? new Map(parentContext) : new Map(); self.getValue = function (key) { return self._currentContext.get(key); }; self.setValue = function (key, value) { var context = new BaseContext(self._currentContext); context._currentContext.set(key, value); return context; }; self.deleteValue = function (key) { var context = new BaseContext(self._currentContext); context._currentContext.delete(key); return context; }; } return BaseContext; }()); /** The root context is used as the default parent context when there is no active context */ exports.ROOT_CONTEXT = new BaseContext(); //# sourceMappingURL=context.js.map /***/ }), /***/ 6504: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); //# sourceMappingURL=types.js.map /***/ }), /***/ 3041: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.DiagConsoleLogger = void 0; var consoleMap = [ { n: 'error', c: 'error' }, { n: 'warn', c: 'warn' }, { n: 'info', c: 'info' }, { n: 'debug', c: 'debug' }, { n: 'verbose', c: 'trace' }, ]; /** * A simple Immutable Console based diagnostic logger which will output any messages to the Console. * If you want to limit the amount of logging to a specific level or lower use the * {@link createLogLevelDiagLogger} */ var DiagConsoleLogger = /** @class */ (function () { function DiagConsoleLogger() { function _consoleFunc(funcName) { return function () { var orgArguments = arguments; if (console) { // Some environments only expose the console when the F12 developer console is open var theFunc = console[funcName]; if (typeof theFunc !== 'function') { // Not all environments support all functions theFunc = console.log; } // One last final check if (typeof theFunc === 'function') { return theFunc.apply(console, orgArguments); } } }; } for (var i = 0; i < consoleMap.length; i++) { this[consoleMap[i].n] = _consoleFunc(consoleMap[i].c); } } return DiagConsoleLogger; }()); exports.DiagConsoleLogger = DiagConsoleLogger; //# sourceMappingURL=consoleLogger.js.map /***/ }), /***/ 1634: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", ({ value: true })); __exportStar(__nccwpck_require__(3041), exports); __exportStar(__nccwpck_require__(8077), exports); //# sourceMappingURL=index.js.map /***/ }), /***/ 9639: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.createLogLevelDiagLogger = void 0; var types_1 = __nccwpck_require__(8077); function createLogLevelDiagLogger(maxLevel, logger) { if (maxLevel < types_1.DiagLogLevel.NONE) { maxLevel = types_1.DiagLogLevel.NONE; } else if (maxLevel > types_1.DiagLogLevel.ALL) { maxLevel = types_1.DiagLogLevel.ALL; } // In case the logger is null or undefined logger = logger || {}; function _filterFunc(funcName, theLevel) { var theFunc = logger[funcName]; if (typeof theFunc === 'function' && maxLevel >= theLevel) { return theFunc.bind(logger); } return function () { }; } return { error: _filterFunc('error', types_1.DiagLogLevel.ERROR), warn: _filterFunc('warn', types_1.DiagLogLevel.WARN), info: _filterFunc('info', types_1.DiagLogLevel.INFO), debug: _filterFunc('debug', types_1.DiagLogLevel.DEBUG), verbose: _filterFunc('verbose', types_1.DiagLogLevel.VERBOSE), }; } exports.createLogLevelDiagLogger = createLogLevelDiagLogger; //# sourceMappingURL=logLevelLogger.js.map /***/ }), /***/ 8077: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.DiagLogLevel = void 0; /** * Defines the available internal logging levels for the diagnostic logger, the numeric values * of the levels are defined to match the original values from the initial LogLevel to avoid * compatibility/migration issues for any implementation that assume the numeric ordering. */ var DiagLogLevel; (function (DiagLogLevel) { /** Diagnostic Logging level setting to disable all logging (except and forced logs) */ DiagLogLevel[DiagLogLevel["NONE"] = 0] = "NONE"; /** Identifies an error scenario */ DiagLogLevel[DiagLogLevel["ERROR"] = 30] = "ERROR"; /** Identifies a warning scenario */ DiagLogLevel[DiagLogLevel["WARN"] = 50] = "WARN"; /** General informational log message */ DiagLogLevel[DiagLogLevel["INFO"] = 60] = "INFO"; /** General debug log message */ DiagLogLevel[DiagLogLevel["DEBUG"] = 70] = "DEBUG"; /** * Detailed trace level logging should only be used for development, should only be set * in a development environment. */ DiagLogLevel[DiagLogLevel["VERBOSE"] = 80] = "VERBOSE"; /** Used to set the logging level to include all logging */ DiagLogLevel[DiagLogLevel["ALL"] = 9999] = "ALL"; })(DiagLogLevel = exports.DiagLogLevel || (exports.DiagLogLevel = {})); //# sourceMappingURL=types.js.map /***/ }), /***/ 5163: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.diag = exports.propagation = exports.trace = exports.context = exports.isValidSpanId = exports.isValidTraceId = exports.isSpanContextValid = exports.INVALID_SPAN_CONTEXT = exports.INVALID_TRACEID = exports.INVALID_SPANID = void 0; __exportStar(__nccwpck_require__(4967), exports); __exportStar(__nccwpck_require__(4447), exports); __exportStar(__nccwpck_require__(2358), exports); __exportStar(__nccwpck_require__(1634), exports); __exportStar(__nccwpck_require__(2368), exports); __exportStar(__nccwpck_require__(865), exports); __exportStar(__nccwpck_require__(7492), exports); __exportStar(__nccwpck_require__(4595), exports); __exportStar(__nccwpck_require__(9373), exports); __exportStar(__nccwpck_require__(4023), exports); __exportStar(__nccwpck_require__(7606), exports); __exportStar(__nccwpck_require__(3259), exports); __exportStar(__nccwpck_require__(3503), exports); __exportStar(__nccwpck_require__(2285), exports); __exportStar(__nccwpck_require__(9671), exports); __exportStar(__nccwpck_require__(3209), exports); __exportStar(__nccwpck_require__(5769), exports); __exportStar(__nccwpck_require__(1424), exports); __exportStar(__nccwpck_require__(4416), exports); __exportStar(__nccwpck_require__(955), exports); __exportStar(__nccwpck_require__(8845), exports); __exportStar(__nccwpck_require__(6025), exports); __exportStar(__nccwpck_require__(6905), exports); __exportStar(__nccwpck_require__(8384), exports); __exportStar(__nccwpck_require__(891), exports); __exportStar(__nccwpck_require__(3168), exports); var spancontext_utils_1 = __nccwpck_require__(9745); Object.defineProperty(exports, "INVALID_SPANID", ({ enumerable: true, get: function () { return spancontext_utils_1.INVALID_SPANID; } })); Object.defineProperty(exports, "INVALID_TRACEID", ({ enumerable: true, get: function () { return spancontext_utils_1.INVALID_TRACEID; } })); Object.defineProperty(exports, "INVALID_SPAN_CONTEXT", ({ enumerable: true, get: function () { return spancontext_utils_1.INVALID_SPAN_CONTEXT; } })); Object.defineProperty(exports, "isSpanContextValid", ({ enumerable: true, get: function () { return spancontext_utils_1.isSpanContextValid; } })); Object.defineProperty(exports, "isValidTraceId", ({ enumerable: true, get: function () { return spancontext_utils_1.isValidTraceId; } })); Object.defineProperty(exports, "isValidSpanId", ({ enumerable: true, get: function () { return spancontext_utils_1.isValidSpanId; } })); __exportStar(__nccwpck_require__(8242), exports); __exportStar(__nccwpck_require__(4118), exports); __exportStar(__nccwpck_require__(6504), exports); var context_1 = __nccwpck_require__(7171); /** Entrypoint for context API */ exports.context = context_1.ContextAPI.getInstance(); var trace_1 = __nccwpck_require__(1539); /** Entrypoint for trace API */ exports.trace = trace_1.TraceAPI.getInstance(); var propagation_1 = __nccwpck_require__(9909); /** Entrypoint for propagation API */ exports.propagation = propagation_1.PropagationAPI.getInstance(); var diag_1 = __nccwpck_require__(1877); /** * Entrypoint for Diag API. * Defines Diagnostic handler used for internal diagnostic logging operations. * The default provides a Noop DiagLogger implementation which may be changed via the * diag.setLogger(logger: DiagLogger) function. */ exports.diag = diag_1.DiagAPI.instance(); exports.default = { trace: exports.trace, context: exports.context, propagation: exports.propagation, diag: exports.diag, }; //# sourceMappingURL=index.js.map /***/ }), /***/ 5135: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.unregisterGlobal = exports.getGlobal = exports.registerGlobal = void 0; var __1 = __nccwpck_require__(5163); var platform_1 = __nccwpck_require__(9957); var version_1 = __nccwpck_require__(8996); var semver_1 = __nccwpck_require__(1522); var major = version_1.VERSION.split('.')[0]; var GLOBAL_OPENTELEMETRY_API_KEY = Symbol.for("io.opentelemetry.js.api." + major); var _global = platform_1._globalThis; function registerGlobal(type, instance, allowOverride) { var _a; if (allowOverride === void 0) { allowOverride = false; } _global[GLOBAL_OPENTELEMETRY_API_KEY] = (_a = _global[GLOBAL_OPENTELEMETRY_API_KEY]) !== null && _a !== void 0 ? _a : { version: version_1.VERSION, }; var api = _global[GLOBAL_OPENTELEMETRY_API_KEY]; if (!allowOverride && api[type]) { // already registered an API of this type var err = new Error("@opentelemetry/api: Attempted duplicate registration of API: " + type); __1.diag.error(err.stack || err.message); return; } if (api.version !== version_1.VERSION) { // All registered APIs must be of the same version exactly var err = new Error('@opentelemetry/api: All API registration versions must match'); __1.diag.error(err.stack || err.message); return; } api[type] = instance; } exports.registerGlobal = registerGlobal; function getGlobal(type) { var _a, _b; var globalVersion = (_a = _global[GLOBAL_OPENTELEMETRY_API_KEY]) === null || _a === void 0 ? void 0 : _a.version; if (!globalVersion || !semver_1.isCompatible(globalVersion)) { return; } return (_b = _global[GLOBAL_OPENTELEMETRY_API_KEY]) === null || _b === void 0 ? void 0 : _b[type]; } exports.getGlobal = getGlobal; function unregisterGlobal(type) { var api = _global[GLOBAL_OPENTELEMETRY_API_KEY]; if (api) { delete api[type]; } } exports.unregisterGlobal = unregisterGlobal; //# sourceMappingURL=global-utils.js.map /***/ }), /***/ 1522: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.isCompatible = exports._makeCompatibilityCheck = void 0; var version_1 = __nccwpck_require__(8996); var re = /^(\d+)\.(\d+)\.(\d+)(?:-(.*))?$/; /** * Create a function to test an API version to see if it is compatible with the provided ownVersion. * * The returned function has the following semantics: * - Exact match is always compatible * - Major versions must match exactly * - 1.x package cannot use global 2.x package * - 2.x package cannot use global 1.x package * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API * - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects * - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3 * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor * - Patch and build tag differences are not considered at this time * * @param ownVersion version which should be checked against */ function _makeCompatibilityCheck(ownVersion) { var acceptedVersions = new Set([ownVersion]); var rejectedVersions = new Set(); var myVersionMatch = ownVersion.match(re); if (!myVersionMatch) { // we cannot guarantee compatibility so we always return noop return function () { return false; }; } var ownVersionParsed = { major: +myVersionMatch[1], minor: +myVersionMatch[2], patch: +myVersionMatch[3], }; function _reject(v) { rejectedVersions.add(v); return false; } function _accept(v) { acceptedVersions.add(v); return true; } return function isCompatible(globalVersion) { if (acceptedVersions.has(globalVersion)) { return true; } if (rejectedVersions.has(globalVersion)) { return false; } var globalVersionMatch = globalVersion.match(re); if (!globalVersionMatch) { // cannot parse other version // we cannot guarantee compatibility so we always noop return _reject(globalVersion); } var globalVersionParsed = { major: +globalVersionMatch[1], minor: +globalVersionMatch[2], patch: +globalVersionMatch[3], }; // major versions must match if (ownVersionParsed.major !== globalVersionParsed.major) { return _reject(globalVersion); } if (ownVersionParsed.major === 0) { if (ownVersionParsed.minor === globalVersionParsed.minor && ownVersionParsed.patch <= globalVersionParsed.patch) { return _accept(globalVersion); } return _reject(globalVersion); } if (ownVersionParsed.minor <= globalVersionParsed.minor) { return _accept(globalVersion); } return _reject(globalVersion); }; } exports._makeCompatibilityCheck = _makeCompatibilityCheck; /** * Test an API version to see if it is compatible with this API. * * - Exact match is always compatible * - Major versions must match exactly * - 1.x package cannot use global 2.x package * - 2.x package cannot use global 1.x package * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API * - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects * - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3 * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor * - Patch and build tag differences are not considered at this time * * @param version version of the API requesting an instance of the global API */ exports.isCompatible = _makeCompatibilityCheck(version_1.VERSION); //# sourceMappingURL=semver.js.map /***/ }), /***/ 9957: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", ({ value: true })); __exportStar(__nccwpck_require__(7200), exports); //# sourceMappingURL=index.js.map /***/ }), /***/ 9406: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports._globalThis = void 0; /** only globals that common to node and browsers are allowed */ // eslint-disable-next-line node/no-unsupported-features/es-builtins exports._globalThis = typeof globalThis === 'object' ? globalThis : global; //# sourceMappingURL=globalThis.js.map /***/ }), /***/ 7200: /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", ({ value: true })); __exportStar(__nccwpck_require__(9406), exports); //# sourceMappingURL=index.js.map /***/ }), /***/ 2368: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.NOOP_TEXT_MAP_PROPAGATOR = exports.NoopTextMapPropagator = void 0; /** * No-op implementations of {@link TextMapPropagator}. */ var NoopTextMapPropagator = /** @class */ (function () { function NoopTextMapPropagator() { } /** Noop inject function does nothing */ NoopTextMapPropagator.prototype.inject = function (_context, _carrier) { }; /** Noop extract function does nothing and returns the input context */ NoopTextMapPropagator.prototype.extract = function (context, _carrier) { return context; }; NoopTextMapPropagator.prototype.fields = function () { return []; }; return NoopTextMapPropagator; }()); exports.NoopTextMapPropagator = NoopTextMapPropagator; exports.NOOP_TEXT_MAP_PROPAGATOR = new NoopTextMapPropagator(); //# sourceMappingURL=NoopTextMapPropagator.js.map /***/ }), /***/ 865: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.defaultTextMapSetter = exports.defaultTextMapGetter = void 0; exports.defaultTextMapGetter = { get: function (carrier, key) { if (carrier == null) { return undefined; } return carrier[key]; }, keys: function (carrier) { if (carrier == null) { return []; } return Object.keys(carrier); }, }; exports.defaultTextMapSetter = { set: function (carrier, key, value) { if (carrier == null) { return; } carrier[key] = value; }, }; //# sourceMappingURL=TextMapPropagator.js.map /***/ }), /***/ 4595: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); //# sourceMappingURL=Event.js.map /***/ }), /***/ 1169: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.NoopSpan = void 0; var spancontext_utils_1 = __nccwpck_require__(9745); /** * The NoopSpan is the default {@link Span} that is used when no Span * implementation is available. All operations are no-op including context * propagation. */ var NoopSpan = /** @class */ (function () { function NoopSpan(_spanContext) { if (_spanContext === void 0) { _spanContext = spancontext_utils_1.INVALID_SPAN_CONTEXT; } this._spanContext = _spanContext; } // Returns a SpanContext. NoopSpan.prototype.context = function () { return this._spanContext; }; // By default does nothing NoopSpan.prototype.setAttribute = function (_key, _value) { return this; }; // By default does nothing NoopSpan.prototype.setAttributes = function (_attributes) { return this; }; // By default does nothing NoopSpan.prototype.addEvent = function (_name, _attributes) { return this; }; // By default does nothing NoopSpan.prototype.setStatus = function (_status) { return this; }; // By default does nothing NoopSpan.prototype.updateName = function (_name) { return this; }; // By default does nothing NoopSpan.prototype.end = function (_endTime) { }; // isRecording always returns false for noopSpan. NoopSpan.prototype.isRecording = function () { return false; }; // By default does nothing NoopSpan.prototype.recordException = function (_exception, _time) { }; return NoopSpan; }()); exports.NoopSpan = NoopSpan; //# sourceMappingURL=NoopSpan.js.map /***/ }), /***/ 7606: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.NOOP_TRACER = exports.NoopTracer = void 0; var context_1 = __nccwpck_require__(8242); var NoopSpan_1 = __nccwpck_require__(1169); var spancontext_utils_1 = __nccwpck_require__(9745); /** * No-op implementations of {@link Tracer}. */ var NoopTracer = /** @class */ (function () { function NoopTracer() { } // startSpan starts a noop span. NoopTracer.prototype.startSpan = function (name, options, context) { var root = Boolean(options === null || options === void 0 ? void 0 : options.root); if (root) { return new NoopSpan_1.NoopSpan(); } var parentFromContext = context && context_1.getSpanContext(context); if (isSpanContext(parentFromContext) && spancontext_utils_1.isSpanContextValid(parentFromContext)) { return new NoopSpan_1.NoopSpan(parentFromContext); } else { return new NoopSpan_1.NoopSpan(); } }; return NoopTracer; }()); exports.NoopTracer = NoopTracer; function isSpanContext(spanContext) { return (typeof spanContext === 'object' && typeof spanContext['spanId'] === 'string' && typeof spanContext['traceId'] === 'string' && typeof spanContext['traceFlags'] === 'number'); } exports.NOOP_TRACER = new NoopTracer(); //# sourceMappingURL=NoopTracer.js.map /***/ }), /***/ 3259: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.NOOP_TRACER_PROVIDER = exports.NoopTracerProvider = void 0; var NoopTracer_1 = __nccwpck_require__(7606); /** * An implementation of the {@link TracerProvider} which returns an impotent * Tracer for all calls to `getTracer`. * * All operations are no-op. */ var NoopTracerProvider = /** @class */ (function () { function NoopTracerProvider() { } NoopTracerProvider.prototype.getTracer = function (_name, _version) { return NoopTracer_1.NOOP_TRACER; }; return NoopTracerProvider; }()); exports.NoopTracerProvider = NoopTracerProvider; exports.NOOP_TRACER_PROVIDER = new NoopTracerProvider(); //# sourceMappingURL=NoopTracerProvider.js.map /***/ }), /***/ 3503: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ProxyTracer = void 0; var NoopTracer_1 = __nccwpck_require__(7606); /** * Proxy tracer provided by the proxy tracer provider */ var ProxyTracer = /** @class */ (function () { function ProxyTracer(_provider, name, version) { this._provider = _provider; this.name = name; this.version = version; } ProxyTracer.prototype.startSpan = function (name, options, context) { return this._getTracer().startSpan(name, options, context); }; /** * Try to get a tracer from the proxy tracer provider. * If the proxy tracer provider has no delegate, return a noop tracer. */ ProxyTracer.prototype._getTracer = function () { if (this._delegate) { return this._delegate; } var tracer = this._provider.getDelegateTracer(this.name, this.version); if (!tracer) { return NoopTracer_1.NOOP_TRACER; } this._delegate = tracer; return this._delegate; }; return ProxyTracer; }()); exports.ProxyTracer = ProxyTracer; //# sourceMappingURL=ProxyTracer.js.map /***/ }), /***/ 2285: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ProxyTracerProvider = void 0; var ProxyTracer_1 = __nccwpck_require__(3503); var NoopTracerProvider_1 = __nccwpck_require__(3259); /** * Tracer provider which provides {@link ProxyTracer}s. * * Before a delegate is set, tracers provided are NoOp. * When a delegate is set, traces are provided from the delegate. * When a delegate is set after tracers have already been provided, * all tracers already provided will use the provided delegate implementation. */ var ProxyTracerProvider = /** @class */ (function () { function ProxyTracerProvider() { } /** * Get a {@link ProxyTracer} */ ProxyTracerProvider.prototype.getTracer = function (name, version) { var _a; return ((_a = this.getDelegateTracer(name, version)) !== null && _a !== void 0 ? _a : new ProxyTracer_1.ProxyTracer(this, name, version)); }; ProxyTracerProvider.prototype.getDelegate = function () { var _a; return (_a = this._delegate) !== null && _a !== void 0 ? _a : NoopTracerProvider_1.NOOP_TRACER_PROVIDER; }; /** * Set the delegate tracer provider */ ProxyTracerProvider.prototype.setDelegate = function (delegate) { this._delegate = delegate; }; ProxyTracerProvider.prototype.getDelegateTracer = function (name, version) { var _a; return (_a = this._delegate) === null || _a === void 0 ? void 0 : _a.getTracer(name, version); }; return ProxyTracerProvider; }()); exports.ProxyTracerProvider = ProxyTracerProvider; //# sourceMappingURL=ProxyTracerProvider.js.map /***/ }), /***/ 9671: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); //# sourceMappingURL=Sampler.js.map /***/ }), /***/ 3209: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.SamplingDecision = void 0; /** * A sampling decision that determines how a {@link Span} will be recorded * and collected. */ var SamplingDecision; (function (SamplingDecision) { /** * `Span.isRecording() === false`, span will not be recorded and all events * and attributes will be dropped. */ SamplingDecision[SamplingDecision["NOT_RECORD"] = 0] = "NOT_RECORD"; /** * `Span.isRecording() === true`, but `Sampled` flag in {@link TraceFlags} * MUST NOT be set. */ SamplingDecision[SamplingDecision["RECORD"] = 1] = "RECORD"; /** * `Span.isRecording() === true` AND `Sampled` flag in {@link TraceFlags} * MUST be set. */ SamplingDecision[SamplingDecision["RECORD_AND_SAMPLED"] = 2] = "RECORD_AND_SAMPLED"; })(SamplingDecision = exports.SamplingDecision || (exports.SamplingDecision = {})); //# sourceMappingURL=SamplingResult.js.map /***/ }), /***/ 955: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); //# sourceMappingURL=SpanOptions.js.map /***/ }), /***/ 6025: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); //# sourceMappingURL=TimedEvent.js.map /***/ }), /***/ 7492: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); //# sourceMappingURL=attributes.js.map /***/ }), /***/ 4023: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); //# sourceMappingURL=link.js.map /***/ }), /***/ 9373: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); //# sourceMappingURL=link_context.js.map /***/ }), /***/ 4416: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); //# sourceMappingURL=span.js.map /***/ }), /***/ 5769: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); //# sourceMappingURL=span_context.js.map /***/ }), /***/ 1424: /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.SpanKind = void 0; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var SpanKind; (function (SpanKind) { /** Default value. Indicates that the span is used internally. */ SpanKind[SpanKind["INTERNAL"] = 0] = "INTERNAL"; /** * Indicates that the span covers server-side handling of an RPC or other * remote request. */ SpanKind[SpanKind["SERVER"] = 1] = "SERVER"; /** * Indicates that the span covers the client-side wrapper around an RPC or * other remote request. */ SpanKind[SpanKind["CLIENT"] = 2] = "CLIENT"; /** * Indicates that the span describes producer sending a message to a * broker. Unlike client and server, there is no direct critical path latency * relationship between producer and consumer spans. */ SpanKind[SpanKind["PRODUCER"] = 3] = "PRODUCER"; /** * Indicates that the span describes consumer receiving a message from a * broker. Unlike client and server, there is no direct critical path latency * relationship between producer and consumer spans. */ SpanKind[SpanKind["CONSUMER"] = 4] = "CONSUMER"; })(SpanKind = exports.SpanKind || (exports.SpanKind = {})); //# sourceMappingURL=span_kind.js.map /***/ }), /***/ 9745: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.isSpanContextValid = exports.isValidSpanId = exports.isValidTraceId = exports.INVALID_SPAN_CONTEXT = exports.INVALID_TRACEID = exports.INVALID_SPANID = void 0; var trace_flags_1 = __nccwpck_require__(6905); var VALID_TRACEID_REGEX = /^([0-9a-f]{32})$/i; var VALID_SPANID_REGEX = /^[0-9a-f]{16}$/i; exports.INVALID_SPANID = '0000000000000000'; exports.INVALID_TRACEID = '00000000000000000000000000000000'; exports.INVALID_SPAN_CONTEXT = { traceId: exports.INVALID_TRACEID, spanId: exports.INVALID_SPANID, traceFlags: trace_flags_1.TraceFlags.NONE, }; function isValidTraceId(traceId) { return VALID_TRACEID_REGEX.test(traceId) && traceId !== exports.INVALID_TRACEID; } exports.isValidTraceId = isValidTraceId; function isValidSpanId(spanId) { return VALID_SPANID_REGEX.test(spanId) && spanId !== exports.INVALID_SPANID; } exports.isValidSpanId = isValidSpanId; /** * Returns true if this {@link SpanContext} is valid. * @return true if this {@link SpanContext} is valid. */ function isSpanContextValid(spanContext) { return (isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId)); } exports.isSpanContextValid = isSpanContextValid; //# sourceMappingURL=spancontext-utils.js.map /***/ }), /***/ 8845: /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.SpanStatusCode = void 0; /** * An enumeration of status codes. */ var SpanStatusCode; (function (SpanStatusCode) { /** * The default status. */ SpanStatusCode[SpanStatusCode["UNSET"] = 0] = "UNSET"; /** * The operation has been validated by an Application developer or * Operator to have completed successfully. */ SpanStatusCode[SpanStatusCode["OK"] = 1] = "OK"; /** * The operation contains an error. */ SpanStatusCode[SpanStatusCode["ERROR"] = 2] = "ERROR"; })(SpanStatusCode = exports.SpanStatusCode || (exports.SpanStatusCode = {})); //# sourceMappingURL=status.js.map /***/ }), /***/ 6905: /***/ ((__unused_webpack_module, exports) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.TraceFlags = void 0; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var TraceFlags; (function (TraceFlags) { /** Represents no flag set. */ TraceFlags[TraceFlags["NONE"] = 0] = "NONE"; /** Bit to represent whether trace is sampled in trace flags. */ TraceFlags[TraceFlags["SAMPLED"] = 1] = "SAMPLED"; })(TraceFlags = exports.TraceFlags || (exports.TraceFlags = {})); //# sourceMappingURL=trace_flags.js.map /***/ }), /***/ 8384: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); //# sourceMappingURL=trace_state.js.map /***/ }), /***/ 3168: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); //# sourceMappingURL=tracer.js.map /***/ }), /***/ 891: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); //# sourceMappingURL=tracer_provider.js.map /***/ }), /***/ 8996: /***/ ((__unused_webpack_module, exports) => { "use strict"; /* * Copyright The OpenTelemetry Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", ({ value: true })); exports.VERSION = void 0; // this is autogenerated file, see scripts/version-update.js exports.VERSION = '1.0.0-rc.0'; //# sourceMappingURL=version.js.map /***/ }), /***/ 4812: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { module.exports = { parallel : __nccwpck_require__(8210), serial : __nccwpck_require__(445), serialOrdered : __nccwpck_require__(3578) }; /***/ }), /***/ 1700: /***/ ((module) => { // API module.exports = abort; /** * Aborts leftover active jobs * * @param {object} state - current state object */ function abort(state) { Object.keys(state.jobs).forEach(clean.bind(state)); // reset leftover jobs state.jobs = {}; } /** * Cleans up leftover job by invoking abort function for the provided job id * * @this state * @param {string|number} key - job id to abort */ function clean(key) { if (typeof this.jobs[key] == 'function') { this.jobs[key](); } } /***/ }), /***/ 2794: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { var defer = __nccwpck_require__(5295); // API module.exports = async; /** * Runs provided callback asynchronously * even if callback itself is not * * @param {function} callback - callback to invoke * @returns {function} - augmented callback */ function async(callback) { var isAsync = false; // check if async happened defer(function() { isAsync = true; }); return function async_callback(err, result) { if (isAsync) { callback(err, result); } else { defer(function nextTick_callback() { callback(err, result); }); } }; } /***/ }), /***/ 5295: /***/ ((module) => { module.exports = defer; /** * Runs provided function on next iteration of the event loop * * @param {function} fn - function to run */ function defer(fn) { var nextTick = typeof setImmediate == 'function' ? setImmediate : ( typeof process == 'object' && typeof process.nextTick == 'function' ? process.nextTick : null ); if (nextTick) { nextTick(fn); } else { setTimeout(fn, 0); } } /***/ }), /***/ 9023: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { var async = __nccwpck_require__(2794) , abort = __nccwpck_require__(1700) ; // API module.exports = iterate; /** * Iterates over each job object * * @param {array|object} list - array or object (named list) to iterate over * @param {function} iterator - iterator to run * @param {object} state - current job status * @param {function} callback - invoked when all elements processed */ function iterate(list, iterator, state, callback) { // store current index var key = state['keyedList'] ? state['keyedList'][state.index] : state.index; state.jobs[key] = runJob(iterator, key, list[key], function(error, output) { // don't repeat yourself // skip secondary callbacks if (!(key in state.jobs)) { return; } // clean up jobs delete state.jobs[key]; if (error) { // don't process rest of the results // stop still active jobs // and reset the list abort(state); } else { state.results[key] = output; } // return salvaged results callback(error, state.results); }); } /** * Runs iterator over provided job element * * @param {function} iterator - iterator to invoke * @param {string|number} key - key/index of the element in the list of jobs * @param {mixed} item - job description * @param {function} callback - invoked after iterator is done with the job * @returns {function|mixed} - job abort function or something else */ function runJob(iterator, key, item, callback) { var aborter; // allow shortcut if iterator expects only two arguments if (iterator.length == 2) { aborter = iterator(item, async(callback)); } // otherwise go with full three arguments else { aborter = iterator(item, key, async(callback)); } return aborter; } /***/ }), /***/ 2474: /***/ ((module) => { // API module.exports = state; /** * Creates initial state object * for iteration over list * * @param {array|object} list - list to iterate over * @param {function|null} sortMethod - function to use for keys sort, * or `null` to keep them as is * @returns {object} - initial state object */ function state(list, sortMethod) { var isNamedList = !Array.isArray(list) , initState = { index : 0, keyedList: isNamedList || sortMethod ? Object.keys(list) : null, jobs : {}, results : isNamedList ? {} : [], size : isNamedList ? Object.keys(list).length : list.length } ; if (sortMethod) { // sort array keys based on it's values // sort object's keys just on own merit initState.keyedList.sort(isNamedList ? sortMethod : function(a, b) { return sortMethod(list[a], list[b]); }); } return initState; } /***/ }), /***/ 7942: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { var abort = __nccwpck_require__(1700) , async = __nccwpck_require__(2794) ; // API module.exports = terminator; /** * Terminates jobs in the attached state context * * @this AsyncKitState# * @param {function} callback - final callback to invoke after termination */ function terminator(callback) { if (!Object.keys(this.jobs).length) { return; } // fast forward iteration index this.index = this.size; // abort jobs abort(this); // send back results we have so far async(callback)(null, this.results); } /***/ }), /***/ 8210: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { var iterate = __nccwpck_require__(9023) , initState = __nccwpck_require__(2474) , terminator = __nccwpck_require__(7942) ; // Public API module.exports = parallel; /** * Runs iterator over provided array elements in parallel * * @param {array|object} list - array or object (named list) to iterate over * @param {function} iterator - iterator to run * @param {function} callback - invoked when all elements processed * @returns {function} - jobs terminator */ function parallel(list, iterator, callback) { var state = initState(list); while (state.index < (state['keyedList'] || list).length) { iterate(list, iterator, state, function(error, result) { if (error) { callback(error, result); return; } // looks like it's the last one if (Object.keys(state.jobs).length === 0) { callback(null, state.results); return; } }); state.index++; } return terminator.bind(state, callback); } /***/ }), /***/ 445: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { var serialOrdered = __nccwpck_require__(3578); // Public API module.exports = serial; /** * Runs iterator over provided array elements in series * * @param {array|object} list - array or object (named list) to iterate over * @param {function} iterator - iterator to run * @param {function} callback - invoked when all elements processed * @returns {function} - jobs terminator */ function serial(list, iterator, callback) { return serialOrdered(list, iterator, null, callback); } /***/ }), /***/ 3578: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { var iterate = __nccwpck_require__(9023) , initState = __nccwpck_require__(2474) , terminator = __nccwpck_require__(7942) ; // Public API module.exports = serialOrdered; // sorting helpers module.exports.ascending = ascending; module.exports.descending = descending; /** * Runs iterator over provided sorted array elements in series * * @param {array|object} list - array or object (named list) to iterate over * @param {function} iterator - iterator to run * @param {function} sortMethod - custom sort function * @param {function} callback - invoked when all elements processed * @returns {function} - jobs terminator */ function serialOrdered(list, iterator, sortMethod, callback) { var state = initState(list, sortMethod); iterate(list, iterator, state, function iteratorHandler(error, result) { if (error) { callback(error, result); return; } state.index++; // are we there yet? if (state.index < (state['keyedList'] || list).length) { iterate(list, iterator, state, iteratorHandler); return; } // done here callback(null, state.results); }); return terminator.bind(state, callback); } /* * -- Sort methods */ /** * sort helper to sort array elements in ascending order * * @param {mixed} a - an item to compare * @param {mixed} b - an item to compare * @returns {number} - comparison result */ function ascending(a, b) { return a < b ? -1 : a > b ? 1 : 0; } /** * sort helper to sort array elements in descending order * * @param {mixed} a - an item to compare * @param {mixed} b - an item to compare * @returns {number} - comparison result */ function descending(a, b) { return -1 * ascending(a, b); } /***/ }), /***/ 9417: /***/ ((module) => { "use strict"; module.exports = balanced; function balanced(a, b, str) { if (a instanceof RegExp) a = maybeMatch(a, str); if (b instanceof RegExp) b = maybeMatch(b, str); var r = range(a, b, str); return r && { start: r[0], end: r[1], pre: str.slice(0, r[0]), body: str.slice(r[0] + a.length, r[1]), post: str.slice(r[1] + b.length) }; } function maybeMatch(reg, str) { var m = str.match(reg); return m ? m[0] : null; } balanced.range = range; function range(a, b, str) { var begs, beg, left, right, result; var ai = str.indexOf(a); var bi = str.indexOf(b, ai + 1); var i = ai; if (ai >= 0 && bi > 0) { if(a===b) { return [ai, bi]; } begs = []; left = str.length; while (i >= 0 && !result) { if (i == ai) { begs.push(i); ai = str.indexOf(a, i + 1); } else if (begs.length == 1) { result = [ begs.pop(), bi ]; } else { beg = begs.pop(); if (beg < left) { left = beg; right = bi; } bi = str.indexOf(b, i + 1); } i = ai < bi && ai >= 0 ? ai : bi; } if (begs.length) { result = [ left, right ]; } } return result; } /***/ }), /***/ 3717: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { var concatMap = __nccwpck_require__(6891); var balanced = __nccwpck_require__(9417); module.exports = expandTop; var escSlash = '\0SLASH'+Math.random()+'\0'; var escOpen = '\0OPEN'+Math.random()+'\0'; var escClose = '\0CLOSE'+Math.random()+'\0'; var escComma = '\0COMMA'+Math.random()+'\0'; var escPeriod = '\0PERIOD'+Math.random()+'\0'; function numeric(str) { return parseInt(str, 10) == str ? parseInt(str, 10) : str.charCodeAt(0); } function escapeBraces(str) { return str.split('\\\\').join(escSlash) .split('\\{').join(escOpen) .split('\\}').join(escClose) .split('\\,').join(escComma) .split('\\.').join(escPeriod); } function unescapeBraces(str) { return str.split(escSlash).join('\\') .split(escOpen).join('{') .split(escClose).join('}') .split(escComma).join(',') .split(escPeriod).join('.'); } // Basically just str.split(","), but handling cases // where we have nested braced sections, which should be // treated as individual members, like {a,{b,c},d} function parseCommaParts(str) { if (!str) return ['']; var parts = []; var m = balanced('{', '}', str); if (!m) return str.split(','); var pre = m.pre; var body = m.body; var post = m.post; var p = pre.split(','); p[p.length-1] += '{' + body + '}'; var postParts = parseCommaParts(post); if (post.length) { p[p.length-1] += postParts.shift(); p.push.apply(p, postParts); } parts.push.apply(parts, p); return parts; } function expandTop(str) { if (!str) return []; // I don't know why Bash 4.3 does this, but it does. // Anything starting with {} will have the first two bytes preserved // but *only* at the top level, so {},a}b will not expand to anything, // but a{},b}c will be expanded to [a}c,abc]. // One could argue that this is a bug in Bash, but since the goal of // this module is to match Bash's rules, we escape a leading {} if (str.substr(0, 2) === '{}') { str = '\\{\\}' + str.substr(2); } return expand(escapeBraces(str), true).map(unescapeBraces); } function identity(e) { return e; } function embrace(str) { return '{' + str + '}'; } function isPadded(el) { return /^-?0\d/.test(el); } function lte(i, y) { return i <= y; } function gte(i, y) { return i >= y; } function expand(str, isTop) { var expansions = []; var m = balanced('{', '}', str); if (!m || /\$$/.test(m.pre)) return [str]; var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); var isSequence = isNumericSequence || isAlphaSequence; var isOptions = m.body.indexOf(',') >= 0; if (!isSequence && !isOptions) { // {a},b} if (m.post.match(/,.*\}/)) { str = m.pre + '{' + m.body + escClose + m.post; return expand(str); } return [str]; } var n; if (isSequence) { n = m.body.split(/\.\./); } else { n = parseCommaParts(m.body); if (n.length === 1) { // x{{a,b}}y ==> x{a}y x{b}y n = expand(n[0], false).map(embrace); if (n.length === 1) { var post = m.post.length ? expand(m.post, false) : ['']; return post.map(function(p) { return m.pre + n[0] + p; }); } } } // at this point, n is the parts, and we know it's not a comma set // with a single entry. // no need to expand pre, since it is guaranteed to be free of brace-sets var pre = m.pre; var post = m.post.length ? expand(m.post, false) : ['']; var N; if (isSequence) { var x = numeric(n[0]); var y = numeric(n[1]); var width = Math.max(n[0].length, n[1].length) var incr = n.length == 3 ? Math.abs(numeric(n[2])) : 1; var test = lte; var reverse = y < x; if (reverse) { incr *= -1; test = gte; } var pad = n.some(isPadded); N = []; for (var i = x; test(i, y); i += incr) { var c; if (isAlphaSequence) { c = String.fromCharCode(i); if (c === '\\') c = ''; } else { c = String(i); if (pad) { var need = width - c.length; if (need > 0) { var z = new Array(need + 1).join('0'); if (i < 0) c = '-' + z + c.slice(1); else c = z + c; } } } N.push(c); } } else { N = concatMap(n, function(el) { return expand(el, false) }); } for (var j = 0; j < N.length; j++) { for (var k = 0; k < post.length; k++) { var expansion = pre + N[j] + post[k]; if (!isTop || isSequence || expansion) expansions.push(expansion); } } return expansions; } /***/ }), /***/ 5443: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { var util = __nccwpck_require__(1669); var Stream = __nccwpck_require__(2413).Stream; var DelayedStream = __nccwpck_require__(8611); module.exports = CombinedStream; function CombinedStream() { this.writable = false; this.readable = true; this.dataSize = 0; this.maxDataSize = 2 * 1024 * 1024; this.pauseStreams = true; this._released = false; this._streams = []; this._currentStream = null; this._insideLoop = false; this._pendingNext = false; } util.inherits(CombinedStream, Stream); CombinedStream.create = function(options) { var combinedStream = new this(); options = options || {}; for (var option in options) { combinedStream[option] = options[option]; } return combinedStream; }; CombinedStream.isStreamLike = function(stream) { return (typeof stream !== 'function') && (typeof stream !== 'string') && (typeof stream !== 'boolean') && (typeof stream !== 'number') && (!Buffer.isBuffer(stream)); }; CombinedStream.prototype.append = function(stream) { var isStreamLike = CombinedStream.isStreamLike(stream); if (isStreamLike) { if (!(stream instanceof DelayedStream)) { var newStream = DelayedStream.create(stream, { maxDataSize: Infinity, pauseStream: this.pauseStreams, }); stream.on('data', this._checkDataSize.bind(this)); stream = newStream; } this._handleErrors(stream); if (this.pauseStreams) { stream.pause(); } } this._streams.push(stream); return this; }; CombinedStream.prototype.pipe = function(dest, options) { Stream.prototype.pipe.call(this, dest, options); this.resume(); return dest; }; CombinedStream.prototype._getNext = function() { this._currentStream = null; if (this._insideLoop) { this._pendingNext = true; return; // defer call } this._insideLoop = true; try { do { this._pendingNext = false; this._realGetNext(); } while (this._pendingNext); } finally { this._insideLoop = false; } }; CombinedStream.prototype._realGetNext = function() { var stream = this._streams.shift(); if (typeof stream == 'undefined') { this.end(); return; } if (typeof stream !== 'function') { this._pipeNext(stream); return; } var getStream = stream; getStream(function(stream) { var isStreamLike = CombinedStream.isStreamLike(stream); if (isStreamLike) { stream.on('data', this._checkDataSize.bind(this)); this._handleErrors(stream); } this._pipeNext(stream); }.bind(this)); }; CombinedStream.prototype._pipeNext = function(stream) { this._currentStream = stream; var isStreamLike = CombinedStream.isStreamLike(stream); if (isStreamLike) { stream.on('end', this._getNext.bind(this)); stream.pipe(this, {end: false}); return; } var value = stream; this.write(value); this._getNext(); }; CombinedStream.prototype._handleErrors = function(stream) { var self = this; stream.on('error', function(err) { self._emitError(err); }); }; CombinedStream.prototype.write = function(data) { this.emit('data', data); }; CombinedStream.prototype.pause = function() { if (!this.pauseStreams) { return; } if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause(); this.emit('pause'); }; CombinedStream.prototype.resume = function() { if (!this._released) { this._released = true; this.writable = true; this._getNext(); } if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume(); this.emit('resume'); }; CombinedStream.prototype.end = function() { this._reset(); this.emit('end'); }; CombinedStream.prototype.destroy = function() { this._reset(); this.emit('close'); }; CombinedStream.prototype._reset = function() { this.writable = false; this._streams = []; this._currentStream = null; }; CombinedStream.prototype._checkDataSize = function() { this._updateDataSize(); if (this.dataSize <= this.maxDataSize) { return; } var message = 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'; this._emitError(new Error(message)); }; CombinedStream.prototype._updateDataSize = function() { this.dataSize = 0; var self = this; this._streams.forEach(function(stream) { if (!stream.dataSize) { return; } self.dataSize += stream.dataSize; }); if (this._currentStream && this._currentStream.dataSize) { this.dataSize += this._currentStream.dataSize; } }; CombinedStream.prototype._emitError = function(err) { this._reset(); this.emit('error', err); }; /***/ }), /***/ 6891: /***/ ((module) => { module.exports = function (xs, fn) { var res = []; for (var i = 0; i < xs.length; i++) { var x = fn(xs[i], i); if (isArray(x)) res.push.apply(res, x); else res.push(x); } return res; }; var isArray = Array.isArray || function (xs) { return Object.prototype.toString.call(xs) === '[object Array]'; }; /***/ }), /***/ 8611: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { var Stream = __nccwpck_require__(2413).Stream; var util = __nccwpck_require__(1669); module.exports = DelayedStream; function DelayedStream() { this.source = null; this.dataSize = 0; this.maxDataSize = 1024 * 1024; this.pauseStream = true; this._maxDataSizeExceeded = false; this._released = false; this._bufferedEvents = []; } util.inherits(DelayedStream, Stream); DelayedStream.create = function(source, options) { var delayedStream = new this(); options = options || {}; for (var option in options) { delayedStream[option] = options[option]; } delayedStream.source = source; var realEmit = source.emit; source.emit = function() { delayedStream._handleEmit(arguments); return realEmit.apply(source, arguments); }; source.on('error', function() {}); if (delayedStream.pauseStream) { source.pause(); } return delayedStream; }; Object.defineProperty(DelayedStream.prototype, 'readable', { configurable: true, enumerable: true, get: function() { return this.source.readable; } }); DelayedStream.prototype.setEncoding = function() { return this.source.setEncoding.apply(this.source, arguments); }; DelayedStream.prototype.resume = function() { if (!this._released) { this.release(); } this.source.resume(); }; DelayedStream.prototype.pause = function() { this.source.pause(); }; DelayedStream.prototype.release = function() { this._released = true; this._bufferedEvents.forEach(function(args) { this.emit.apply(this, args); }.bind(this)); this._bufferedEvents = []; }; DelayedStream.prototype.pipe = function() { var r = Stream.prototype.pipe.apply(this, arguments); this.resume(); return r; }; DelayedStream.prototype._handleEmit = function(args) { if (this._released) { this.emit.apply(this, args); return; } if (args[0] === 'data') { this.dataSize += args[1].length; this._checkIfMaxDataSizeExceeded(); } this._bufferedEvents.push(args); }; DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() { if (this._maxDataSizeExceeded) { return; } if (this.dataSize <= this.maxDataSize) { return; } this._maxDataSizeExceeded = true; var message = 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.' this.emit('error', new Error(message)); }; /***/ }), /***/ 4334: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { var CombinedStream = __nccwpck_require__(5443); var util = __nccwpck_require__(1669); var path = __nccwpck_require__(5622); var http = __nccwpck_require__(8605); var https = __nccwpck_require__(7211); var parseUrl = __nccwpck_require__(8835).parse; var fs = __nccwpck_require__(5747); var mime = __nccwpck_require__(3583); var asynckit = __nccwpck_require__(4812); var populate = __nccwpck_require__(7142); // Public API module.exports = FormData; // make it a Stream util.inherits(FormData, CombinedStream); /** * Create readable "multipart/form-data" streams. * Can be used to submit forms * and file uploads to other web applications. * * @constructor * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream */ function FormData(options) { if (!(this instanceof FormData)) { return new FormData(options); } this._overheadLength = 0; this._valueLength = 0; this._valuesToMeasure = []; CombinedStream.call(this); options = options || {}; for (var option in options) { this[option] = options[option]; } } FormData.LINE_BREAK = '\r\n'; FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream'; FormData.prototype.append = function(field, value, options) { options = options || {}; // allow filename as single option if (typeof options == 'string') { options = {filename: options}; } var append = CombinedStream.prototype.append.bind(this); // all that streamy business can't handle numbers if (typeof value == 'number') { value = '' + value; } // https://github.com/felixge/node-form-data/issues/38 if (util.isArray(value)) { // Please convert your array into string // the way web server expects it this._error(new Error('Arrays are not supported.')); return; } var header = this._multiPartHeader(field, value, options); var footer = this._multiPartFooter(); append(header); append(value); append(footer); // pass along options.knownLength this._trackLength(header, value, options); }; FormData.prototype._trackLength = function(header, value, options) { var valueLength = 0; // used w/ getLengthSync(), when length is known. // e.g. for streaming directly from a remote server, // w/ a known file a size, and not wanting to wait for // incoming file to finish to get its size. if (options.knownLength != null) { valueLength += +options.knownLength; } else if (Buffer.isBuffer(value)) { valueLength = value.length; } else if (typeof value === 'string') { valueLength = Buffer.byteLength(value); } this._valueLength += valueLength; // @check why add CRLF? does this account for custom/multiple CRLFs? this._overheadLength += Buffer.byteLength(header) + FormData.LINE_BREAK.length; // empty or either doesn't have path or not an http response if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) )) { return; } // no need to bother with the length if (!options.knownLength) { this._valuesToMeasure.push(value); } }; FormData.prototype._lengthRetriever = function(value, callback) { if (value.hasOwnProperty('fd')) { // take read range into a account // `end` = Infinity –> read file till the end // // TODO: Looks like there is bug in Node fs.createReadStream // it doesn't respect `end` options without `start` options // Fix it when node fixes it. // https://github.com/joyent/node/issues/7819 if (value.end != undefined && value.end != Infinity && value.start != undefined) { // when end specified // no need to calculate range // inclusive, starts with 0 callback(null, value.end + 1 - (value.start ? value.start : 0)); // not that fast snoopy } else { // still need to fetch file size from fs fs.stat(value.path, function(err, stat) { var fileSize; if (err) { callback(err); return; } // update final size based on the range options fileSize = stat.size - (value.start ? value.start : 0); callback(null, fileSize); }); } // or http response } else if (value.hasOwnProperty('httpVersion')) { callback(null, +value.headers['content-length']); // or request stream http://github.com/mikeal/request } else if (value.hasOwnProperty('httpModule')) { // wait till response come back value.on('response', function(response) { value.pause(); callback(null, +response.headers['content-length']); }); value.resume(); // something else } else { callback('Unknown stream'); } }; FormData.prototype._multiPartHeader = function(field, value, options) { // custom header specified (as string)? // it becomes responsible for boundary // (e.g. to handle extra CRLFs on .NET servers) if (typeof options.header == 'string') { return options.header; } var contentDisposition = this._getContentDisposition(value, options); var contentType = this._getContentType(value, options); var contents = ''; var headers = { // add custom disposition as third element or keep it two elements if not 'Content-Disposition': ['form-data', 'name="' + field + '"'].concat(contentDisposition || []), // if no content type. allow it to be empty array 'Content-Type': [].concat(contentType || []) }; // allow custom headers. if (typeof options.header == 'object') { populate(headers, options.header); } var header; for (var prop in headers) { if (!headers.hasOwnProperty(prop)) continue; header = headers[prop]; // skip nullish headers. if (header == null) { continue; } // convert all headers to arrays. if (!Array.isArray(header)) { header = [header]; } // add non-empty headers. if (header.length) { contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK; } } return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK; }; FormData.prototype._getContentDisposition = function(value, options) { var filename , contentDisposition ; if (typeof options.filepath === 'string') { // custom filepath for relative paths filename = path.normalize(options.filepath).replace(/\\/g, '/'); } else if (options.filename || value.name || value.path) { // custom filename take precedence // formidable and the browser add a name property // fs- and request- streams have path property filename = path.basename(options.filename || value.name || value.path); } else if (value.readable && value.hasOwnProperty('httpVersion')) { // or try http response filename = path.basename(value.client._httpMessage.path || ''); } if (filename) { contentDisposition = 'filename="' + filename + '"'; } return contentDisposition; }; FormData.prototype._getContentType = function(value, options) { // use custom content-type above all var contentType = options.contentType; // or try `name` from formidable, browser if (!contentType && value.name) { contentType = mime.lookup(value.name); } // or try `path` from fs-, request- streams if (!contentType && value.path) { contentType = mime.lookup(value.path); } // or if it's http-reponse if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) { contentType = value.headers['content-type']; } // or guess it from the filepath or filename if (!contentType && (options.filepath || options.filename)) { contentType = mime.lookup(options.filepath || options.filename); } // fallback to the default content type if `value` is not simple value if (!contentType && typeof value == 'object') { contentType = FormData.DEFAULT_CONTENT_TYPE; } return contentType; }; FormData.prototype._multiPartFooter = function() { return function(next) { var footer = FormData.LINE_BREAK; var lastPart = (this._streams.length === 0); if (lastPart) { footer += this._lastBoundary(); } next(footer); }.bind(this); }; FormData.prototype._lastBoundary = function() { return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK; }; FormData.prototype.getHeaders = function(userHeaders) { var header; var formHeaders = { 'content-type': 'multipart/form-data; boundary=' + this.getBoundary() }; for (header in userHeaders) { if (userHeaders.hasOwnProperty(header)) { formHeaders[header.toLowerCase()] = userHeaders[header]; } } return formHeaders; }; FormData.prototype.setBoundary = function(boundary) { this._boundary = boundary; }; FormData.prototype.getBoundary = function() { if (!this._boundary) { this._generateBoundary(); } return this._boundary; }; FormData.prototype.getBuffer = function() { var dataBuffer = new Buffer.alloc( 0 ); var boundary = this.getBoundary(); // Create the form content. Add Line breaks to the end of data. for (var i = 0, len = this._streams.length; i < len; i++) { if (typeof this._streams[i] !== 'function') { // Add content to the buffer. if(Buffer.isBuffer(this._streams[i])) { dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]); }else { dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]); } // Add break after content. if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) { dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] ); } } } // Add the footer and return the Buffer object. return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] ); }; FormData.prototype._generateBoundary = function() { // This generates a 50 character boundary similar to those used by Firefox. // They are optimized for boyer-moore parsing. var boundary = '--------------------------'; for (var i = 0; i < 24; i++) { boundary += Math.floor(Math.random() * 10).toString(16); } this._boundary = boundary; }; // Note: getLengthSync DOESN'T calculate streams length // As workaround one can calculate file size manually // and add it as knownLength option FormData.prototype.getLengthSync = function() { var knownLength = this._overheadLength + this._valueLength; // Don't get confused, there are 3 "internal" streams for each keyval pair // so it basically checks if there is any value added to the form if (this._streams.length) { knownLength += this._lastBoundary().length; } // https://github.com/form-data/form-data/issues/40 if (!this.hasKnownLength()) { // Some async length retrievers are present // therefore synchronous length calculation is false. // Please use getLength(callback) to get proper length this._error(new Error('Cannot calculate proper length in synchronous way.')); } return knownLength; }; // Public API to check if length of added values is known // https://github.com/form-data/form-data/issues/196 // https://github.com/form-data/form-data/issues/262 FormData.prototype.hasKnownLength = function() { var hasKnownLength = true; if (this._valuesToMeasure.length) { hasKnownLength = false; } return hasKnownLength; }; FormData.prototype.getLength = function(cb) { var knownLength = this._overheadLength + this._valueLength; if (this._streams.length) { knownLength += this._lastBoundary().length; } if (!this._valuesToMeasure.length) { process.nextTick(cb.bind(this, null, knownLength)); return; } asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) { if (err) { cb(err); return; } values.forEach(function(length) { knownLength += length; }); cb(null, knownLength); }); }; FormData.prototype.submit = function(params, cb) { var request , options , defaults = {method: 'post'} ; // parse provided url if it's string // or treat it as options object if (typeof params == 'string') { params = parseUrl(params); options = populate({ port: params.port, path: params.pathname, host: params.hostname, protocol: params.protocol }, defaults); // use custom params } else { options = populate(params, defaults); // if no port provided use default one if (!options.port) { options.port = options.protocol == 'https:' ? 443 : 80; } } // put that good code in getHeaders to some use options.headers = this.getHeaders(params.headers); // https if specified, fallback to http in any other case if (options.protocol == 'https:') { request = https.request(options); } else { request = http.request(options); } // get content length and fire away this.getLength(function(err, length) { if (err) { this._error(err); return; } // add content length request.setHeader('Content-Length', length); this.pipe(request); if (cb) { var onResponse; var callback = function (error, responce) { request.removeListener('error', callback); request.removeListener('response', onResponse); return cb.call(this, error, responce); }; onResponse = callback.bind(this, null); request.on('error', callback); request.on('response', onResponse); } }.bind(this)); return request; }; FormData.prototype._error = function(err) { if (!this.error) { this.error = err; this.pause(); this.emit('error', err); } }; FormData.prototype.toString = function () { return '[object FormData]'; }; /***/ }), /***/ 7142: /***/ ((module) => { // populates missing values module.exports = function(dst, src) { Object.keys(src).forEach(function(prop) { dst[prop] = dst[prop] || src[prop]; }); return dst; }; /***/ }), /***/ 7426: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { /*! * mime-db * Copyright(c) 2014 Jonathan Ong * MIT Licensed */ /** * Module exports. */ module.exports = __nccwpck_require__(3313) /***/ }), /***/ 3583: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; /*! * mime-types * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2015 Douglas Christopher Wilson * MIT Licensed */ /** * Module dependencies. * @private */ var db = __nccwpck_require__(7426) var extname = __nccwpck_require__(5622).extname /** * Module variables. * @private */ var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/ var TEXT_TYPE_REGEXP = /^text\//i /** * Module exports. * @public */ exports.charset = charset exports.charsets = { lookup: charset } exports.contentType = contentType exports.extension = extension exports.extensions = Object.create(null) exports.lookup = lookup exports.types = Object.create(null) // Populate the extensions/types maps populateMaps(exports.extensions, exports.types) /** * Get the default charset for a MIME type. * * @param {string} type * @return {boolean|string} */ function charset (type) { if (!type || typeof type !== 'string') { return false } // TODO: use media-typer var match = EXTRACT_TYPE_REGEXP.exec(type) var mime = match && db[match[1].toLowerCase()] if (mime && mime.charset) { return mime.charset } // default text/* to utf-8 if (match && TEXT_TYPE_REGEXP.test(match[1])) { return 'UTF-8' } return false } /** * Create a full Content-Type header given a MIME type or extension. * * @param {string} str * @return {boolean|string} */ function contentType (str) { // TODO: should this even be in this module? if (!str || typeof str !== 'string') { return false } var mime = str.indexOf('/') === -1 ? exports.lookup(str) : str if (!mime) { return false } // TODO: use content-type or other module if (mime.indexOf('charset') === -1) { var charset = exports.charset(mime) if (charset) mime += '; charset=' + charset.toLowerCase() } return mime } /** * Get the default extension for a MIME type. * * @param {string} type * @return {boolean|string} */ function extension (type) { if (!type || typeof type !== 'string') { return false } // TODO: use media-typer var match = EXTRACT_TYPE_REGEXP.exec(type) // get extensions var exts = match && exports.extensions[match[1].toLowerCase()] if (!exts || !exts.length) { return false } return exts[0] } /** * Lookup the MIME type for a file path/extension. * * @param {string} path * @return {boolean|string} */ function lookup (path) { if (!path || typeof path !== 'string') { return false } // get the extension ("ext" or ".ext" or full path) var extension = extname('x.' + path) .toLowerCase() .substr(1) if (!extension) { return false } return exports.types[extension] || false } /** * Populate the extensions and types maps. * @private */ function populateMaps (extensions, types) { // source preference (least -> most) var preference = ['nginx', 'apache', undefined, 'iana'] Object.keys(db).forEach(function forEachMimeType (type) { var mime = db[type] var exts = mime.extensions if (!exts || !exts.length) { return } // mime -> extensions extensions[type] = exts // extension -> mime for (var i = 0; i < exts.length; i++) { var extension = exts[i] if (types[extension]) { var from = preference.indexOf(db[types[extension]].source) var to = preference.indexOf(mime.source) if (types[extension] !== 'application/octet-stream' && (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) { // skip the remapping continue } } // set the extension -> mime types[extension] = type } }) } /***/ }), /***/ 3973: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { module.exports = minimatch minimatch.Minimatch = Minimatch var path = { sep: '/' } try { path = __nccwpck_require__(5622) } catch (er) {} var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} var expand = __nccwpck_require__(3717) var plTypes = { '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, '?': { open: '(?:', close: ')?' }, '+': { open: '(?:', close: ')+' }, '*': { open: '(?:', close: ')*' }, '@': { open: '(?:', close: ')' } } // any single thing other than / // don't need to escape / when using new RegExp() var qmark = '[^/]' // * => any number of characters var star = qmark + '*?' // ** when dots are allowed. Anything goes, except .. and . // not (^ or / followed by one or two dots followed by $ or /), // followed by anything, any number of times. var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' // not a ^ or / followed by a dot, // followed by anything, any number of times. var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' // characters that need to be escaped in RegExp. var reSpecials = charSet('().*{}+?[]^$\\!') // "abc" -> { a:true, b:true, c:true } function charSet (s) { return s.split('').reduce(function (set, c) { set[c] = true return set }, {}) } // normalizes slashes. var slashSplit = /\/+/ minimatch.filter = filter function filter (pattern, options) { options = options || {} return function (p, i, list) { return minimatch(p, pattern, options) } } function ext (a, b) { a = a || {} b = b || {} var t = {} Object.keys(b).forEach(function (k) { t[k] = b[k] }) Object.keys(a).forEach(function (k) { t[k] = a[k] }) return t } minimatch.defaults = function (def) { if (!def || !Object.keys(def).length) return minimatch var orig = minimatch var m = function minimatch (p, pattern, options) { return orig.minimatch(p, pattern, ext(def, options)) } m.Minimatch = function Minimatch (pattern, options) { return new orig.Minimatch(pattern, ext(def, options)) } return m } Minimatch.defaults = function (def) { if (!def || !Object.keys(def).length) return Minimatch return minimatch.defaults(def).Minimatch } function minimatch (p, pattern, options) { if (typeof pattern !== 'string') { throw new TypeError('glob pattern string required') } if (!options) options = {} // shortcut: comments match nothing. if (!options.nocomment && pattern.charAt(0) === '#') { return false } // "" only matches "" if (pattern.trim() === '') return p === '' return new Minimatch(pattern, options).match(p) } function Minimatch (pattern, options) { if (!(this instanceof Minimatch)) { return new Minimatch(pattern, options) } if (typeof pattern !== 'string') { throw new TypeError('glob pattern string required') } if (!options) options = {} pattern = pattern.trim() // windows support: need to use /, not \ if (path.sep !== '/') { pattern = pattern.split(path.sep).join('/') } this.options = options this.set = [] this.pattern = pattern this.regexp = null this.negate = false this.comment = false this.empty = false // make the set of regexps etc. this.make() } Minimatch.prototype.debug = function () {} Minimatch.prototype.make = make function make () { // don't do it more than once. if (this._made) return var pattern = this.pattern var options = this.options // empty patterns and comments match nothing. if (!options.nocomment && pattern.charAt(0) === '#') { this.comment = true return } if (!pattern) { this.empty = true return } // step 1: figure out negation, etc. this.parseNegate() // step 2: expand braces var set = this.globSet = this.braceExpand() if (options.debug) this.debug = console.error this.debug(this.pattern, set) // step 3: now we have a set, so turn each one into a series of path-portion // matching patterns. // These will be regexps, except in the case of "**", which is // set to the GLOBSTAR object for globstar behavior, // and will not contain any / characters set = this.globParts = set.map(function (s) { return s.split(slashSplit) }) this.debug(this.pattern, set) // glob --> regexps set = set.map(function (s, si, set) { return s.map(this.parse, this) }, this) this.debug(this.pattern, set) // filter out everything that didn't compile properly. set = set.filter(function (s) { return s.indexOf(false) === -1 }) this.debug(this.pattern, set) this.set = set } Minimatch.prototype.parseNegate = parseNegate function parseNegate () { var pattern = this.pattern var negate = false var options = this.options var negateOffset = 0 if (options.nonegate) return for (var i = 0, l = pattern.length ; i < l && pattern.charAt(i) === '!' ; i++) { negate = !negate negateOffset++ } if (negateOffset) this.pattern = pattern.substr(negateOffset) this.negate = negate } // Brace expansion: // a{b,c}d -> abd acd // a{b,}c -> abc ac // a{0..3}d -> a0d a1d a2d a3d // a{b,c{d,e}f}g -> abg acdfg acefg // a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg // // Invalid sets are not expanded. // a{2..}b -> a{2..}b // a{b}c -> a{b}c minimatch.braceExpand = function (pattern, options) { return braceExpand(pattern, options) } Minimatch.prototype.braceExpand = braceExpand function braceExpand (pattern, options) { if (!options) { if (this instanceof Minimatch) { options = this.options } else { options = {} } } pattern = typeof pattern === 'undefined' ? this.pattern : pattern if (typeof pattern === 'undefined') { throw new TypeError('undefined pattern') } if (options.nobrace || !pattern.match(/\{.*\}/)) { // shortcut. no need to expand. return [pattern] } return expand(pattern) } // parse a component of the expanded set. // At this point, no pattern may contain "/" in it // so we're going to return a 2d array, where each entry is the full // pattern, split on '/', and then turned into a regular expression. // A regexp is made at the end which joins each array with an // escaped /, and another full one which joins each regexp with |. // // Following the lead of Bash 4.1, note that "**" only has special meaning // when it is the *only* thing in a path portion. Otherwise, any series // of * is equivalent to a single *. Globstar behavior is enabled by // default, and can be disabled by setting options.noglobstar. Minimatch.prototype.parse = parse var SUBPARSE = {} function parse (pattern, isSub) { if (pattern.length > 1024 * 64) { throw new TypeError('pattern is too long') } var options = this.options // shortcuts if (!options.noglobstar && pattern === '**') return GLOBSTAR if (pattern === '') return '' var re = '' var hasMagic = !!options.nocase var escaping = false // ? => one single character var patternListStack = [] var negativeLists = [] var stateChar var inClass = false var reClassStart = -1 var classStart = -1 // . and .. never match anything that doesn't start with ., // even when options.dot is set. var patternStart = pattern.charAt(0) === '.' ? '' // anything // not (start or / followed by . or .. followed by / or end) : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' : '(?!\\.)' var self = this function clearStateChar () { if (stateChar) { // we had some state-tracking character // that wasn't consumed by this pass. switch (stateChar) { case '*': re += star hasMagic = true break case '?': re += qmark hasMagic = true break default: re += '\\' + stateChar break } self.debug('clearStateChar %j %j', stateChar, re) stateChar = false } } for (var i = 0, len = pattern.length, c ; (i < len) && (c = pattern.charAt(i)) ; i++) { this.debug('%s\t%s %s %j', pattern, i, re, c) // skip over any that are escaped. if (escaping && reSpecials[c]) { re += '\\' + c escaping = false continue } switch (c) { case '/': // completely not allowed, even escaped. // Should already be path-split by now. return false case '\\': clearStateChar() escaping = true continue // the various stateChar values // for the "extglob" stuff. case '?': case '*': case '+': case '@': case '!': this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) // all of those are literals inside a class, except that // the glob [!a] means [^a] in regexp if (inClass) { this.debug(' in class') if (c === '!' && i === classStart + 1) c = '^' re += c continue } // if we already have a stateChar, then it means // that there was something like ** or +? in there. // Handle the stateChar, then proceed with this one. self.debug('call clearStateChar %j', stateChar) clearStateChar() stateChar = c // if extglob is disabled, then +(asdf|foo) isn't a thing. // just clear the statechar *now*, rather than even diving into // the patternList stuff. if (options.noext) clearStateChar() continue case '(': if (inClass) { re += '(' continue } if (!stateChar) { re += '\\(' continue } patternListStack.push({ type: stateChar, start: i - 1, reStart: re.length, open: plTypes[stateChar].open, close: plTypes[stateChar].close }) // negation is (?:(?!js)[^/]*) re += stateChar === '!' ? '(?:(?!(?:' : '(?:' this.debug('plType %j %j', stateChar, re) stateChar = false continue case ')': if (inClass || !patternListStack.length) { re += '\\)' continue } clearStateChar() hasMagic = true var pl = patternListStack.pop() // negation is (?:(?!js)[^/]*) // The others are (?:) re += pl.close if (pl.type === '!') { negativeLists.push(pl) } pl.reEnd = re.length continue case '|': if (inClass || !patternListStack.length || escaping) { re += '\\|' escaping = false continue } clearStateChar() re += '|' continue // these are mostly the same in regexp and glob case '[': // swallow any state-tracking char before the [ clearStateChar() if (inClass) { re += '\\' + c continue } inClass = true classStart = i reClassStart = re.length re += c continue case ']': // a right bracket shall lose its special // meaning and represent itself in // a bracket expression if it occurs // first in the list. -- POSIX.2 2.8.3.2 if (i === classStart + 1 || !inClass) { re += '\\' + c escaping = false continue } // handle the case where we left a class open. // "[z-a]" is valid, equivalent to "\[z-a\]" if (inClass) { // split where the last [ was, make sure we don't have // an invalid re. if so, re-walk the contents of the // would-be class to re-translate any characters that // were passed through as-is // TODO: It would probably be faster to determine this // without a try/catch and a new RegExp, but it's tricky // to do safely. For now, this is safe and works. var cs = pattern.substring(classStart + 1, i) try { RegExp('[' + cs + ']') } catch (er) { // not a valid class! var sp = this.parse(cs, SUBPARSE) re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' hasMagic = hasMagic || sp[1] inClass = false continue } } // finish up the class. hasMagic = true inClass = false re += c continue default: // swallow any state char that wasn't consumed clearStateChar() if (escaping) { // no need escaping = false } else if (reSpecials[c] && !(c === '^' && inClass)) { re += '\\' } re += c } // switch } // for // handle the case where we left a class open. // "[abc" is valid, equivalent to "\[abc" if (inClass) { // split where the last [ was, and escape it // this is a huge pita. We now have to re-walk // the contents of the would-be class to re-translate // any characters that were passed through as-is cs = pattern.substr(classStart + 1) sp = this.parse(cs, SUBPARSE) re = re.substr(0, reClassStart) + '\\[' + sp[0] hasMagic = hasMagic || sp[1] } // handle the case where we had a +( thing at the *end* // of the pattern. // each pattern list stack adds 3 chars, and we need to go through // and escape any | chars that were passed through as-is for the regexp. // Go through and escape them, taking care not to double-escape any // | chars that were already escaped. for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { var tail = re.slice(pl.reStart + pl.open.length) this.debug('setting tail', re, pl) // maybe some even number of \, then maybe 1 \, followed by a | tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { if (!$2) { // the | isn't already escaped, so escape it. $2 = '\\' } // need to escape all those slashes *again*, without escaping the // one that we need for escaping the | character. As it works out, // escaping an even number of slashes can be done by simply repeating // it exactly after itself. That's why this trick works. // // I am sorry that you have to see this. return $1 + $1 + $2 + '|' }) this.debug('tail=%j\n %s', tail, tail, pl, re) var t = pl.type === '*' ? star : pl.type === '?' ? qmark : '\\' + pl.type hasMagic = true re = re.slice(0, pl.reStart) + t + '\\(' + tail } // handle trailing things that only matter at the very end. clearStateChar() if (escaping) { // trailing \\ re += '\\\\' } // only need to apply the nodot start if the re starts with // something that could conceivably capture a dot var addPatternStart = false switch (re.charAt(0)) { case '.': case '[': case '(': addPatternStart = true } // Hack to work around lack of negative lookbehind in JS // A pattern like: *.!(x).!(y|z) needs to ensure that a name // like 'a.xyz.yz' doesn't match. So, the first negative // lookahead, has to look ALL the way ahead, to the end of // the pattern. for (var n = negativeLists.length - 1; n > -1; n--) { var nl = negativeLists[n] var nlBefore = re.slice(0, nl.reStart) var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) var nlAfter = re.slice(nl.reEnd) nlLast += nlAfter // Handle nested stuff like *(*.js|!(*.json)), where open parens // mean that we should *not* include the ) in the bit that is considered // "after" the negated section. var openParensBefore = nlBefore.split('(').length - 1 var cleanAfter = nlAfter for (i = 0; i < openParensBefore; i++) { cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') } nlAfter = cleanAfter var dollar = '' if (nlAfter === '' && isSub !== SUBPARSE) { dollar = '$' } var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast re = newRe } // if the re is not "" at this point, then we need to make sure // it doesn't match against an empty path part. // Otherwise a/* will match a/, which it should not. if (re !== '' && hasMagic) { re = '(?=.)' + re } if (addPatternStart) { re = patternStart + re } // parsing just a piece of a larger pattern. if (isSub === SUBPARSE) { return [re, hasMagic] } // skip the regexp for non-magical patterns // unescape anything in it, though, so that it'll be // an exact match against a file etc. if (!hasMagic) { return globUnescape(pattern) } var flags = options.nocase ? 'i' : '' try { var regExp = new RegExp('^' + re + '$', flags) } catch (er) { // If it was an invalid regular expression, then it can't match // anything. This trick looks for a character after the end of // the string, which is of course impossible, except in multi-line // mode, but it's not a /m regex. return new RegExp('$.') } regExp._glob = pattern regExp._src = re return regExp } minimatch.makeRe = function (pattern, options) { return new Minimatch(pattern, options || {}).makeRe() } Minimatch.prototype.makeRe = makeRe function makeRe () { if (this.regexp || this.regexp === false) return this.regexp // at this point, this.set is a 2d array of partial // pattern strings, or "**". // // It's better to use .match(). This function shouldn't // be used, really, but it's pretty convenient sometimes, // when you just want to work with a regex. var set = this.set if (!set.length) { this.regexp = false return this.regexp } var options = this.options var twoStar = options.noglobstar ? star : options.dot ? twoStarDot : twoStarNoDot var flags = options.nocase ? 'i' : '' var re = set.map(function (pattern) { return pattern.map(function (p) { return (p === GLOBSTAR) ? twoStar : (typeof p === 'string') ? regExpEscape(p) : p._src }).join('\\\/') }).join('|') // must match entire pattern // ending in a * or ** will make it less strict. re = '^(?:' + re + ')$' // can match anything, as long as it's not this. if (this.negate) re = '^(?!' + re + ').*$' try { this.regexp = new RegExp(re, flags) } catch (ex) { this.regexp = false } return this.regexp } minimatch.match = function (list, pattern, options) { options = options || {} var mm = new Minimatch(pattern, options) list = list.filter(function (f) { return mm.match(f) }) if (mm.options.nonull && !list.length) { list.push(pattern) } return list } Minimatch.prototype.match = match function match (f, partial) { this.debug('match', f, this.pattern) // short-circuit in the case of busted things. // comments, etc. if (this.comment) return false if (this.empty) return f === '' if (f === '/' && partial) return true var options = this.options // windows: need to use /, not \ if (path.sep !== '/') { f = f.split(path.sep).join('/') } // treat the test path as a set of pathparts. f = f.split(slashSplit) this.debug(this.pattern, 'split', f) // just ONE of the pattern sets in this.set needs to match // in order for it to be valid. If negating, then just one // match means that we have failed. // Either way, return on the first hit. var set = this.set this.debug(this.pattern, 'set', set) // Find the basename of the path by looking for the last non-empty segment var filename var i for (i = f.length - 1; i >= 0; i--) { filename = f[i] if (filename) break } for (i = 0; i < set.length; i++) { var pattern = set[i] var file = f if (options.matchBase && pattern.length === 1) { file = [filename] } var hit = this.matchOne(file, pattern, partial) if (hit) { if (options.flipNegate) return true return !this.negate } } // didn't get any hits. this is success if it's a negative // pattern, failure otherwise. if (options.flipNegate) return false return this.negate } // set partial to true to test if, for example, // "/a/b" matches the start of "/*/b/*/d" // Partial means, if you run out of file before you run // out of pattern, then that's fine, as long as all // the parts match. Minimatch.prototype.matchOne = function (file, pattern, partial) { var options = this.options this.debug('matchOne', { 'this': this, file: file, pattern: pattern }) this.debug('matchOne', file.length, pattern.length) for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length ; (fi < fl) && (pi < pl) ; fi++, pi++) { this.debug('matchOne loop') var p = pattern[pi] var f = file[fi] this.debug(pattern, p, f) // should be impossible. // some invalid regexp stuff in the set. if (p === false) return false if (p === GLOBSTAR) { this.debug('GLOBSTAR', [pattern, p, f]) // "**" // a/**/b/**/c would match the following: // a/b/x/y/z/c // a/x/y/z/b/c // a/b/x/b/x/c // a/b/c // To do this, take the rest of the pattern after // the **, and see if it would match the file remainder. // If so, return success. // If not, the ** "swallows" a segment, and try again. // This is recursively awful. // // a/**/b/**/c matching a/b/x/y/z/c // - a matches a // - doublestar // - matchOne(b/x/y/z/c, b/**/c) // - b matches b // - doublestar // - matchOne(x/y/z/c, c) -> no // - matchOne(y/z/c, c) -> no // - matchOne(z/c, c) -> no // - matchOne(c, c) yes, hit var fr = fi var pr = pi + 1 if (pr === pl) { this.debug('** at the end') // a ** at the end will just swallow the rest. // We have found a match. // however, it will not swallow /.x, unless // options.dot is set. // . and .. are *never* matched by **, for explosively // exponential reasons. for (; fi < fl; fi++) { if (file[fi] === '.' || file[fi] === '..' || (!options.dot && file[fi].charAt(0) === '.')) return false } return true } // ok, let's see if we can swallow whatever we can. while (fr < fl) { var swallowee = file[fr] this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) // XXX remove this slice. Just pass the start index. if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { this.debug('globstar found match!', fr, fl, swallowee) // found a match. return true } else { // can't swallow "." or ".." ever. // can only swallow ".foo" when explicitly asked. if (swallowee === '.' || swallowee === '..' || (!options.dot && swallowee.charAt(0) === '.')) { this.debug('dot detected!', file, fr, pattern, pr) break } // ** swallows a segment, and continue. this.debug('globstar swallow a segment, and continue') fr++ } } // no match was found. // However, in partial mode, we can't say this is necessarily over. // If there's more *pattern* left, then if (partial) { // ran out of file this.debug('\n>>> no match, partial?', file, fr, pattern, pr) if (fr === fl) return true } return false } // something other than ** // non-magic patterns just have to match exactly // patterns with magic have been turned into regexps. var hit if (typeof p === 'string') { if (options.nocase) { hit = f.toLowerCase() === p.toLowerCase() } else { hit = f === p } this.debug('string match', p, f, hit) } else { hit = f.match(p) this.debug('pattern match', p, f, hit) } if (!hit) return false } // Note: ending in / means that we'll get a final "" // at the end of the pattern. This can only match a // corresponding "" at the end of the file. // If the file ends in /, then it can only match a // a pattern that ends in /, unless the pattern just // doesn't have any more for it. But, a/b/ should *not* // match "a/b/*", even though "" matches against the // [^/]*? pattern, except in partial mode, where it might // simply not be reached yet. // However, a/b/ should still satisfy a/* // now either we fell off the end of the pattern, or we're done. if (fi === fl && pi === pl) { // ran out of pattern and filename at the same time. // an exact hit! return true } else if (fi === fl) { // ran out of file, but still had pattern left. // this is ok if we're doing the match as part of // a glob fs traversal. return partial } else if (pi === pl) { // ran out of pattern, still have file left. // this is only acceptable if we're on the very last // empty segment of a file with a trailing slash. // a/* should match a/b/ var emptyFileEnd = (fi === fl - 1) && (file[fi] === '') return emptyFileEnd } // should be unreachable. throw new Error('wtf?') } // replace stuff like \* with * function globUnescape (s) { return s.replace(/\\(.)/g, '$1') } function regExpEscape (s) { return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') } /***/ }), /***/ 467: /***/ ((module, exports, __nccwpck_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var Stream = _interopDefault(__nccwpck_require__(2413)); var http = _interopDefault(__nccwpck_require__(8605)); var Url = _interopDefault(__nccwpck_require__(8835)); var https = _interopDefault(__nccwpck_require__(7211)); var zlib = _interopDefault(__nccwpck_require__(8761)); // Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js // fix for "Readable" isn't a named export issue const Readable = Stream.Readable; const BUFFER = Symbol('buffer'); const TYPE = Symbol('type'); class Blob { constructor() { this[TYPE] = ''; const blobParts = arguments[0]; const options = arguments[1]; const buffers = []; let size = 0; if (blobParts) { const a = blobParts; const length = Number(a.length); for (let i = 0; i < length; i++) { const element = a[i]; let buffer; if (element instanceof Buffer) { buffer = element; } else if (ArrayBuffer.isView(element)) { buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength); } else if (element instanceof ArrayBuffer) { buffer = Buffer.from(element); } else if (element instanceof Blob) { buffer = element[BUFFER]; } else { buffer = Buffer.from(typeof element === 'string' ? element : String(element)); } size += buffer.length; buffers.push(buffer); } } this[BUFFER] = Buffer.concat(buffers); let type = options && options.type !== undefined && String(options.type).toLowerCase(); if (type && !/[^\u0020-\u007E]/.test(type)) { this[TYPE] = type; } } get size() { return this[BUFFER].length; } get type() { return this[TYPE]; } text() { return Promise.resolve(this[BUFFER].toString()); } arrayBuffer() { const buf = this[BUFFER]; const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); return Promise.resolve(ab); } stream() { const readable = new Readable(); readable._read = function () {}; readable.push(this[BUFFER]); readable.push(null); return readable; } toString() { return '[object Blob]'; } slice() { const size = this.size; const start = arguments[0]; const end = arguments[1]; let relativeStart, relativeEnd; if (start === undefined) { relativeStart = 0; } else if (start < 0) { relativeStart = Math.max(size + start, 0); } else { relativeStart = Math.min(start, size); } if (end === undefined) { relativeEnd = size; } else if (end < 0) { relativeEnd = Math.max(size + end, 0); } else { relativeEnd = Math.min(end, size); } const span = Math.max(relativeEnd - relativeStart, 0); const buffer = this[BUFFER]; const slicedBuffer = buffer.slice(relativeStart, relativeStart + span); const blob = new Blob([], { type: arguments[2] }); blob[BUFFER] = slicedBuffer; return blob; } } Object.defineProperties(Blob.prototype, { size: { enumerable: true }, type: { enumerable: true }, slice: { enumerable: true } }); Object.defineProperty(Blob.prototype, Symbol.toStringTag, { value: 'Blob', writable: false, enumerable: false, configurable: true }); /** * fetch-error.js * * FetchError interface for operational errors */ /** * Create FetchError instance * * @param String message Error message for human * @param String type Error type for machine * @param String systemError For Node.js system error * @return FetchError */ function FetchError(message, type, systemError) { Error.call(this, message); this.message = message; this.type = type; // when err.type is `system`, err.code contains system error code if (systemError) { this.code = this.errno = systemError.code; } // hide custom error implementation details from end-users Error.captureStackTrace(this, this.constructor); } FetchError.prototype = Object.create(Error.prototype); FetchError.prototype.constructor = FetchError; FetchError.prototype.name = 'FetchError'; let convert; try { convert = __nccwpck_require__(2877).convert; } catch (e) {} const INTERNALS = Symbol('Body internals'); // fix an issue where "PassThrough" isn't a named export for node <10 const PassThrough = Stream.PassThrough; /** * Body mixin * * Ref: https://fetch.spec.whatwg.org/#body * * @param Stream body Readable stream * @param Object opts Response options * @return Void */ function Body(body) { var _this = this; var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, _ref$size = _ref.size; let size = _ref$size === undefined ? 0 : _ref$size; var _ref$timeout = _ref.timeout; let timeout = _ref$timeout === undefined ? 0 : _ref$timeout; if (body == null) { // body is undefined or null body = null; } else if (isURLSearchParams(body)) { // body is a URLSearchParams body = Buffer.from(body.toString()); } else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') { // body is ArrayBuffer body = Buffer.from(body); } else if (ArrayBuffer.isView(body)) { // body is ArrayBufferView body = Buffer.from(body.buffer, body.byteOffset, body.byteLength); } else if (body instanceof Stream) ; else { // none of the above // coerce to string then buffer body = Buffer.from(String(body)); } this[INTERNALS] = { body, disturbed: false, error: null }; this.size = size; this.timeout = timeout; if (body instanceof Stream) { body.on('error', function (err) { const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err); _this[INTERNALS].error = error; }); } } Body.prototype = { get body() { return this[INTERNALS].body; }, get bodyUsed() { return this[INTERNALS].disturbed; }, /** * Decode response as ArrayBuffer * * @return Promise */ arrayBuffer() { return consumeBody.call(this).then(function (buf) { return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); }); }, /** * Return raw response as Blob * * @return Promise */ blob() { let ct = this.headers && this.headers.get('content-type') || ''; return consumeBody.call(this).then(function (buf) { return Object.assign( // Prevent copying new Blob([], { type: ct.toLowerCase() }), { [BUFFER]: buf }); }); }, /** * Decode response as json * * @return Promise */ json() { var _this2 = this; return consumeBody.call(this).then(function (buffer) { try { return JSON.parse(buffer.toString()); } catch (err) { return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json')); } }); }, /** * Decode response as text * * @return Promise */ text() { return consumeBody.call(this).then(function (buffer) { return buffer.toString(); }); }, /** * Decode response as buffer (non-spec api) * * @return Promise */ buffer() { return consumeBody.call(this); }, /** * Decode response as text, while automatically detecting the encoding and * trying to decode to UTF-8 (non-spec api) * * @return Promise */ textConverted() { var _this3 = this; return consumeBody.call(this).then(function (buffer) { return convertBody(buffer, _this3.headers); }); } }; // In browsers, all properties are enumerable. Object.defineProperties(Body.prototype, { body: { enumerable: true }, bodyUsed: { enumerable: true }, arrayBuffer: { enumerable: true }, blob: { enumerable: true }, json: { enumerable: true }, text: { enumerable: true } }); Body.mixIn = function (proto) { for (const name of Object.getOwnPropertyNames(Body.prototype)) { // istanbul ignore else: future proof if (!(name in proto)) { const desc = Object.getOwnPropertyDescriptor(Body.prototype, name); Object.defineProperty(proto, name, desc); } } }; /** * Consume and convert an entire Body to a Buffer. * * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body * * @return Promise */ function consumeBody() { var _this4 = this; if (this[INTERNALS].disturbed) { return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`)); } this[INTERNALS].disturbed = true; if (this[INTERNALS].error) { return Body.Promise.reject(this[INTERNALS].error); } let body = this.body; // body is null if (body === null) { return Body.Promise.resolve(Buffer.alloc(0)); } // body is blob if (isBlob(body)) { body = body.stream(); } // body is buffer if (Buffer.isBuffer(body)) { return Body.Promise.resolve(body); } // istanbul ignore if: should never happen if (!(body instanceof Stream)) { return Body.Promise.resolve(Buffer.alloc(0)); } // body is stream // get ready to actually consume the body let accum = []; let accumBytes = 0; let abort = false; return new Body.Promise(function (resolve, reject) { let resTimeout; // allow timeout on slow response body if (_this4.timeout) { resTimeout = setTimeout(function () { abort = true; reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout')); }, _this4.timeout); } // handle stream errors body.on('error', function (err) { if (err.name === 'AbortError') { // if the request was aborted, reject with this Error abort = true; reject(err); } else { // other errors, such as incorrect content-encoding reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err)); } }); body.on('data', function (chunk) { if (abort || chunk === null) { return; } if (_this4.size && accumBytes + chunk.length > _this4.size) { abort = true; reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size')); return; } accumBytes += chunk.length; accum.push(chunk); }); body.on('end', function () { if (abort) { return; } clearTimeout(resTimeout); try { resolve(Buffer.concat(accum, accumBytes)); } catch (err) { // handle streams that have accumulated too much data (issue #414) reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err)); } }); }); } /** * Detect buffer encoding and convert to target encoding * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding * * @param Buffer buffer Incoming buffer * @param String encoding Target encoding * @return String */ function convertBody(buffer, headers) { if (typeof convert !== 'function') { throw new Error('The package `encoding` must be installed to use the textConverted() function'); } const ct = headers.get('content-type'); let charset = 'utf-8'; let res, str; // header if (ct) { res = /charset=([^;]*)/i.exec(ct); } // no charset in content type, peek at response body for at most 1024 bytes str = buffer.slice(0, 1024).toString(); // html5 if (!res && str) { res = / 0 && arguments[0] !== undefined ? arguments[0] : undefined; this[MAP] = Object.create(null); if (init instanceof Headers) { const rawHeaders = init.raw(); const headerNames = Object.keys(rawHeaders); for (const headerName of headerNames) { for (const value of rawHeaders[headerName]) { this.append(headerName, value); } } return; } // We don't worry about converting prop to ByteString here as append() // will handle it. if (init == null) ; else if (typeof init === 'object') { const method = init[Symbol.iterator]; if (method != null) { if (typeof method !== 'function') { throw new TypeError('Header pairs must be iterable'); } // sequence> // Note: per spec we have to first exhaust the lists then process them const pairs = []; for (const pair of init) { if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') { throw new TypeError('Each header pair must be iterable'); } pairs.push(Array.from(pair)); } for (const pair of pairs) { if (pair.length !== 2) { throw new TypeError('Each header pair must be a name/value tuple'); } this.append(pair[0], pair[1]); } } else { // record for (const key of Object.keys(init)) { const value = init[key]; this.append(key, value); } } } else { throw new TypeError('Provided initializer must be an object'); } } /** * Return combined header value given name * * @param String name Header name * @return Mixed */ get(name) { name = `${name}`; validateName(name); const key = find(this[MAP], name); if (key === undefined) { return null; } return this[MAP][key].join(', '); } /** * Iterate over all headers * * @param Function callback Executed for each item with parameters (value, name, thisArg) * @param Boolean thisArg `this` context for callback function * @return Void */ forEach(callback) { let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; let pairs = getHeaders(this); let i = 0; while (i < pairs.length) { var _pairs$i = pairs[i]; const name = _pairs$i[0], value = _pairs$i[1]; callback.call(thisArg, value, name, this); pairs = getHeaders(this); i++; } } /** * Overwrite header values given name * * @param String name Header name * @param String value Header value * @return Void */ set(name, value) { name = `${name}`; value = `${value}`; validateName(name); validateValue(value); const key = find(this[MAP], name); this[MAP][key !== undefined ? key : name] = [value]; } /** * Append a value onto existing header * * @param String name Header name * @param String value Header value * @return Void */ append(name, value) { name = `${name}`; value = `${value}`; validateName(name); validateValue(value); const key = find(this[MAP], name); if (key !== undefined) { this[MAP][key].push(value); } else { this[MAP][name] = [value]; } } /** * Check for header name existence * * @param String name Header name * @return Boolean */ has(name) { name = `${name}`; validateName(name); return find(this[MAP], name) !== undefined; } /** * Delete all header values given name * * @param String name Header name * @return Void */ delete(name) { name = `${name}`; validateName(name); const key = find(this[MAP], name); if (key !== undefined) { delete this[MAP][key]; } } /** * Return raw headers (non-spec api) * * @return Object */ raw() { return this[MAP]; } /** * Get an iterator on keys. * * @return Iterator */ keys() { return createHeadersIterator(this, 'key'); } /** * Get an iterator on values. * * @return Iterator */ values() { return createHeadersIterator(this, 'value'); } /** * Get an iterator on entries. * * This is the default iterator of the Headers object. * * @return Iterator */ [Symbol.iterator]() { return createHeadersIterator(this, 'key+value'); } } Headers.prototype.entries = Headers.prototype[Symbol.iterator]; Object.defineProperty(Headers.prototype, Symbol.toStringTag, { value: 'Headers', writable: false, enumerable: false, configurable: true }); Object.defineProperties(Headers.prototype, { get: { enumerable: true }, forEach: { enumerable: true }, set: { enumerable: true }, append: { enumerable: true }, has: { enumerable: true }, delete: { enumerable: true }, keys: { enumerable: true }, values: { enumerable: true }, entries: { enumerable: true } }); function getHeaders(headers) { let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value'; const keys = Object.keys(headers[MAP]).sort(); return keys.map(kind === 'key' ? function (k) { return k.toLowerCase(); } : kind === 'value' ? function (k) { return headers[MAP][k].join(', '); } : function (k) { return [k.toLowerCase(), headers[MAP][k].join(', ')]; }); } const INTERNAL = Symbol('internal'); function createHeadersIterator(target, kind) { const iterator = Object.create(HeadersIteratorPrototype); iterator[INTERNAL] = { target, kind, index: 0 }; return iterator; } const HeadersIteratorPrototype = Object.setPrototypeOf({ next() { // istanbul ignore if if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) { throw new TypeError('Value of `this` is not a HeadersIterator'); } var _INTERNAL = this[INTERNAL]; const target = _INTERNAL.target, kind = _INTERNAL.kind, index = _INTERNAL.index; const values = getHeaders(target, kind); const len = values.length; if (index >= len) { return { value: undefined, done: true }; } this[INTERNAL].index = index + 1; return { value: values[index], done: false }; } }, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))); Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, { value: 'HeadersIterator', writable: false, enumerable: false, configurable: true }); /** * Export the Headers object in a form that Node.js can consume. * * @param Headers headers * @return Object */ function exportNodeCompatibleHeaders(headers) { const obj = Object.assign({ __proto__: null }, headers[MAP]); // http.request() only supports string as Host header. This hack makes // specifying custom Host header possible. const hostHeaderKey = find(headers[MAP], 'Host'); if (hostHeaderKey !== undefined) { obj[hostHeaderKey] = obj[hostHeaderKey][0]; } return obj; } /** * Create a Headers object from an object of headers, ignoring those that do * not conform to HTTP grammar productions. * * @param Object obj Object of headers * @return Headers */ function createHeadersLenient(obj) { const headers = new Headers(); for (const name of Object.keys(obj)) { if (invalidTokenRegex.test(name)) { continue; } if (Array.isArray(obj[name])) { for (const val of obj[name]) { if (invalidHeaderCharRegex.test(val)) { continue; } if (headers[MAP][name] === undefined) { headers[MAP][name] = [val]; } else { headers[MAP][name].push(val); } } } else if (!invalidHeaderCharRegex.test(obj[name])) { headers[MAP][name] = [obj[name]]; } } return headers; } const INTERNALS$1 = Symbol('Response internals'); // fix an issue where "STATUS_CODES" aren't a named export for node <10 const STATUS_CODES = http.STATUS_CODES; /** * Response class * * @param Stream body Readable stream * @param Object opts Response options * @return Void */ class Response { constructor() { let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; Body.call(this, body, opts); const status = opts.status || 200; const headers = new Headers(opts.headers); if (body != null && !headers.has('Content-Type')) { const contentType = extractContentType(body); if (contentType) { headers.append('Content-Type', contentType); } } this[INTERNALS$1] = { url: opts.url, status, statusText: opts.statusText || STATUS_CODES[status], headers, counter: opts.counter }; } get url() { return this[INTERNALS$1].url || ''; } get status() { return this[INTERNALS$1].status; } /** * Convenience property representing if the request ended normally */ get ok() { return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300; } get redirected() { return this[INTERNALS$1].counter > 0; } get statusText() { return this[INTERNALS$1].statusText; } get headers() { return this[INTERNALS$1].headers; } /** * Clone this response * * @return Response */ clone() { return new Response(clone(this), { url: this.url, status: this.status, statusText: this.statusText, headers: this.headers, ok: this.ok, redirected: this.redirected }); } } Body.mixIn(Response.prototype); Object.defineProperties(Response.prototype, { url: { enumerable: true }, status: { enumerable: true }, ok: { enumerable: true }, redirected: { enumerable: true }, statusText: { enumerable: true }, headers: { enumerable: true }, clone: { enumerable: true } }); Object.defineProperty(Response.prototype, Symbol.toStringTag, { value: 'Response', writable: false, enumerable: false, configurable: true }); const INTERNALS$2 = Symbol('Request internals'); // fix an issue where "format", "parse" aren't a named export for node <10 const parse_url = Url.parse; const format_url = Url.format; const streamDestructionSupported = 'destroy' in Stream.Readable.prototype; /** * Check if a value is an instance of Request. * * @param Mixed input * @return Boolean */ function isRequest(input) { return typeof input === 'object' && typeof input[INTERNALS$2] === 'object'; } function isAbortSignal(signal) { const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal); return !!(proto && proto.constructor.name === 'AbortSignal'); } /** * Request class * * @param Mixed input Url or Request instance * @param Object init Custom options * @return Void */ class Request { constructor(input) { let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; let parsedURL; // normalize input if (!isRequest(input)) { if (input && input.href) { // in order to support Node.js' Url objects; though WHATWG's URL objects // will fall into this branch also (since their `toString()` will return // `href` property anyway) parsedURL = parse_url(input.href); } else { // coerce input to a string before attempting to parse parsedURL = parse_url(`${input}`); } input = {}; } else { parsedURL = parse_url(input.url); } let method = init.method || input.method || 'GET'; method = method.toUpperCase(); if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) { throw new TypeError('Request with GET/HEAD method cannot have body'); } let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null; Body.call(this, inputBody, { timeout: init.timeout || input.timeout || 0, size: init.size || input.size || 0 }); const headers = new Headers(init.headers || input.headers || {}); if (inputBody != null && !headers.has('Content-Type')) { const contentType = extractContentType(inputBody); if (contentType) { headers.append('Content-Type', contentType); } } let signal = isRequest(input) ? input.signal : null; if ('signal' in init) signal = init.signal; if (signal != null && !isAbortSignal(signal)) { throw new TypeError('Expected signal to be an instanceof AbortSignal'); } this[INTERNALS$2] = { method, redirect: init.redirect || input.redirect || 'follow', headers, parsedURL, signal }; // node-fetch-only options this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20; this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true; this.counter = init.counter || input.counter || 0; this.agent = init.agent || input.agent; } get method() { return this[INTERNALS$2].method; } get url() { return format_url(this[INTERNALS$2].parsedURL); } get headers() { return this[INTERNALS$2].headers; } get redirect() { return this[INTERNALS$2].redirect; } get signal() { return this[INTERNALS$2].signal; } /** * Clone this request * * @return Request */ clone() { return new Request(this); } } Body.mixIn(Request.prototype); Object.defineProperty(Request.prototype, Symbol.toStringTag, { value: 'Request', writable: false, enumerable: false, configurable: true }); Object.defineProperties(Request.prototype, { method: { enumerable: true }, url: { enumerable: true }, headers: { enumerable: true }, redirect: { enumerable: true }, clone: { enumerable: true }, signal: { enumerable: true } }); /** * Convert a Request to Node.js http request options. * * @param Request A Request instance * @return Object The options object to be passed to http.request */ function getNodeRequestOptions(request) { const parsedURL = request[INTERNALS$2].parsedURL; const headers = new Headers(request[INTERNALS$2].headers); // fetch step 1.3 if (!headers.has('Accept')) { headers.set('Accept', '*/*'); } // Basic fetch if (!parsedURL.protocol || !parsedURL.hostname) { throw new TypeError('Only absolute URLs are supported'); } if (!/^https?:$/.test(parsedURL.protocol)) { throw new TypeError('Only HTTP(S) protocols are supported'); } if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) { throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8'); } // HTTP-network-or-cache fetch steps 2.4-2.7 let contentLengthValue = null; if (request.body == null && /^(POST|PUT)$/i.test(request.method)) { contentLengthValue = '0'; } if (request.body != null) { const totalBytes = getTotalBytes(request); if (typeof totalBytes === 'number') { contentLengthValue = String(totalBytes); } } if (contentLengthValue) { headers.set('Content-Length', contentLengthValue); } // HTTP-network-or-cache fetch step 2.11 if (!headers.has('User-Agent')) { headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)'); } // HTTP-network-or-cache fetch step 2.15 if (request.compress && !headers.has('Accept-Encoding')) { headers.set('Accept-Encoding', 'gzip,deflate'); } let agent = request.agent; if (typeof agent === 'function') { agent = agent(parsedURL); } if (!headers.has('Connection') && !agent) { headers.set('Connection', 'close'); } // HTTP-network fetch step 4.2 // chunked encoding is handled by Node.js return Object.assign({}, parsedURL, { method: request.method, headers: exportNodeCompatibleHeaders(headers), agent }); } /** * abort-error.js * * AbortError interface for cancelled requests */ /** * Create AbortError instance * * @param String message Error message for human * @return AbortError */ function AbortError(message) { Error.call(this, message); this.type = 'aborted'; this.message = message; // hide custom error implementation details from end-users Error.captureStackTrace(this, this.constructor); } AbortError.prototype = Object.create(Error.prototype); AbortError.prototype.constructor = AbortError; AbortError.prototype.name = 'AbortError'; // fix an issue where "PassThrough", "resolve" aren't a named export for node <10 const PassThrough$1 = Stream.PassThrough; const resolve_url = Url.resolve; /** * Fetch function * * @param Mixed url Absolute url or Request instance * @param Object opts Fetch options * @return Promise */ function fetch(url, opts) { // allow custom promise if (!fetch.Promise) { throw new Error('native promise missing, set fetch.Promise to your favorite alternative'); } Body.Promise = fetch.Promise; // wrap http.request into fetch return new fetch.Promise(function (resolve, reject) { // build request object const request = new Request(url, opts); const options = getNodeRequestOptions(request); const send = (options.protocol === 'https:' ? https : http).request; const signal = request.signal; let response = null; const abort = function abort() { let error = new AbortError('The user aborted a request.'); reject(error); if (request.body && request.body instanceof Stream.Readable) { request.body.destroy(error); } if (!response || !response.body) return; response.body.emit('error', error); }; if (signal && signal.aborted) { abort(); return; } const abortAndFinalize = function abortAndFinalize() { abort(); finalize(); }; // send request const req = send(options); let reqTimeout; if (signal) { signal.addEventListener('abort', abortAndFinalize); } function finalize() { req.abort(); if (signal) signal.removeEventListener('abort', abortAndFinalize); clearTimeout(reqTimeout); } if (request.timeout) { req.once('socket', function (socket) { reqTimeout = setTimeout(function () { reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout')); finalize(); }, request.timeout); }); } req.on('error', function (err) { reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err)); finalize(); }); req.on('response', function (res) { clearTimeout(reqTimeout); const headers = createHeadersLenient(res.headers); // HTTP fetch step 5 if (fetch.isRedirect(res.statusCode)) { // HTTP fetch step 5.2 const location = headers.get('Location'); // HTTP fetch step 5.3 const locationURL = location === null ? null : resolve_url(request.url, location); // HTTP fetch step 5.5 switch (request.redirect) { case 'error': reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect')); finalize(); return; case 'manual': // node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL. if (locationURL !== null) { // handle corrupted header try { headers.set('Location', locationURL); } catch (err) { // istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request reject(err); } } break; case 'follow': // HTTP-redirect fetch step 2 if (locationURL === null) { break; } // HTTP-redirect fetch step 5 if (request.counter >= request.follow) { reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect')); finalize(); return; } // HTTP-redirect fetch step 6 (counter increment) // Create a new Request object. const requestOpts = { headers: new Headers(request.headers), follow: request.follow, counter: request.counter + 1, agent: request.agent, compress: request.compress, method: request.method, body: request.body, signal: request.signal, timeout: request.timeout, size: request.size }; // HTTP-redirect fetch step 9 if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) { reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect')); finalize(); return; } // HTTP-redirect fetch step 11 if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') { requestOpts.method = 'GET'; requestOpts.body = undefined; requestOpts.headers.delete('content-length'); } // HTTP-redirect fetch step 15 resolve(fetch(new Request(locationURL, requestOpts))); finalize(); return; } } // prepare response res.once('end', function () { if (signal) signal.removeEventListener('abort', abortAndFinalize); }); let body = res.pipe(new PassThrough$1()); const response_options = { url: request.url, status: res.statusCode, statusText: res.statusMessage, headers: headers, size: request.size, timeout: request.timeout, counter: request.counter }; // HTTP-network fetch step 12.1.1.3 const codings = headers.get('Content-Encoding'); // HTTP-network fetch step 12.1.1.4: handle content codings // in following scenarios we ignore compression support // 1. compression support is disabled // 2. HEAD request // 3. no Content-Encoding header // 4. no content response (204) // 5. content not modified response (304) if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) { response = new Response(body, response_options); resolve(response); return; } // For Node v6+ // Be less strict when decoding compressed responses, since sometimes // servers send slightly invalid responses that are still accepted // by common browsers. // Always using Z_SYNC_FLUSH is what cURL does. const zlibOptions = { flush: zlib.Z_SYNC_FLUSH, finishFlush: zlib.Z_SYNC_FLUSH }; // for gzip if (codings == 'gzip' || codings == 'x-gzip') { body = body.pipe(zlib.createGunzip(zlibOptions)); response = new Response(body, response_options); resolve(response); return; } // for deflate if (codings == 'deflate' || codings == 'x-deflate') { // handle the infamous raw deflate response from old servers // a hack for old IIS and Apache servers const raw = res.pipe(new PassThrough$1()); raw.once('data', function (chunk) { // see http://stackoverflow.com/questions/37519828 if ((chunk[0] & 0x0F) === 0x08) { body = body.pipe(zlib.createInflate()); } else { body = body.pipe(zlib.createInflateRaw()); } response = new Response(body, response_options); resolve(response); }); return; } // for br if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') { body = body.pipe(zlib.createBrotliDecompress()); response = new Response(body, response_options); resolve(response); return; } // otherwise, use response as-is response = new Response(body, response_options); resolve(response); }); writeToStream(req, request); }); } /** * Redirect code matching * * @param Number code Status code * @return Boolean */ fetch.isRedirect = function (code) { return code === 301 || code === 302 || code === 303 || code === 307 || code === 308; }; // expose Promise fetch.Promise = global.Promise; module.exports = exports = fetch; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.default = exports; exports.Headers = Headers; exports.Request = Request; exports.Response = Response; exports.FetchError = FetchError; /***/ }), /***/ 9975: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { "use strict"; /*eslint no-var:0, prefer-arrow-callback: 0, object-shorthand: 0 */ var Punycode = __nccwpck_require__(4213); var internals = {}; // // Read rules from file. // internals.rules = __nccwpck_require__(2156).map(function (rule) { return { rule: rule, suffix: rule.replace(/^(\*\.|\!)/, ''), punySuffix: -1, wildcard: rule.charAt(0) === '*', exception: rule.charAt(0) === '!' }; }); // // Check is given string ends with `suffix`. // internals.endsWith = function (str, suffix) { return str.indexOf(suffix, str.length - suffix.length) !== -1; }; // // Find rule for a given domain. // internals.findRule = function (domain) { var punyDomain = Punycode.toASCII(domain); return internals.rules.reduce(function (memo, rule) { if (rule.punySuffix === -1){ rule.punySuffix = Punycode.toASCII(rule.suffix); } if (!internals.endsWith(punyDomain, '.' + rule.punySuffix) && punyDomain !== rule.punySuffix) { return memo; } // This has been commented out as it never seems to run. This is because // sub tlds always appear after their parents and we never find a shorter // match. //if (memo) { // var memoSuffix = Punycode.toASCII(memo.suffix); // if (memoSuffix.length >= punySuffix.length) { // return memo; // } //} return rule; }, null); }; // // Error codes and messages. // exports.errorCodes = { DOMAIN_TOO_SHORT: 'Domain name too short.', DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.', LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.', LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.', LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.', LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.', LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.' }; // // Validate domain name and throw if not valid. // // From wikipedia: // // Hostnames are composed of series of labels concatenated with dots, as are all // domain names. Each label must be between 1 and 63 characters long, and the // entire hostname (including the delimiting dots) has a maximum of 255 chars. // // Allowed chars: // // * `a-z` // * `0-9` // * `-` but not as a starting or ending character // * `.` as a separator for the textual portions of a domain name // // * http://en.wikipedia.org/wiki/Domain_name // * http://en.wikipedia.org/wiki/Hostname // internals.validate = function (input) { // Before we can validate we need to take care of IDNs with unicode chars. var ascii = Punycode.toASCII(input); if (ascii.length < 1) { return 'DOMAIN_TOO_SHORT'; } if (ascii.length > 255) { return 'DOMAIN_TOO_LONG'; } // Check each part's length and allowed chars. var labels = ascii.split('.'); var label; for (var i = 0; i < labels.length; ++i) { label = labels[i]; if (!label.length) { return 'LABEL_TOO_SHORT'; } if (label.length > 63) { return 'LABEL_TOO_LONG'; } if (label.charAt(0) === '-') { return 'LABEL_STARTS_WITH_DASH'; } if (label.charAt(label.length - 1) === '-') { return 'LABEL_ENDS_WITH_DASH'; } if (!/^[a-z0-9\-]+$/.test(label)) { return 'LABEL_INVALID_CHARS'; } } }; // // Public API // // // Parse domain. // exports.parse = function (input) { if (typeof input !== 'string') { throw new TypeError('Domain name must be a string.'); } // Force domain to lowercase. var domain = input.slice(0).toLowerCase(); // Handle FQDN. // TODO: Simply remove trailing dot? if (domain.charAt(domain.length - 1) === '.') { domain = domain.slice(0, domain.length - 1); } // Validate and sanitise input. var error = internals.validate(domain); if (error) { return { input: input, error: { message: exports.errorCodes[error], code: error } }; } var parsed = { input: input, tld: null, sld: null, domain: null, subdomain: null, listed: false }; var domainParts = domain.split('.'); // Non-Internet TLD if (domainParts[domainParts.length - 1] === 'local') { return parsed; } var handlePunycode = function () { if (!/xn--/.test(domain)) { return parsed; } if (parsed.domain) { parsed.domain = Punycode.toASCII(parsed.domain); } if (parsed.subdomain) { parsed.subdomain = Punycode.toASCII(parsed.subdomain); } return parsed; }; var rule = internals.findRule(domain); // Unlisted tld. if (!rule) { if (domainParts.length < 2) { return parsed; } parsed.tld = domainParts.pop(); parsed.sld = domainParts.pop(); parsed.domain = [parsed.sld, parsed.tld].join('.'); if (domainParts.length) { parsed.subdomain = domainParts.pop(); } return handlePunycode(); } // At this point we know the public suffix is listed. parsed.listed = true; var tldParts = rule.suffix.split('.'); var privateParts = domainParts.slice(0, domainParts.length - tldParts.length); if (rule.exception) { privateParts.push(tldParts.shift()); } parsed.tld = tldParts.join('.'); if (!privateParts.length) { return handlePunycode(); } if (rule.wildcard) { tldParts.unshift(privateParts.pop()); parsed.tld = tldParts.join('.'); } if (!privateParts.length) { return handlePunycode(); } parsed.sld = privateParts.pop(); parsed.domain = [parsed.sld, parsed.tld].join('.'); if (privateParts.length) { parsed.subdomain = privateParts.join('.'); } return handlePunycode(); }; // // Get domain. // exports.get = function (domain) { if (!domain) { return null; } return exports.parse(domain).domain || null; }; // // Check whether domain belongs to a known public suffix. // exports.isValid = function (domain) { var parsed = exports.parse(domain); return Boolean(parsed.domain && parsed.listed); }; /***/ }), /***/ 2043: /***/ ((__unused_webpack_module, exports, __nccwpck_require__) => { ;(function (sax) { // wrapper for non-node envs sax.parser = function (strict, opt) { return new SAXParser(strict, opt) } sax.SAXParser = SAXParser sax.SAXStream = SAXStream sax.createStream = createStream // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns. // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)), // since that's the earliest that a buffer overrun could occur. This way, checks are // as rare as required, but as often as necessary to ensure never crossing this bound. // Furthermore, buffers are only tested at most once per write(), so passing a very // large string into write() might have undesirable effects, but this is manageable by // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme // edge case, result in creating at most one complete copy of the string passed in. // Set to Infinity to have unlimited buffers. sax.MAX_BUFFER_LENGTH = 64 * 1024 var buffers = [ 'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype', 'procInstName', 'procInstBody', 'entity', 'attribName', 'attribValue', 'cdata', 'script' ] sax.EVENTS = [ 'text', 'processinginstruction', 'sgmldeclaration', 'doctype', 'comment', 'opentagstart', 'attribute', 'opentag', 'closetag', 'opencdata', 'cdata', 'closecdata', 'error', 'end', 'ready', 'script', 'opennamespace', 'closenamespace' ] function SAXParser (strict, opt) { if (!(this instanceof SAXParser)) { return new SAXParser(strict, opt) } var parser = this clearBuffers(parser) parser.q = parser.c = '' parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH parser.opt = opt || {} parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase' parser.tags = [] parser.closed = parser.closedRoot = parser.sawRoot = false parser.tag = parser.error = null parser.strict = !!strict parser.noscript = !!(strict || parser.opt.noscript) parser.state = S.BEGIN parser.strictEntities = parser.opt.strictEntities parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES) parser.attribList = [] // namespaces form a prototype chain. // it always points at the current tag, // which protos to its parent tag. if (parser.opt.xmlns) { parser.ns = Object.create(rootNS) } // mostly just for error reporting parser.trackPosition = parser.opt.position !== false if (parser.trackPosition) { parser.position = parser.line = parser.column = 0 } emit(parser, 'onready') } if (!Object.create) { Object.create = function (o) { function F () {} F.prototype = o var newf = new F() return newf } } if (!Object.keys) { Object.keys = function (o) { var a = [] for (var i in o) if (o.hasOwnProperty(i)) a.push(i) return a } } function checkBufferLength (parser) { var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10) var maxActual = 0 for (var i = 0, l = buffers.length; i < l; i++) { var len = parser[buffers[i]].length if (len > maxAllowed) { // Text/cdata nodes can get big, and since they're buffered, // we can get here under normal conditions. // Avoid issues by emitting the text node now, // so at least it won't get any bigger. switch (buffers[i]) { case 'textNode': closeText(parser) break case 'cdata': emitNode(parser, 'oncdata', parser.cdata) parser.cdata = '' break case 'script': emitNode(parser, 'onscript', parser.script) parser.script = '' break default: error(parser, 'Max buffer length exceeded: ' + buffers[i]) } } maxActual = Math.max(maxActual, len) } // schedule the next check for the earliest possible buffer overrun. var m = sax.MAX_BUFFER_LENGTH - maxActual parser.bufferCheckPosition = m + parser.position } function clearBuffers (parser) { for (var i = 0, l = buffers.length; i < l; i++) { parser[buffers[i]] = '' } } function flushBuffers (parser) { closeText(parser) if (parser.cdata !== '') { emitNode(parser, 'oncdata', parser.cdata) parser.cdata = '' } if (parser.script !== '') { emitNode(parser, 'onscript', parser.script) parser.script = '' } } SAXParser.prototype = { end: function () { end(this) }, write: write, resume: function () { this.error = null; return this }, close: function () { return this.write(null) }, flush: function () { flushBuffers(this) } } var Stream try { Stream = __nccwpck_require__(2413).Stream } catch (ex) { Stream = function () {} } var streamWraps = sax.EVENTS.filter(function (ev) { return ev !== 'error' && ev !== 'end' }) function createStream (strict, opt) { return new SAXStream(strict, opt) } function SAXStream (strict, opt) { if (!(this instanceof SAXStream)) { return new SAXStream(strict, opt) } Stream.apply(this) this._parser = new SAXParser(strict, opt) this.writable = true this.readable = true var me = this this._parser.onend = function () { me.emit('end') } this._parser.onerror = function (er) { me.emit('error', er) // if didn't throw, then means error was handled. // go ahead and clear error, so we can write again. me._parser.error = null } this._decoder = null streamWraps.forEach(function (ev) { Object.defineProperty(me, 'on' + ev, { get: function () { return me._parser['on' + ev] }, set: function (h) { if (!h) { me.removeAllListeners(ev) me._parser['on' + ev] = h return h } me.on(ev, h) }, enumerable: true, configurable: false }) }) } SAXStream.prototype = Object.create(Stream.prototype, { constructor: { value: SAXStream } }) SAXStream.prototype.write = function (data) { if (typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function' && Buffer.isBuffer(data)) { if (!this._decoder) { var SD = __nccwpck_require__(4304).StringDecoder this._decoder = new SD('utf8') } data = this._decoder.write(data) } this._parser.write(data.toString()) this.emit('data', data) return true } SAXStream.prototype.end = function (chunk) { if (chunk && chunk.length) { this.write(chunk) } this._parser.end() return true } SAXStream.prototype.on = function (ev, handler) { var me = this if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) { me._parser['on' + ev] = function () { var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments) args.splice(0, 0, ev) me.emit.apply(me, args) } } return Stream.prototype.on.call(me, ev, handler) } // this really needs to be replaced with character classes. // XML allows all manner of ridiculous numbers and digits. var CDATA = '[CDATA[' var DOCTYPE = 'DOCTYPE' var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace' var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/' var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE } // http://www.w3.org/TR/REC-xml/#NT-NameStartChar // This implementation works on strings, a single character at a time // as such, it cannot ever support astral-plane characters (10000-EFFFF) // without a significant breaking change to either this parser, or the // JavaScript language. Implementation of an emoji-capable xml parser // is left as an exercise for the reader. var nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/ var entityStart = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ var entityBody = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/ function isWhitespace (c) { return c === ' ' || c === '\n' || c === '\r' || c === '\t' } function isQuote (c) { return c === '"' || c === '\'' } function isAttribEnd (c) { return c === '>' || isWhitespace(c) } function isMatch (regex, c) { return regex.test(c) } function notMatch (regex, c) { return !isMatch(regex, c) } var S = 0 sax.STATE = { BEGIN: S++, // leading byte order mark or whitespace BEGIN_WHITESPACE: S++, // leading whitespace TEXT: S++, // general stuff TEXT_ENTITY: S++, // & and such. OPEN_WAKA: S++, // < SGML_DECL: S++, // SCRIPT: S++, //